1#pragma once
2
3#include <math/seadVector.h>
4
5#include "Library/Nerve/NerveStateBase.h"
6
7namespace al {
8class HitSensor;
9class LiveActor;
10
11struct EnemyStateBlowDownParam {
12public:
13 EnemyStateBlowDownParam();
14 EnemyStateBlowDownParam(const char* actionName);
15 EnemyStateBlowDownParam(const char* actionName, f32 velocityStrength, f32 gravityStrength,
16 f32 velocityMultiplier, f32 velocityScale, s32 blowDownLength,
17 bool faceAwayFromActor);
18
19 const char* actionName = "BlowDown";
20 f32 velocityStrength = 10.3f;
21 f32 gravityStrength = 28.2f;
22 f32 velocityMultiplier = 1.1f;
23 f32 velocityScale = 0.995f;
24 s32 blowDownLength = 120;
25 bool faceAwayFromActor = true;
26};
27
28class EnemyStateBlowDown : public ActorStateBase {
29public:
30 EnemyStateBlowDown(LiveActor*, const EnemyStateBlowDownParam*, const char*);
31 void start(const HitSensor*);
32 void start(const sead::Vector3f&);
33 void start(const HitSensor*, const HitSensor*);
34 void start(const LiveActor*);
35
36 void appear() override;
37 void kill() override;
38 void control() override;
39
40 void setParam(const EnemyStateBlowDownParam* param) { mParam = param; };
41
42private:
43 const EnemyStateBlowDownParam* mParam = nullptr;
44 s32 mBlowDownTimer = 0;
45 bool mIsInvalidClipping = false;
46};
47} // namespace al
48