OdysseyDecomp/lib/al/Library/Play/Layout/WipeCloseAppearWaitEnd.cpp

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