Path: blob/master/SonicMania/Objects/Puyo/PuyoLevelSelect.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: PuyoLevelSelect Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectPuyoLevelSelect *PuyoLevelSelect;1011void PuyoLevelSelect_Update(void)12{13RSDK_THIS(PuyoLevelSelect);1415if (self->canSelectLevels) {16self->visible = !self->ready;1718int32 controllerID = self->playerID + 1;1920RSDKControllerState *controller = &ControllerInfo[controllerID];2122self->up = controller->keyUp.press || AnalogStickInfoL[controllerID].keyUp.press;23self->down = controller->keyDown.press || AnalogStickInfoL[controllerID].keyDown.press;2425if (API_GetConfirmButtonFlip()) {26self->confirmPress = controller->keyB.press;27self->backPress = controller->keyA.press;28}29else {30self->confirmPress = controller->keyA.press;31self->backPress = controller->keyB.press;32}3334PuyoLevelSelect_HandleMenuMovement();35}36else {37self->visible = false;38}39}4041void PuyoLevelSelect_LateUpdate(void) {}4243void PuyoLevelSelect_StaticUpdate(void) {}4445void PuyoLevelSelect_Draw(void) { PuyoLevelSelect_DrawSprites(); }4647void PuyoLevelSelect_Create(void *data)48{49RSDK_THIS(PuyoLevelSelect);5051self->active = ACTIVE_NORMAL;52self->drawGroup = 10;53self->visible = true;54self->updateRange.x = 0x800000;55self->updateRange.y = 0x800000;56}5758void PuyoLevelSelect_StageLoad(void)59{60PuyoLevelSelect->aniFrames = RSDK.LoadSpriteAnimation("Puyo/PuyoUI.bin", SCOPE_STAGE);6162PuyoLevelSelect->sfxMenuBleep = RSDK.GetSfx("Global/MenuBleep.wav");63PuyoLevelSelect->sfxMenuAccept = RSDK.GetSfx("Global/MenuAccept.wav");64}6566void PuyoLevelSelect_DrawSprites(void)67{68RSDK_THIS(PuyoLevelSelect);6970Vector2 drawPos;71drawPos.x = self->position.x + 0x30000;72drawPos.y = self->position.y + 0x30000;73self->inkEffect = INK_BLEND;74self->alpha = 0x7F;75RSDK.SetSpriteAnimation(PuyoLevelSelect->aniFrames, 0, &self->frameAnimator, true, 1);76RSDK.DrawSprite(&self->frameAnimator, &drawPos, false);7778drawPos.x -= 0x30000;79drawPos.y -= 0x30000;80self->inkEffect = INK_NONE;81RSDK.SetSpriteAnimation(PuyoLevelSelect->aniFrames, 0, &self->frameAnimator, true, 0);82RSDK.DrawSprite(&self->frameAnimator, &drawPos, false);8384drawPos.x = self->position.x;85drawPos.y = self->position.y - 0x500000;86RSDK.SetSpriteAnimation(PuyoLevelSelect->aniFrames, 1, &self->labelAnimator, true, 1);87RSDK.DrawSprite(&self->labelAnimator, &drawPos, false);8889drawPos.x = self->position.x;90drawPos.y = self->position.y - 0x310000;9192// Draw Levels93for (int32 i = 0; i < 5; ++i) {94if (i != self->optionID || (!(Zone->timer & 4))) {95RSDK.SetSpriteAnimation(PuyoLevelSelect->aniFrames, (i != self->optionID) + 4, &self->labelAnimator, true, i + 1);96RSDK.DrawSprite(&self->labelAnimator, &drawPos, false);97}98drawPos.y += 0x180000;99}100}101102void PuyoLevelSelect_HandleMenuMovement(void)103{104RSDK_THIS(PuyoLevelSelect);105106if (self->ready) {107if (self->backPress)108self->ready = false;109}110else if (self->up || self->down) {111if (self->up)112--self->optionID;113114if (self->down)115++self->optionID;116117if (self->optionID >= 5)118self->optionID -= 5;119120if (self->optionID < 0)121self->optionID += 5;122123RSDK.PlaySfx(PuyoLevelSelect->sfxMenuBleep, false, 255);124}125else if (self->confirmPress) {126self->ready = true;127RSDK.PlaySfx(PuyoLevelSelect->sfxMenuAccept, false, 255);128}129}130131#if GAME_INCLUDE_EDITOR132void PuyoLevelSelect_EditorDraw(void) { PuyoLevelSelect_DrawSprites(); }133134void PuyoLevelSelect_EditorLoad(void)135{136PuyoLevelSelect->aniFrames = RSDK.LoadSpriteAnimation("Puyo/PuyoUI.bin", SCOPE_STAGE);137138RSDK_ACTIVE_VAR(PuyoLevelSelect, playerID);139RSDK_ENUM_VAR("Player 1", PUYOGAME_PLAYER1);140RSDK_ENUM_VAR("Player 2", PUYOGAME_PLAYER2);141}142#endif143144void PuyoLevelSelect_Serialize(void) { RSDK_EDITABLE_VAR(PuyoLevelSelect, VAR_ENUM, playerID); }145146147