mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-05-08 16:29:35 +00:00
67 lines
2 KiB
C++
67 lines
2 KiB
C++
#include "Npc/RaceAudienceNpc.h"
|
|
|
|
#include "Library/LiveActor/ActorActionFunction.h"
|
|
#include "Library/LiveActor/ActorInitUtil.h"
|
|
#include "Library/Math/MathUtil.h"
|
|
#include "Library/Nerve/NerveSetupUtil.h"
|
|
#include "Library/Nerve/NerveUtil.h"
|
|
#include "Library/Placement/PlacementFunction.h"
|
|
|
|
namespace {
|
|
NERVE_IMPL(RaceAudienceNpc, Wait);
|
|
NERVE_IMPL(RaceAudienceNpc, Dance);
|
|
NERVE_IMPL(RaceAudienceNpc, Jump);
|
|
NERVE_IMPL(RaceAudienceNpc, DanceRandom);
|
|
|
|
NERVES_MAKE_STRUCT(RaceAudienceNpc, Wait, Dance, Jump, DanceRandom);
|
|
} // namespace
|
|
|
|
RaceAudienceNpc::RaceAudienceNpc(const char* name) : al::LiveActor(name) {}
|
|
|
|
void RaceAudienceNpc::init(const al::ActorInitInfo& info) {
|
|
al::initActor(this, info);
|
|
al::getArg((s32*)&mAudienceActionType, info, "AudienceActionType");
|
|
switch (mAudienceActionType) {
|
|
case ActionType::Wait:
|
|
al::initNerve(this, &NrvRaceAudienceNpc.Wait, 0);
|
|
break;
|
|
case ActionType::Dance:
|
|
al::initNerve(this, &NrvRaceAudienceNpc.Dance, 0);
|
|
break;
|
|
case ActionType::Jump:
|
|
al::initNerve(this, &NrvRaceAudienceNpc.Jump, 0);
|
|
break;
|
|
}
|
|
makeActorAlive();
|
|
}
|
|
|
|
void RaceAudienceNpc::exeWait() {
|
|
if (al::isFirstStep(this))
|
|
al::startAction(this, "WaitHappy");
|
|
}
|
|
|
|
void RaceAudienceNpc::exeDance() {
|
|
if (al::isFirstStep(this)) {
|
|
al::startAction(this, "Excited");
|
|
mDanceTimer = al::getRandom(600) + 600;
|
|
}
|
|
if (al::isGreaterEqualStep(this, mDanceTimer)) {
|
|
if (mAudienceActionType == ActionType::Jump)
|
|
al::setNerve(this, &NrvRaceAudienceNpc.Jump);
|
|
else
|
|
al::setNerve(this, &NrvRaceAudienceNpc.DanceRandom);
|
|
}
|
|
}
|
|
|
|
void RaceAudienceNpc::exeDanceRandom() {
|
|
if (al::isFirstStep(this))
|
|
al::startAction(this, "ExcitedRandom");
|
|
if (al::isActionEnd(this))
|
|
al::setNerve(this, &NrvRaceAudienceNpc.Dance);
|
|
}
|
|
|
|
void RaceAudienceNpc::exeJump() {
|
|
if (al::isFirstStep(this))
|
|
al::startAction(this, "ExcitedJump");
|
|
}
|