Path: blob/master/SonicMania/Objects/PGZ/Ice.h
338 views
#ifndef OBJ_ICE_H1#define OBJ_ICE_H23#include "Game.h"45#if MANIA_USE_PLUS6typedef enum {7ICEANI_ICEBLOCK,8ICEANI_PLAYERBLOCK,9ICEANI_PLAYERGLINT,10ICEANI_PILLARBLOCK,11ICEANI_PILLARGLINT,12ICEANI_SHARD,13ICEANI_LARGEGLINT,14ICEANI_SMALLGLINT,15ICEANI_PIECE,16ICEANI_RINGS,17ICEANI_SONICIDLE,18ICEANI_SONICLEFT,19ICEANI_SONICRIGHT,20ICEANI_SONICSHAKE,21ICEANI_SUPERSONICIDLE,22ICEANI_SUPERSONICLEFT,23ICEANI_SUPERSONICRIGHT,24ICEANI_SUPERSONICSHAKE,25ICEANI_TAILSIDLE,26ICEANI_TAILSLEFT,27ICEANI_TAILSRIGHT,28ICEANI_TAILSSHAKE,29ICEANI_KNUXIDLE,30ICEANI_KNUXLEFT,31ICEANI_KNUXRIGHT,32ICEANI_KNUXSHAKE,33ICEANI_MIGHTYIDLE,34ICEANI_MIGHTYLEFT,35ICEANI_MIGHTYRIGHT,36ICEANI_MIGHTYSHAKE,37ICEANI_RAYIDLE,38ICEANI_RAYLEFT,39ICEANI_RAYRIGHT,40ICEANI_RAYSHAKE41} IceAni;42#else43typedef enum {44ICEANI_ICEBLOCK,45ICEANI_PLAYERBLOCK,46ICEANI_RINGS,47ICEANI_SONIC,48ICEANI_TAILS,49ICEANI_KNUX,50ICEANI_PILLARBLOCK,51ICEANI_PLAYERGLINT,52ICEANI_PILLARGLINT,53ICEANI_SHARD,54ICEANI_LARGEGLINT,55ICEANI_SMALLGLINT,56ICEANI_PIECE57} IceAni;58#endif5960typedef enum {61ICE_SIZE_LARGE,62ICE_SIZE_SMALL,63} IceSizes;6465typedef enum {66ICE_BLOCK,67ICE_1RING,68ICE_3RINGS,69ICE_5RINGS,70ICE_SPIKES,71ICE_ITEMBOX_RINGS,72ICE_ITEMBOX_BLUESHIELD,73ICE_ITEMBOX_BUBBLESHIELD,74ICE_ITEMBOX_FIRESHIELD,75ICE_ITEMBOX_LIGHTNINGSHIELD,76ICE_ITEMBOX_INVINCIBILITY,77ICE_ITEMBOX_SNEAKERS,78ICE_ITEMBOX_1UP,79ICE_ITEMBOX_EGGMAN,80ICE_ITEMBOX_HYPERRING,81ICE_ITEMBOX_SWAP,82ICE_ITEMBOX_RANDOM,83ICE_ITEMBOX_SUPER,84ICE_SPRING,85} IceTypes;8687typedef enum {88ICE_CHILD_NONE,89ICE_CHILD_PLAYER,90ICE_CHILD_PILLAR,91ICE_CHILD_SHARD,92} IceChildTypes;9394// Object Class95struct ObjectIce {96RSDK_OBJECT97uint16 aniFrames;98Hitbox hitboxPlayerBlockInner;99Hitbox hitboxPlayerBlockOuter;100int32 playerTimers[PLAYER_COUNT];101uint16 sfxFreeze;102uint16 sfxLedgeBreak;103uint16 sfxWindowShatter;104uint16 sfxStruggle;105};106107// Entity Class108struct EntityIce {109RSDK_ENTITY110StateMachine(state);111StateMachine(stateDraw);112uint8 size;113uint8 type;114uint8 subType;115uint8 subFlip;116bool32 bottomSmash;117bool32 knuxSmash;118uint8 timer;119uint8 animationID;120Animator blockAnimator;121Animator contentsAnimator;122Animator altContentsAnimator;123Animator glintAnimator;124EntityPlayer *playerPtr;125Vector2 playerMoveOffset;126Vector2 contentsOffset;127int32 glintTimer;128Hitbox hitboxBlock;129Hitbox hitboxFallCheck;130Hitbox hitboxPlayerBlockCheck;131};132133// Object Struct134extern ObjectIce *Ice;135136// Standard Entity Events137void Ice_Update(void);138void Ice_LateUpdate(void);139void Ice_StaticUpdate(void);140void Ice_Draw(void);141void Ice_Create(void *data);142void Ice_StageLoad(void);143#if GAME_INCLUDE_EDITOR144void Ice_EditorDraw(void);145void Ice_EditorLoad(void);146#endif147void Ice_Serialize(void);148149// Extra Entity Functions150void Ice_VSSwap_CheckFrozen(void);151152void Ice_FreezePlayer(EntityPlayer *player);153bool32 Ice_CheckPlayerBlockSmashH(void);154bool32 Ice_CheckPlayerBlockSmashV(void);155void Ice_PlayerState_Frozen(void);156void Ice_ShatterGenerator(int32 count, int32 sizeX, int32 sizeY, int32 velX, int32 velY, int32 canBreak);157void Ice_FullShatter(EntityPlayer *player, int32 velX, int32 velY);158void Ice_BreakPlayerBlock(EntityPlayer *player);159EntityItemBox *Ice_Shatter(EntityIce *ice, int32 velX, int32 velY);160void Ice_TimeOver_CheckFrozen(void);161162void Ice_UpdateBlockGravity(void);163void Ice_State_IceBlock(void);164void Ice_State_StartBlockFall(void);165void Ice_State_BlockFallDelay(void);166void Ice_State_IceBlockFall(void);167void Ice_State_PlayerBlock(void);168void Ice_State_Shard(void);169170void Ice_Draw_IceBlock(void);171void Ice_Draw_PlayerBlock(void);172void Ice_Draw_Pillar(void);173void Ice_Draw_Shard(void);174175#endif //! OBJ_ICE_H176177178