mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-30 04:24:17 +00:00
97 lines
2.6 KiB
C++
97 lines
2.6 KiB
C++
#include "Library/Play/Layout/WipeCloseAppearWaitEnd.h"
|
|
|
|
#include "Library/Layout/LayoutActionFunction.h"
|
|
#include "Library/Layout/LayoutInitInfo.h"
|
|
#include "Library/Nerve/NerveSetupUtil.h"
|
|
#include "Library/Nerve/NerveUtil.h"
|
|
|
|
namespace {
|
|
using namespace al;
|
|
|
|
NERVE_HOST_TYPE_IMPL(WipeCloseAppearWaitEnd, CloseStart)
|
|
NERVE_HOST_TYPE_IMPL(WipeCloseAppearWaitEnd, CloseEnd)
|
|
NERVE_HOST_TYPE_IMPL(WipeCloseAppearWaitEnd, Open)
|
|
NERVE_HOST_TYPE_IMPL(WipeCloseAppearWaitEnd, Wait)
|
|
NERVE_HOST_TYPE_IMPL(WipeCloseAppearWaitEnd, CloseWait)
|
|
|
|
NERVES_MAKE_NOSTRUCT(HostType, CloseStart, CloseEnd, Open, Wait, CloseWait)
|
|
} // namespace
|
|
|
|
namespace al {
|
|
WipeCloseAppearWaitEnd::WipeCloseAppearWaitEnd(const char* name, const char* archiveName,
|
|
const LayoutInitInfo& info, const char* suffix,
|
|
bool isLocalized)
|
|
: LayoutActor(name) {
|
|
if (isLocalized)
|
|
initLayoutActorLocalized(this, info, archiveName, suffix);
|
|
else
|
|
initLayoutActor(this, info, archiveName, suffix);
|
|
|
|
initNerve(&CloseStart, 0);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::startClose(s32 frames) {
|
|
mFrames = frames;
|
|
|
|
startAction(this, "CloseStart", nullptr);
|
|
LayoutActor::appear();
|
|
|
|
f32 rate = 1.0f;
|
|
if (mFrames <= 0)
|
|
asm("");
|
|
else
|
|
rate = getActionFrameMax(this, "CloseStart", nullptr) / (f32)mFrames;
|
|
|
|
setActionFrameRate(this, rate, nullptr);
|
|
setNerve(this, &CloseStart);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::startCloseEnd() {
|
|
startFreezeActionEnd(this, "CloseEnd", nullptr);
|
|
LayoutActor::appear();
|
|
setNerve(this, &CloseEnd);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::startOpen(s32 frames) {
|
|
mFrames = frames;
|
|
|
|
startAction(this, "End", nullptr);
|
|
setNerve(this, &Open);
|
|
}
|
|
|
|
bool WipeCloseAppearWaitEnd::isCloseEnd() const {
|
|
return isNerve(this, &Wait) && isGreaterEqualStep(this, 2);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::exeCloseStart() {
|
|
if (isActionEnd(this, nullptr))
|
|
setNerve(this, &CloseWait);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::exeCloseWait() {
|
|
if (isFirstStep(this))
|
|
startAction(this, "CloseWait", nullptr);
|
|
|
|
if (mWaitDelay >= 0 && isGreaterEqualStep(this, mWaitDelay))
|
|
setNerve(this, &CloseEnd);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::exeCloseEnd() {
|
|
if (isFirstStep(this))
|
|
startAction(this, "CloseEnd", nullptr);
|
|
|
|
if (isActionEnd(this, nullptr))
|
|
setNerve(this, &Wait);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::exeWait() {
|
|
if (isFirstStep(this))
|
|
startAction(this, "Wait", nullptr);
|
|
}
|
|
|
|
void WipeCloseAppearWaitEnd::exeOpen() {
|
|
if (isActionEnd(this, nullptr))
|
|
kill();
|
|
}
|
|
} // namespace al
|