1#pragma once
2
3#include "Library/LiveActor/LiveActor.h"
4
5namespace al {
6class RollingCubePoseKeeper;
7class PartsModel;
8
9class RollingCubeMapParts : public LiveActor {
10public:
11 RollingCubeMapParts(const char* name);
12
13 void init(const ActorInitInfo& info) override;
14 void kill() override;
15 bool receiveMsg(const SensorMsg* message, HitSensor* other, HitSensor* self) override;
16 void control() override;
17 void appearAndSetStart();
18 void setNerveNextMovement(bool isNextFallKey);
19 bool isNextFallKey() const;
20 void exeWait();
21 void exeStart();
22 void exeRotate();
23 s32 getMovementTime() const;
24 void setNerveNextLand();
25 void exeSlide();
26 bool updateSlide();
27 void exeFall();
28 void setNerveNextFallLand();
29 void exeLand();
30 s32 getLandTime() const;
31 void exeFallLand();
32 void exeStop();
33 bool isStop() const;
34
35private:
36 RollingCubePoseKeeper* mRollingCubePoseKeeper = nullptr;
37 sead::Matrix34f* mMoveLimitMtx = nullptr;
38 PartsModel* mMoveLimitPartsModel = nullptr;
39 sead::Matrix34f mLandEffectMtx = sead::Matrix34f::ident;
40 sead::Quatf mInitialPoseQuat = sead::Quatf::unit;
41 sead::Vector3f mInitialPoseTrans = sead::Vector3f::zero;
42 sead::Quatf mCurrentPoseQuat = sead::Quatf::unit;
43 sead::Vector3f mCurrentPoseTrans = sead::Vector3f::zero;
44 sead::Vector3f mClippingTrans = sead::Vector3f::zero;
45 s32 mMovementTime = 0;
46 bool mIsStoppable = false;
47};
48
49static_assert(sizeof(RollingCubeMapParts) == 0x1a0);
50} // namespace al
51