| 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 | |
| 8 | namespace { |
| 9 | using namespace al; |
| 10 | |
| 11 | NERVE_IMPL(RailMoveMovement, Move) |
| 12 | |
| 13 | NERVES_MAKE_STRUCT(RailMoveMovement, Move) |
| 14 | } // namespace |
| 15 | |
| 16 | namespace al { |
| 17 | RailMoveMovement::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 | |
| 28 | void 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 | |
| 47 | RailMoveMovement* 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 | |