Path: blob/master/SonicMania/Objects/Menu/ThanksSetup.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: ThanksSetup Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectThanksSetup *ThanksSetup;1011void ThanksSetup_Update(void)12{13RSDK_THIS(ThanksSetup);1415StateMachine_Run(self->state);1617ScreenInfo->position.x = 0x100 - ScreenInfo->center.x;18}1920void ThanksSetup_LateUpdate(void) {}2122void ThanksSetup_StaticUpdate(void) {}2324void ThanksSetup_Draw(void)25{26RSDK_THIS(ThanksSetup);2728StateMachine_Run(self->stateDraw);29}3031void ThanksSetup_Create(void *data)32{33RSDK_THIS(ThanksSetup);3435if (!SceneInfo->inEditor) {36self->active = ACTIVE_ALWAYS;37self->visible = true;38self->drawGroup = 12;39self->drawFX = FX_FLIP;40self->state = ThanksSetup_State_ThanksForPlaying;41self->stateDraw = ThanksSetup_Draw_Fade;4243self->timer = 0x300;44self->radius = 0x10000;45self->scale.x = 0x200;46self->scale.y = 0x200;4748self->thanksLogo = RSDK_GET_ENTITY(RESERVE_ENTITY_COUNT + 16, UIPicture);49self->thanksLogo->scale.x = 0x200;50self->thanksLogo->scale.y = 0x200;51}52}5354void ThanksSetup_StageLoad(void)55{56ThanksSetup->sfxSega = RSDK.GetSfx("Stage/Sega.wav");5758RSDK.ResetEntitySlot(0, ThanksSetup->classID, 0);5960UIPicture->aniFrames = RSDK.LoadSpriteAnimation("Thanks/Decorations.bin", SCOPE_STAGE);6162for (int32 c = 0; c < CHANNEL_COUNT; ++c) RSDK.StopChannel(c);63}6465void ThanksSetup_HandleIconsPos(void)66{67RSDK_THIS(ThanksSetup);6869self->angle = (self->angle - 3) & 0x1FF;7071int32 angle = self->angle;72foreach_active(UIPicture, picture)73{74if (!picture->animator.animationID) {75picture->position.x = 0x1000000 + self->radius * RSDK.Sin512(angle);76picture->position.y = 0x780000 + self->radius * RSDK.Cos512(angle);77angle += 32;78}79}80}8182void ThanksSetup_State_ThanksForPlaying(void)83{84RSDK_THIS(ThanksSetup);8586if (self->timer <= 0) {87self->timer = 0;88self->radius += (0x3000 - self->radius) >> 4;89self->state = ThanksSetup_State_FlipOverIcon;90self->stateDraw = 0;91}92else {93self->radius += (0x3000 - self->radius) >> 4;94self->timer -= 16;95}9697ThanksSetup_HandleIconsPos();98}99100void ThanksSetup_State_FlipOverIcon(void)101{102RSDK_THIS(ThanksSetup);103104if (++self->timer > 120) {105self->rotation += 4;106EntityUIPicture *picture = self->thanksLogo;107108picture->drawFX = FX_SCALE;109picture->scale.x = RSDK.Cos512(self->rotation);110111if (self->rotation == 128) {112RSDK.SetSpriteAnimation(UIPicture->aniFrames, 2, &picture->animator, true, 0);113self->timer = 0;114self->state = ThanksSetup_State_Mania2017;115}116}117self->radius += (0x3000 - self->radius) >> 4;118119ThanksSetup_HandleIconsPos();120}121122void ThanksSetup_State_Mania2017(void)123{124RSDK_THIS(ThanksSetup);125126if (self->rotation <= 0) {127if (++self->timer > 120) {128self->timer = 0;129self->state = ThanksSetup_State_FadeOut;130self->stateDraw = ThanksSetup_Draw_Fade;131}132}133else {134EntityUIPicture *picture = self->thanksLogo;135136self->rotation -= 4;137picture->scale.x = RSDK.Cos512(self->rotation);138139if (!self->rotation)140picture->drawFX = FX_NONE;141}142143ThanksSetup_HandleIconsPos();144}145146void ThanksSetup_State_FadeOut(void)147{148RSDK_THIS(ThanksSetup);149150if (self->timer >= 1024) {151SceneInfo->listPos = 0;152RSDK.LoadScene();153}154else {155self->timer += 16;156}157158self->radius += (self->radius - 0x2000) >> 4;159160ThanksSetup_HandleIconsPos();161}162163void ThanksSetup_Draw_Fade(void)164{165RSDK_THIS(ThanksSetup);166167RSDK.FillScreen(0x000000, self->timer, self->timer - 128, self->timer - 256);168}169170#if GAME_INCLUDE_EDITOR171void ThanksSetup_EditorDraw(void) {}172173void ThanksSetup_EditorLoad(void) { UIPicture->aniFrames = RSDK.LoadSpriteAnimation("Thanks/Decorations.bin", SCOPE_STAGE); }174#endif175176void ThanksSetup_Serialize(void) {}177178179