1#pragma once
2
3#include <math/seadVector.h>
4
5namespace al {
6class LiveActor;
7}
8class IUsePlayerCollision;
9
10class PlayerActionVelocityControl {
11public:
12 PlayerActionVelocityControl(al::LiveActor* actor, const IUsePlayerCollision* collider);
13
14 void calcFrontBrake(f32 decel);
15 void calcSideVelocityLimit(const sead::Vector3f& moveInput, f32 brakeSideAccel,
16 f32 brakeSideRate, f32 maxSideSpeed);
17 void calcSideBrake(f32 decel);
18 void calcTrample(f32 downVel);
19 void calcSnap(const sead::Vector3f& snapDir, f32 snapDistance);
20 void calcOnGround(const sead::Vector3f& groundNormal);
21 void apply();
22
23private:
24 al::LiveActor* mActor;
25 sead::Vector3f mSide = sead::Vector3f::zero;
26 sead::Vector3f mUp = sead::Vector3f::zero;
27 sead::Vector3f mVelocityFront = sead::Vector3f::zero;
28 sead::Vector3f mVelocitySide = sead::Vector3f::zero;
29 sead::Vector3f mVelocityUp = sead::Vector3f::zero;
30};
31