1#include "Library/Movement/RailMoveMovement.h"
2
3#include "Library/LiveActor/LiveActor.h"
4#include "Library/Nerve/NerveSetupUtil.h"
5#include "Library/Placement/PlacementFunction.h"
6#include "Library/Rail/RailUtil.h"
7
8namespace {
9using namespace al;
10
11NERVE_IMPL(RailMoveMovement, Move)
12
13NERVES_MAKE_STRUCT(RailMoveMovement, Move)
14} // namespace
15
16namespace al {
17RailMoveMovement::RailMoveMovement(LiveActor* host, const ActorInitInfo& info)
18 : HostStateBase("レール移動挙動", host) {
19 tryGetArg(arg: &mSpeed, initInfo: info, key: "Speed");
20 tryGetArg(arg: (s32*)&mMoveType, initInfo: info, key: "MoveType");
21
22 if (mMoveType > MoveType::Ahead)
23 mMoveType = MoveType::Loop;
24
25 initNerve(nerve: &NrvRailMoveMovement.Move, stateCount: 0);
26}
27
28void RailMoveMovement::exeMove() {
29 if (!isExistRail(railHolder: getHost()))
30 return;
31
32 switch (mMoveType) {
33 case MoveType::Loop:
34 moveSyncRailLoop(actor: getHost(), speed: mSpeed);
35 break;
36 case MoveType::Turn:
37 moveSyncRailTurn(actor: getHost(), speed: mSpeed);
38 break;
39 case MoveType::Ahead:
40 moveSyncRail(actor: getHost(), mSpeed);
41 break;
42 default:
43 break;
44 }
45}
46
47RailMoveMovement* tryCreateRailMoveMovement(LiveActor* host, const ActorInitInfo& info) {
48 if (!isExistRail(railHolder: host))
49 return nullptr;
50
51 setSyncRailToNearestPos(host);
52
53 return new RailMoveMovement(host, info);
54}
55} // namespace al
56