1#pragma once
2
3#include <basis/seadTypes.h>
4#include <math/seadVector.h>
5
6#include "Library/Nerve/NerveExecutor.h"
7
8namespace al {
9struct ActorInitInfo;
10
11struct AnimScaleParam {
12 AnimScaleParam();
13
14 AnimScaleParam(f32 a, f32 b, f32 c, f32 d, f32 e, f32 f, f32 g, s32 h, f32 i, f32 j, f32 k,
15 f32 l);
16
17 f32 _0 = 0.2f;
18 f32 _4 = 0.91f;
19 f32 _8 = 0.2f;
20 f32 _c = 1.8f;
21 f32 _10 = 0.06f;
22 f32 _14 = 0.12f;
23 f32 _18 = 0.91f;
24 s32 _1c = 20;
25 f32 _20 = 0.25f;
26 f32 _24 = 0.9f;
27 f32 _28 = 5.2f;
28 f32 _2c = 0.05f;
29};
30
31static_assert(sizeof(AnimScaleParam) == 0x30);
32
33class AnimScaleController : public NerveExecutor {
34public:
35 AnimScaleController(const AnimScaleParam*);
36 void setAnimScaleParam(const AnimScaleParam*);
37 void startAnim();
38 void startVibration();
39 void startHitReaction();
40 void startAndSetScaleY(f32);
41 void startAndSetScaleAnsVelocityY(f32, f32);
42 void startAndSetScaleVelocityY(f32);
43 void startAndAddScaleVelocityY(f32);
44 void startCrush();
45 void stopAnim();
46 void stopAndReset();
47 void resetScale();
48 void stopAndSetScale(const sead::Vector3f&);
49 void setScaleVelocityY(f32);
50 void addScaleVelocityY(f32);
51 void exeStop();
52 void exeAnim();
53 void updateScale(f32, f32);
54 bool tryStop();
55 void exeVibration();
56 void exeHitReaction();
57 void exeCrush();
58 bool isHitReaction(s32) const;
59 void setOriginalScale(const sead::Vector3f&);
60 void update();
61
62 const sead::Vector3f& getScale() { return mScale; }
63
64private:
65 AnimScaleParam* mParam;
66 sead::Vector3f _18;
67 sead::Vector3f mOriginalScale;
68 sead::Vector3f mScale;
69 f32 mScaleVelocityY;
70};
71
72static_assert(sizeof(AnimScaleController) == 0x40);
73} // namespace al
74