Path: blob/master/SonicMania/Objects/Menu/DemoMenu.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: DemoMenu Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectDemoMenu *DemoMenu = NULL;1011void DemoMenu_Update(void)12{13RSDK_THIS(DemoMenu);1415StateMachine_Run(self->state);1617self->angle = (self->angle + 1) & 0x1FF;1819if (!(self->angle & 1)) {20SpriteFrame *frameA = self->ghzFrame;21if (++frameA->sprX > 193)22frameA->sprX -= 192;2324SpriteFrame *frameB = self->spzFrame;25if (--frameB->sprX <= 0)26frameB->sprX += 192;27}28}2930void DemoMenu_LateUpdate(void) {}3132void DemoMenu_StaticUpdate(void) {}3334void DemoMenu_Draw(void)35{36RSDK_THIS(DemoMenu);3738RSDK.DrawSprite(&self->zoneSelAnimator, &self->zoneSelPos, false);3940DemoMenu_DrawStagePreview(&self->ghzPos, &self->ghzAnimator, 0);41DemoMenu_DrawStagePreview(&self->spzPos, &self->spzAnimator, 1);42}4344void DemoMenu_Create(void *data)45{46RSDK_THIS(DemoMenu);4748RSDK.SetSpriteAnimation(DemoMenu->aniFrames, 0, &self->zoneSelAnimator, true, 0);49RSDK.SetSpriteAnimation(DemoMenu->aniFrames, 1, &self->blackBarAnimator, true, 0);50RSDK.SetSpriteAnimation(DemoMenu->aniFrames, 2, &self->flashBarAnimator, true, 0);51RSDK.SetSpriteAnimation(DemoMenu->aniFrames, 3, &self->ghzAnimator, true, 0);52RSDK.SetSpriteAnimation(DemoMenu->aniFrames, 4, &self->spzAnimator, true, 0);5354self->ghzFrame = RSDK.GetFrame(DemoMenu->aniFrames, 3, 2);55self->spzFrame = RSDK.GetFrame(DemoMenu->aniFrames, 4, 2);5657if (!SceneInfo->inEditor) {58self->zoneSelPos.x = 256 << 16;59self->zoneSelPos.y = -(32 << 16);60self->ghzPos.x = -(128 << 16);61self->ghzPos.y = 104 << 16;62self->spzPos.x = 640 << 16;63self->spzPos.y = 184 << 16;6465self->active = ACTIVE_NORMAL;66self->visible = true;67self->drawGroup = 4;68self->state = DemoMenu_State_Appear;69}70}7172void DemoMenu_StageLoad(void) { DemoMenu->aniFrames = RSDK.LoadSpriteAnimation("Title/DemoMenu.bin", SCOPE_STAGE); }7374void DemoMenu_DrawStagePreview(Vector2 *pos, Animator *animator, int32 zoneID)75{76RSDK_THIS(DemoMenu);7778animator->frameID = 0;79RSDK.DrawSprite(animator, pos, false);8081self->blackBarAnimator.frameID = 0;82RSDK.DrawSprite(&self->blackBarAnimator, pos, false);8384self->blackBarAnimator.frameID = 1;85self->inkEffect = INK_BLEND;86RSDK.DrawSprite(&self->blackBarAnimator, pos, false);8788self->inkEffect = INK_NONE;89if (zoneID == self->selectedZone) {90RSDK.DrawSprite(&self->flashBarAnimator, pos, false);9192animator->frameID = 1;93RSDK.DrawSprite(animator, pos, false);9495animator->frameID = 2;96RSDK.DrawSprite(animator, pos, false);97}98else {99animator->frameID = 1;100RSDK.DrawSprite(animator, pos, false);101102animator->frameID = 2;103self->inkEffect = INK_BLEND;104RSDK.DrawSprite(animator, pos, false);105106self->inkEffect = INK_NONE;107}108}109void DemoMenu_State_Appear(void)110{111RSDK_THIS(DemoMenu);112113if (self->zoneSelPos.y < 0x280000)114self->zoneSelPos.y += 0x80000;115116if (self->ghzPos.x < 0x1000000)117self->ghzPos.x += 0x200000;118119if (self->spzPos.x <= 0x1000000) {120self->state = DemoMenu_State_Selection;121}122else {123self->spzPos.x -= 0x200000;124}125}126void DemoMenu_State_Selection(void)127{128RSDK_THIS(DemoMenu);129130if (ControllerInfo->keyUp.press || ControllerInfo->keyDown.press) {131self->selectedZone ^= 1;132RSDK.PlaySfx(TitleSetup->sfxMenuBleep, false, 255);133}134else {135#if MANIA_USE_PLUS136float vDelta = AnalogStickInfoL->vDelta;137float deltaDist = AnalogStickInfoL->vDelta - self->vDelta;138#else139float vDelta = AnalogStickInfoL->vDeltaL;140float deltaDist = AnalogStickInfoL->vDeltaL - self->vDelta;141#endif142if (deltaDist < 0.0)143deltaDist = -deltaDist;144145if (deltaDist > 0.5) {146if (vDelta < 0.0)147vDelta = -vDelta;148149if (vDelta > 0.5) {150self->selectedZone ^= 1;151RSDK.PlaySfx(TitleSetup->sfxMenuBleep, false, 255);152}153154self->vDelta = vDelta;155}156}157158if (ControllerInfo->keyStart.press || ControllerInfo->keyA.press) {159self->state = DemoMenu_State_Load;160Music_Stop();161RSDK.PlaySfx(TitleSetup->sfxMenuAccept, false, 255);162}163}164void DemoMenu_State_Load(void)165{166RSDK_THIS(DemoMenu);167168RSDK.ProcessAnimation(&self->flashBarAnimator);169170if (++self->timer == 30) {171self->timer = 0;172if (self->selectedZone == 0)173RSDK.SetScene("Media Demo", "Green Hill Zone 1");174else175RSDK.SetScene("Media Demo", "Studiopolis Zone 1");176177foreach_all(TitleSetup, titleSetup)178{179titleSetup->state = TitleSetup_State_FadeToMenu;180titleSetup->stateDraw = TitleSetup_Draw_FadeBlack;181}182183self->state = DemoMenu_State_Disappear;184}185}186void DemoMenu_State_Disappear(void)187{188RSDK_THIS(DemoMenu);189190self->zoneSelPos.y -= 0x80000;191self->ghzPos.x += 0x200000;192self->spzPos.x -= 0x200000;193194if (++self->timer == 30)195destroyEntity(self);196}197198#if GAME_INCLUDE_EDITOR199void DemoMenu_EditorDraw(void)200{201RSDK_THIS(DemoMenu);202203self->zoneSelPos.x = self->position.x;204self->zoneSelPos.y = self->position.y + -(32 << 16);205self->ghzPos.x = self->position.x;206self->ghzPos.y = self->position.y + (104 << 16);207self->spzPos.x = self->position.x;208self->spzPos.y = self->position.y + (184 << 16);209210DemoMenu_Draw();211}212213void DemoMenu_EditorLoad(void) { DemoMenu->aniFrames = RSDK.LoadSpriteAnimation("Title/DemoMenu.bin", SCOPE_STAGE); }214#endif215216void DemoMenu_Serialize(void) {}217218219