Path: blob/master/SonicMania/Objects/MMZ/ConveyorPlatform.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: ConveyorPlatform Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectConveyorPlatform *ConveyorPlatform;1011void ConveyorPlatform_Update(void)12{13RSDK_THIS(ConveyorPlatform);1415if (self->state == Platform_State_Path) {16if (self->timer || self->flipTimer) {17if (++self->flipTimer == 24) {18self->stateCollide = Platform_Collision_Solid;19self->collision = PLATFORM_C_SOLID;20self->flipTimer = 0;21}22else {23self->stateCollide = Platform_Collision_None;24self->collision = PLATFORM_C_NONE;25}2627self->animator.frameID = ConveyorPlatform->frameIDs[self->flipTimer];28self->direction = ConveyorPlatform->directionIDs[self->flipTimer];29}30}31else {32if (self->flipTimer) {33if (++self->flipTimer >= self->flipCount) {34self->stateCollide = Platform_Collision_Solid;35self->collision = PLATFORM_C_SOLID;36self->flipTimer = 0;37}3839self->animator.frameID = ConveyorPlatform->frameIDs[self->flipTimer % 24];40self->direction = ConveyorPlatform->directionIDs[self->flipTimer % 24];41}4243if (!((Zone->persistentTimer + self->intervalOffset) % self->interval) && !self->flipTimer) {44self->stateCollide = Platform_Collision_None;45self->collision = PLATFORM_C_NONE;46self->flipTimer = 1;47}48}4950Platform_Update();51}5253void ConveyorPlatform_LateUpdate(void) {}5455void ConveyorPlatform_StaticUpdate(void) {}5657void ConveyorPlatform_Draw(void)58{59RSDK_THIS(ConveyorPlatform);6061RSDK.DrawSprite(&self->animator, &self->drawPos, false);62}6364void ConveyorPlatform_Create(void *data)65{66RSDK_THIS(ConveyorPlatform);6768if (self->type)69self->type = PLATFORM_PATH;7071Platform_Create(NULL);7273RSDK.SetSpriteAnimation(Platform->aniFrames, 2, &self->animator, true, 0);7475self->drawFX |= FX_FLIP;76self->stateCollide = Platform_Collision_Solid;77self->collision = PLATFORM_C_SOLID;78self->flipTimer = 0;7980if (!SceneInfo->inEditor)81self->flipCount *= 12;82}8384void ConveyorPlatform_StageLoad(void) {}8586#if GAME_INCLUDE_EDITOR87void ConveyorPlatform_EditorDraw(void)88{89RSDK_THIS(ConveyorPlatform);9091ConveyorPlatform_Create(NULL);92self->drawPos = self->position;9394ConveyorPlatform_Draw();9596if (showGizmos()) {97RSDK_DRAWING_OVERLAY(true);9899for (int32 s = SceneInfo->entitySlot + 1, i = 0; i < self->childCount; ++i) {100Entity *child = RSDK_GET_ENTITY_GEN(s + i);101if (!child)102continue;103104DrawHelpers_DrawArrow(self->position.x, self->position.y, child->position.x, child->position.y, 0xE0E0E0, INK_NONE, 0xFF);105}106107RSDK_DRAWING_OVERLAY(false);108}109}110111void ConveyorPlatform_EditorLoad(void)112{113114RSDK_ACTIVE_VAR(ConveyorPlatform, type);115RSDK_ENUM_VAR("Fixed", CONVEYORPLATFORM_FIXED);116RSDK_ENUM_VAR("Moving", CONVEYORPLATFORM_MOVING);117}118#endif119120void ConveyorPlatform_Serialize(void)121{122RSDK_EDITABLE_VAR(ConveyorPlatform, VAR_ENUM, type);123RSDK_EDITABLE_VAR(ConveyorPlatform, VAR_ENUM, node);124RSDK_EDITABLE_VAR(ConveyorPlatform, VAR_ENUM, childCount);125RSDK_EDITABLE_VAR(ConveyorPlatform, VAR_UINT16, interval);126RSDK_EDITABLE_VAR(ConveyorPlatform, VAR_UINT16, intervalOffset);127RSDK_EDITABLE_VAR(ConveyorPlatform, VAR_UINT16, flipCount);128}129130131