Path: blob/master/SonicMania/Objects/Cutscene/FXFade.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: FXFade Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectFXFade *FXFade;1011void FXFade_Update(void)12{13RSDK_THIS(FXFade);1415StateMachine_Run(self->state);16}1718void FXFade_LateUpdate(void) {}1920void FXFade_StaticUpdate(void) {}2122void FXFade_Draw(void)23{24RSDK_THIS(FXFade);2526RSDK.FillScreen(self->color, self->timer, self->timer - 128, self->timer - 256);27}2829void FXFade_Create(void *data)30{31RSDK_THIS(FXFade);3233if (!SceneInfo->inEditor) {34self->visible = true;35self->active = ACTIVE_NORMAL;3637if (RSDK.CheckSceneFolder("Menu"))38self->drawGroup = 14;39else if (Zone)40self->drawGroup = self->overHUD ? Zone->hudDrawGroup : Zone->hudDrawGroup - 1;41else42self->drawGroup = 15;4344if (!self->speedIn)45self->speedIn = 32;4647if (!self->speedOut)48self->speedOut = 32;4950if (!self->color)51self->color = VOID_TO_INT(data);5253if (!self->eventOnly) {54#if MANIA_USE_PLUS55self->transitionScene = false;56#endif57self->state = self->timer <= 0 ? FXFade_State_FadeOut : FXFade_State_FadeIn;58}59}60}6162void FXFade_StageLoad(void) {}6364void FXFade_StopAll(void)65{66foreach_all(FXFade, entity) { destroyEntity(entity); }67}6869void FXFade_State_FadeOut(void)70{71RSDK_THIS(FXFade);7273if (self->timer >= 512) {74if (self->oneWay) {75self->state = StateMachine_None;7677#if MANIA_USE_PLUS78if (self->transitionScene)79RSDK.LoadScene();80#endif81}82else if (self->wait <= 0) {83self->state = self->fadeOutBlack ? FXFade_State_FadeInBlack : FXFade_State_FadeIn;84}85else {86self->state = FXFade_State_Wait;87}88}89else {90self->timer += self->speedIn;91}92}93void FXFade_State_Wait(void)94{95RSDK_THIS(FXFade);9697if (--self->wait <= 0) {98self->state = self->fadeOutBlack ? FXFade_State_FadeInBlack : FXFade_State_FadeIn;99}100}101void FXFade_State_FadeIn(void)102{103RSDK_THIS(FXFade);104105if (self->timer <= 0) {106if (self->oneWay)107self->state = StateMachine_None;108else109destroyEntity(self);110}111else {112self->timer -= self->speedOut;113}114}115void FXFade_State_FadeInBlack(void)116{117RSDK_THIS(FXFade);118119int32 r = (self->color >> 16) & 0xFF;120int32 g = (self->color >> 8) & 0xFF;121int32 b = (self->color >> 0) & 0xFF;122123if (r)124r -= self->speedOut;125else if (g)126g -= self->speedOut;127else if (b)128b -= self->speedOut;129else130self->state = StateMachine_None;131132self->color = (MAX(r, 0) << 16) | (MAX(g, 0) << 8) | (MAX(b, 0) << 0);133}134135#if GAME_INCLUDE_EDITOR136void FXFade_EditorDraw(void)137{138RSDK_THIS(FXFade);139140RSDK.DrawRect(self->position.x - 0x100000, self->position.y - 0x100000, 0x200000, 0x200000, self->color, 0xFF, INK_NONE, false);141}142143void FXFade_EditorLoad(void) {}144#endif145146void FXFade_Serialize(void)147{148RSDK_EDITABLE_VAR(FXFade, VAR_ENUM, timer);149RSDK_EDITABLE_VAR(FXFade, VAR_ENUM, speedIn);150RSDK_EDITABLE_VAR(FXFade, VAR_ENUM, wait);151RSDK_EDITABLE_VAR(FXFade, VAR_ENUM, speedOut);152RSDK_EDITABLE_VAR(FXFade, VAR_COLOR, color);153RSDK_EDITABLE_VAR(FXFade, VAR_BOOL, oneWay);154RSDK_EDITABLE_VAR(FXFade, VAR_BOOL, eventOnly);155RSDK_EDITABLE_VAR(FXFade, VAR_BOOL, overHUD);156RSDK_EDITABLE_VAR(FXFade, VAR_BOOL, fadeOutBlack);157}158159160