mirror of
https://github.com/zeldaret/ss
synced 2026-05-26 15:45:19 -04:00
c2b2d9700c
* d_scene OK * d_s_boot * Rename -> PROFILE_MAX * Some more ---------
109 lines
2.9 KiB
C++
109 lines
2.9 KiB
C++
#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);
|
|
}
|