1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadVector.h>
5
6#include "Library/Nerve/NerveStateBase.h"
7
8namespace al {
9class LiveActor;
10class SensorMsg;
11class HitSensor;
12} // namespace al
13
14class MapObjStatePlayerHold : public al::ActorStateBase {
15public:
16 MapObjStatePlayerHold(al::LiveActor* actor, const sead::Vector3f& localOffset,
17 const sead::Vector3f& localRotate);
18
19 void initUseColliderPush(f32 pushForce);
20 void initShadowMaskDropLengthCtrl(const char* shadowMaskName);
21 void appear() override;
22 void kill() override;
23 void attackSensor(al::HitSensor* self, al::HitSensor* other);
24 bool receiveMsgNoRelease(const al::SensorMsg* message, al::HitSensor* other,
25 al::HitSensor* self);
26 bool receiveMsgRelease(const al::SensorMsg* message, al::HitSensor* other, al::HitSensor* self);
27 void prepareThrowCollide();
28 bool receiveMsgCancel(const al::SensorMsg* message, al::HitSensor* other, al::HitSensor* self);
29 bool tryStartCarryFront(const al::SensorMsg* message, al::HitSensor* sensor);
30 bool tryStartCarryFrontWallKeep(const al::SensorMsg* message, al::HitSensor* sensor);
31 bool tryStartCarryUp(const al::SensorMsg* message, al::HitSensor* sensor);
32 void tryCancelHold(al::HitSensor* sensor);
33 void updateCollider(al::HitSensor* sensor);
34 void exeHold();
35
36private:
37 al::HitSensor* mPlayerHitSensor = nullptr;
38 sead::Vector3f mLocalOffset;
39 sead::Vector3f mLocalRotate;
40 bool mIsCarryUp = false;
41 bool mIsUseColliderPush = false;
42 s32 mColliderUpOffset = 0;
43 f32 mColliderRadius = 0.0f;
44 f32 mColliderPushForce = 1.0f;
45 sead::Vector3f mTotalPush = {0.0f, 0.0f, 0.0f};
46 bool mIsResetPositionNeeded = false;
47 const char* mShadowMaskName = nullptr;
48 f32 mShadowMaskDropLength = 0.0f;
49};
50