1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Library/LiveActor/LiveActor.h"
6
7namespace al {
8struct ActorInitInfo;
9class CollisionPartsFilterSpecialPurpose;
10class EnemyStateBlowDown;
11class HitSensor;
12class SensorMsg;
13} // namespace al
14
15class CapTargetInfo;
16class EnemyStateSwoon;
17class EnemyStateHackStart;
18class GamaneHackState;
19class HackerJudgeNormalFall;
20class HackerDepthShadowMapCtrl;
21class IUsePlayerHack;
22
23class Gamane : public al::LiveActor {
24public:
25 Gamane(const char* name);
26
27 void init(const al::ActorInitInfo& info) override;
28 void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
29 bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
30 al::HitSensor* self) override;
31 void control() override;
32 void endClipped() override;
33 void updateCollider() override;
34
35 void startHack(const al::SensorMsg* message, al::HitSensor* other, al::HitSensor* self);
36 void updateRefract();
37 void updateMovement();
38 void startRefract(s32 transitionTime);
39 void endRefract(s32 transitionTime);
40
41 void exeWait();
42 void exeFind();
43 void exeRunaway();
44 void exeFall();
45 void exeLand();
46 void exeSwoon();
47 void exeHackStart();
48 void exeHack();
49 void exeTrampled();
50 void exePressDown();
51 void exeBlowDown();
52
53 CapTargetInfo* getCapTargetInfo() { return mCapTargetInfo; }
54
55private:
56 IUsePlayerHack* mPlayerHack = nullptr;
57 CapTargetInfo* mCapTargetInfo = nullptr;
58 EnemyStateSwoon* mStateSwoon = nullptr;
59 GamaneHackState* mHackState = nullptr;
60 al::EnemyStateBlowDown* mStateBlowDown = nullptr;
61 EnemyStateHackStart* mStateHackStart = nullptr;
62 HackerJudgeNormalFall* mJudgeNormalFall = nullptr;
63 al::CollisionPartsFilterSpecialPurpose* mCollisionPartsFilter = nullptr;
64
65 bool mIsKeepSwoon = false;
66 s32 mCoinsLeft = 30;
67 s32 mHackCoinAppearCounter = 0;
68 s32 mMaterialIndex = 0;
69 s32 mRefractTransitionTime = 0;
70 s32 mRunAwayRefractDelay = 0;
71 bool mIsStartRefract = true;
72 f32 mShadowMaskIntensity = 0.2f;
73 HackerDepthShadowMapCtrl* mDepthShadowMapCtrl = nullptr;
74};
75