1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadVector.h>
5
6#include "Library/Nerve/NerveStateBase.h"
7
8namespace al {
9struct ActorInitInfo;
10class HitSensor;
11class SensorMsg;
12} // namespace al
13
14class HackerJudgeNormalFall;
15class HackerJudgeStartRun;
16class HackerJudgeNormalJump;
17class PlayerActionTurnControl;
18class IUsePlayerHack;
19
20class GamaneHackState : public al::ActorStateBase {
21public:
22 GamaneHackState(al::LiveActor*);
23
24 void appear() override;
25 void kill() override;
26
27 void attackSensor(al::HitSensor* self, al::HitSensor* other);
28 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other, al::HitSensor* self);
29 void initialize(const al::ActorInitInfo& info);
30 bool isJump() const;
31 void tryJump();
32 bool isHackEnd() const;
33 void updateMovement();
34 bool judgeShoot();
35 void shoot(s32);
36
37 void exeWait();
38 void exeMove();
39 void exeQuickTurn();
40 void exeFall();
41 void exeJump();
42 void exeLand();
43 void exeSwingAttack();
44 void exeEnd();
45
46 void setPlayerHackAction(IUsePlayerHack* playerHackAction) { mPlayerHack = playerHackAction; }
47
48 const sead::Vector3f& getVelocity() { return mVelocity; }
49
50 void setVelocity(const sead::Vector3f& vector) { mVelocity.set(vector); }
51
52private:
53 HackerJudgeNormalFall* mJudgeNormalFall;
54 HackerJudgeStartRun* mJudgeStartRun;
55 HackerJudgeNormalJump* mJudgeNormalJump;
56 PlayerActionTurnControl* mPlayerActionTurnControl;
57 IUsePlayerHack* mPlayerHack;
58 void** _48;
59 s64 _50;
60 s32 _58;
61 s32 _5c;
62 s32 _60;
63 sead::Vector3f mVelocity;
64};
65