diff options
| author | robojumper <robojumper@gmail.com> | 2025-02-27 02:54:21 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-26 20:54:21 -0500 |
| commit | c2b2d9700c47c1eb4c6026fee14d1d9b247f8fe8 (patch) | |
| tree | 025738406df46197b4ba782b6637b5ca5c5145cf /src/d/d_scene.cpp | |
| parent | 6269e826598371fd7683dca5089df17536161f14 (diff) | |
d_scene OK (#114)
* d_scene OK
* d_s_boot
* Rename -> PROFILE_MAX
* Some more
---------
Diffstat (limited to 'src/d/d_scene.cpp')
| -rw-r--r-- | src/d/d_scene.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/d/d_scene.cpp b/src/d/d_scene.cpp new file mode 100644 index 00000000..60829bbc --- /dev/null +++ b/src/d/d_scene.cpp @@ -0,0 +1,108 @@ +#include "d/d_scene.h" + +#include "common.h" +#include "d/d_base.h" +#include "f/f_base.h" +#include "f/f_profile_name.h" +#include "m/m_fader_base.h" +#include "toBeSorted/reload_color_fader.h" + +static u16 RootActorID = fProfile::PROFILE_MAX; +static u32 RootActorParams = 0; +static bool gameStateIsActive = true; + +extern "C" u32 lbl_80574FA0; +extern "C" u32 lbl_80574FA4; +extern "C" void fn_801942F0(int, int); +extern "C" void fn_80066D30(int); + +dFader_c dScene_c::sFader; + +dScene_c::dScene_c() { + lbl_80574FA0 = 0; + lbl_80574FA4 = 0; + setProcControlFlag(ROOT_DISABLE_DRAW | ROOT_DISABLE_EXECUTE); + fn_801942F0(0, 0); +} + +void dScene_c::postCreate(MAIN_STATE_e state) { + if (state == SUCCESS) { + ReloadColorFader::GetInstance()->fn_80067ED0(); + } + dBase_c::postCreate(state); +} + +void dScene_c::postDelete(MAIN_STATE_e state) { + if (state == SUCCESS) { + gameStateIsActive = false; + ReloadColorFader::GetInstance()->fn_80067F50(); + } + dBase_c::postDelete(state); +} + +int dScene_c::preExecute() { + if (dBase_c::preExecute() == NOT_READY) { + return NOT_READY; + } else if (RootActorID != fProfile::PROFILE_MAX) { + if (sFader.isStatus(mFaderBase_c::FADED_IN)) { + sFader.fadeOut(); + } else if (sFader.isStatus(mFaderBase_c::FADED_OUT)) { + deleteRequest(); + resetFlags(); + fn_80066D30(-1); + } + return NOT_READY; + } else { + if ((proc_control & ROOT_DISABLE_EXECUTE)) { + if (!checkChildProcessCreateState()) { + clearProcControlFlag(ROOT_DISABLE_EXECUTE); + clearProcControlFlag(ROOT_DISABLE_DRAW); + } + return NOT_READY; + } + if (sFader.isStatus(mFaderBase_c::FADED_OUT)) { + sFader.fadeIn(); + } + return SUCCEEDED; + } +} + +void dScene_c::postExecute(MAIN_STATE_e status) { + if (status != CANCELED) { + ReloadColorFader::GetInstance()->fn_80067F00(); + } + dBase_c::postExecute(status); + if (proc_control & ROOT_DISABLE_EXECUTE) { + lbl_80574FA0++; + lbl_80574FA4++; + } +} + +void dScene_c::staticCreate() { + RootActorID = fProfile::BOOT; + RootActorParams = 0; + gameStateIsActive = false; +} + +dBase_c *dScene_c::staticExecute() { + if (gameStateIsActive || RootActorID == fProfile::PROFILE_MAX) { + return nullptr; + } + + dBase_c *base = dBase_c::createRoot(RootActorID, RootActorParams, SCENE); + if (base != nullptr) { + RootActorID = fProfile::PROFILE_MAX; + gameStateIsActive = true; + return base; + } + return nullptr; +} + +void dScene_c::setRootActor(fProfile::PROFILE_NAME_e rootActor, u32 params, s32 fadeOutType, s32 fadeInType) { + if (RootActorID != fProfile::PROFILE_MAX && rootActor != fProfile::TITLE) { + return; + } + RootActorID = rootActor; + RootActorParams = params; + sFader.setTypes(fadeInType, fadeOutType); +} |
