mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-04-29 20:14:41 +00:00
56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
#include "Library/Movement/RailMoveMovement.h"
|
|
|
|
#include "Library/LiveActor/LiveActor.h"
|
|
#include "Library/Nerve/NerveSetupUtil.h"
|
|
#include "Library/Placement/PlacementFunction.h"
|
|
#include "Library/Rail/RailUtil.h"
|
|
|
|
namespace {
|
|
using namespace al;
|
|
|
|
NERVE_IMPL(RailMoveMovement, Move)
|
|
|
|
NERVES_MAKE_STRUCT(RailMoveMovement, Move)
|
|
} // namespace
|
|
|
|
namespace al {
|
|
RailMoveMovement::RailMoveMovement(LiveActor* host, const ActorInitInfo& info)
|
|
: HostStateBase("レール移動挙動", host) {
|
|
tryGetArg(&mSpeed, info, "Speed");
|
|
tryGetArg((s32*)&mMoveType, info, "MoveType");
|
|
|
|
if (mMoveType > MoveType::Ahead)
|
|
mMoveType = MoveType::Loop;
|
|
|
|
initNerve(&NrvRailMoveMovement.Move, 0);
|
|
}
|
|
|
|
void RailMoveMovement::exeMove() {
|
|
if (!isExistRail(getHost()))
|
|
return;
|
|
|
|
switch (mMoveType) {
|
|
case MoveType::Loop:
|
|
moveSyncRailLoop(getHost(), mSpeed);
|
|
break;
|
|
case MoveType::Turn:
|
|
moveSyncRailTurn(getHost(), mSpeed);
|
|
break;
|
|
case MoveType::Ahead:
|
|
moveSyncRail(getHost(), mSpeed);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
RailMoveMovement* tryCreateRailMoveMovement(LiveActor* host, const ActorInitInfo& info) {
|
|
if (!isExistRail(host))
|
|
return nullptr;
|
|
|
|
setSyncRailToNearestPos(host);
|
|
|
|
return new RailMoveMovement(host, info);
|
|
}
|
|
} // namespace al
|