1#pragma once
2
3#include "Library/LiveActor/LiveActor.h"
4
5namespace al {
6class EnemyStateBlowDown;
7struct EnemyStateBlowDownParam;
8} // namespace al
9
10class EnemyCap : public al::LiveActor {
11public:
12 static EnemyCap* createEnemyCap(const char*);
13
14 EnemyCap(const char*);
15
16 void initPartsFixFile(al::LiveActor*, const al::ActorInitInfo&, const char*, const char*);
17
18 void makeActorAlive() override;
19 void updatePose();
20 void calcAnim() override;
21
22 void exeWait();
23 bool syncHostVisible();
24 void exeBlowDown();
25 void startBlowDown(const al::HitSensor* source);
26 void startBlowDown();
27 bool isBlowDown() const;
28 void setBlowDownParam(const al::EnemyStateBlowDownParam*);
29
30 al::LiveActor* getCap() { return mCap; };
31
32 al::EnemyStateBlowDown* getStateBlowDown() { return mStateBlowDown; };
33
34private:
35 al::LiveActor* mCap = nullptr;
36 const sead::Matrix34f* mCapBaseMtx = nullptr;
37 bool mIsNotAtOrigin = true;
38 sead::Vector3f mLocalTrans = {0.0f, 0.0f, 0.0f};
39 sead::Vector3f mLocalRotate = {0.0f, 0.0f, 0.0f};
40 sead::Vector3f mLocalScale = {1.0f, 1.0f, 1.0f};
41 bool mIsCapVisible = false;
42 bool mIsUseFollowMtxScale = false;
43 bool field_142 = false;
44 bool mIsUseLocalScale = true;
45 al::EnemyStateBlowDown* mStateBlowDown = nullptr;
46};
47
48namespace rs {
49EnemyCap* tryCreateEnemyCap(al::LiveActor*, const al::ActorInitInfo&);
50EnemyCap* tryCreateEnemyCap(al::LiveActor*, const al::ActorInitInfo&, const char*);
51EnemyCap* tryCreateEnemyCapSuffix(al::LiveActor*, const al::ActorInitInfo&, const char*,
52 const char*);
53bool tryStartEnemyCapBlowDown(EnemyCap*, const al::HitSensor*);
54bool tryStartEnemyCapBlowDown(EnemyCap*);
55bool tryAppearEnemyCap(EnemyCap*);
56bool isOnEnemyCap(EnemyCap*);
57} // namespace rs
58