OdysseyDecomp/lib/al/Library/Movement/AnimScaleController.h

74 lines
1.7 KiB
C++

#pragma once
#include <basis/seadTypes.h>
#include <math/seadVector.h>
#include "Library/Nerve/NerveExecutor.h"
namespace al {
struct ActorInitInfo;
struct AnimScaleParam {
AnimScaleParam();
AnimScaleParam(f32 a, f32 b, f32 c, f32 d, f32 e, f32 f, f32 g, s32 h, f32 i, f32 j, f32 k,
f32 l);
f32 _0 = 0.2f;
f32 _4 = 0.91f;
f32 _8 = 0.2f;
f32 _c = 1.8f;
f32 _10 = 0.06f;
f32 _14 = 0.12f;
f32 _18 = 0.91f;
s32 _1c = 20;
f32 _20 = 0.25f;
f32 _24 = 0.9f;
f32 _28 = 5.2f;
f32 _2c = 0.05f;
};
static_assert(sizeof(AnimScaleParam) == 0x30);
class AnimScaleController : public NerveExecutor {
public:
AnimScaleController(const AnimScaleParam*);
void setAnimScaleParam(const AnimScaleParam*);
void startAnim();
void startVibration();
void startHitReaction();
void startAndSetScaleY(f32);
void startAndSetScaleAnsVelocityY(f32, f32);
void startAndSetScaleVelocityY(f32);
void startAndAddScaleVelocityY(f32);
void startCrush();
void stopAnim();
void stopAndReset();
void resetScale();
void stopAndSetScale(const sead::Vector3f&);
void setScaleVelocityY(f32);
void addScaleVelocityY(f32);
void exeStop();
void exeAnim();
void updateScale(f32, f32);
bool tryStop();
void exeVibration();
void exeHitReaction();
void exeCrush();
bool isHitReaction(s32) const;
void setOriginalScale(const sead::Vector3f&);
void update();
const sead::Vector3f& getScale() { return mScale; }
private:
AnimScaleParam* mParam;
sead::Vector3f _18;
sead::Vector3f mOriginalScale;
sead::Vector3f mScale;
f32 mScaleVelocityY;
};
static_assert(sizeof(AnimScaleController) == 0x40);
} // namespace al