1#pragma once
2
3#include <math/seadMatrix.h>
4
5namespace al {
6class LiveActor;
7class HitSensor;
8struct ActorInitInfo;
9} // namespace al
10
11class PlayerRecoverySafetyPoint;
12class HackCap;
13class PlayerInput;
14class PlayerDamageKeeper;
15class IPlayerModelChanger;
16class IUsePlayerHeightCheck;
17class HackEndParam;
18class PlayerCollider;
19class CapTargetInfo;
20class IUsePlayerHack;
21
22class PlayerHackKeeper {
23public:
24 PlayerHackKeeper(al::LiveActor* player, HackCap* cap, PlayerRecoverySafetyPoint* safetyPoint,
25 const PlayerInput* input, const sead::Matrix34f* mtx,
26 PlayerDamageKeeper* damageKeeper, const IPlayerModelChanger* modelChanger,
27 const IUsePlayerHeightCheck* heightCheck);
28
29 void createHackModel(const al::ActorInitInfo&);
30 void startHack(al::HitSensor*, al::HitSensor*, al::LiveActor*);
31 void setupHack(al::HitSensor*, al::HitSensor*, al::LiveActor*);
32 void endHack(const HackEndParam*);
33 void endHackStartDemo(al::LiveActor*);
34 void startHackStartDemo(al::LiveActor*);
35 void startHackStartDemoPuppetable(al::LiveActor*);
36 void addHackStartDemo(al::LiveActor*);
37 void appearHackDemoModel(const sead::Matrix34f&, f32);
38 void updateHackDemoModel(const sead::Matrix34f&, f32);
39 void deleteHackDemoModelEffect();
40 void killHackDemoModel();
41 bool isActiveHackStartDemo() const;
42 void recordHack();
43 void cancelHackArea();
44 void cancelHack();
45 void cancelForceRecovery();
46 void tryEscapeHack();
47 void sendTransferHack();
48 void sendMarioDemo();
49 void forceKillHack();
50 void sendMarioDead();
51 void sendMarioInWater();
52 void sendMarioDeathArea();
53 void sendMsgEnableMapCheckPointWarp();
54 void sendMsgSelfCeilingCheckMiss();
55 void receiveRequestTransferHack(al::HitSensor*);
56 bool requestDamage();
57 void receiveRequestDamage();
58 void sendSyncDamageVisibility();
59 void pushWorldEndBorder(const sead::Vector3f&);
60 const char* getCurrentHackName() const;
61 PlayerCollider* getPlayerCollision();
62 f32 getHackGuideHeight();
63 bool isHackGuideEnable() const;
64 f32 getHackStayGravityMargine();
65 void* getCollisionPartsFilter();
66 bool isHackGroupTalkScare() const;
67 bool isHackNoCollisionMsg() const;
68 bool isHackNoSeparateCameraInput() const;
69 bool isHackUsePlayerCollision() const;
70 bool isHackCancelCeilingCheck() const;
71 bool isHackInvalidLifeRecovery() const;
72 void requestForceHackStageStart(al::HitSensor*, const CapTargetInfo*, al::LiveActor*);
73 void executeForceHackStageStart(al::HitSensor*, IUsePlayerHack*);
74 void startDemo();
75 void endDemo();
76
77 al::LiveActor* getCurrentHackActor() const { return mCurrentHackActor; }
78
79 al::HitSensor* getUnkHitSensor() const { return mUnkHitSensor; }
80
81private:
82 char padding[0x68];
83 al::LiveActor* mCurrentHackActor;
84 al::HitSensor* mUnkHitSensor;
85 // at 0x98 PlayerHackStartTexKeeper
86};
87