1#pragma once
2
3#include <basis/seadTypes.h>
4
5#include "Project/Anim/AnimPlayerBase.h"
6
7namespace nn::g3d {
8class SkeletalAnimObj;
9class SkeletalAnimBlender;
10} // namespace nn::g3d
11
12namespace al {
13class AnimInfoTable;
14struct AnimPlayerInitInfo;
15class ModelAnimInterp;
16struct SklAnimRetargettingInfo;
17
18class AnimPlayerSkl : public AnimPlayerBase {
19public:
20 static AnimPlayerSkl* tryCreate(const AnimPlayerInitInfo*, s32);
21
22 AnimPlayerSkl(const AnimPlayerInitInfo*, s32);
23
24 bool calcNeedUpdateAnimNext() override;
25
26 bool startSklAnim(const char*, const char*, const char*, const char*, const char*, const char*,
27 const char*);
28 void startPartialAnim(const char*, s32, s32, const SklAnimRetargettingInfo*);
29
30 void updateLast() override;
31 void update();
32 void reset();
33 void clearSklAnimBlend();
34 bool calcSklAnim();
35
36 bool initInterp(const char*);
37 void initPartialAnim(s32, s32, s32);
38 void prepareAnimInterpDirect(s32);
39 void clearPartialAnim(s32);
40
41 void setSklAnim(const char*, s32);
42 void setSklAnimBlendWeight(s32, f32);
43 void setSklAnimFrame(s32, f32);
44 void setSklAnimFrameRate(s32, f32);
45 void setPartialAnimFrame(s32, f32);
46 void setPartialAnimFrameRate(s32, f32);
47 void addPartialAnimJoint(s32, const char*, const char*);
48 void addPartialAnimJointRecursive(s32, const char*);
49
50 const char* getPlayingSklAnimName(s32);
51 const char* getPlayingPartialSklAnimName(s32);
52 f32 getSklAnimBlendWeight(s32);
53 s32 getSklAnimBlendNum();
54 f32 getSklAnimFrame(s32);
55 f32 getSklAnimFrameMax(s32);
56 f32 getSklAnimFrameMax(const char*);
57 f32 getSklAnimFrameRate(s32);
58 f32 getSklAnimFrameRate(s32, f32);
59 s32 getPartialAnimSlotNum();
60 s32 getJoitsAmountFromJos32(const char*);
61 f32 getPartialAnimFrame(s32);
62 f32 getPartialAnimFrameRate(s32);
63
64 bool isSklAnimExist(const char*);
65 bool isSklAnimEnd(s32);
66 bool isSklAnimOneTime(s32);
67 bool isSklAnimOneTime(const char*);
68 bool isSklAnimPlaying(s32);
69 bool isPartialAnimEnd(s32);
70 bool isPartialAnimOneTime(s32);
71 bool isPartialAnimAttached(s32);
72
73 void setRetargettingInfo(SklAnimRetargettingInfo* info) { mRetargettingInfo = info; }
74
75private:
76 AnimInfoTable* mAnimInfoTable;
77 u32 _10;
78 void* _18;
79 u32 mAnimObjCount0;
80 nn::g3d::SkeletalAnimObj* mSkelAnimObjStack0;
81 u32 mAnimObjCount1;
82 nn::g3d::SkeletalAnimObj* mSkelAnimObjStack1;
83 ModelAnimInterp* mModelAnimInterp;
84 nn::g3d::SkeletalAnimBlender* mSkelAnimBlender;
85 u32 mBlendWeightCount;
86 void* mBlendWeightStack;
87 u32 mPartialAnimObjCount;
88 nn::g3d::SkeletalAnimObj* mPartialAnimObjStack;
89 void* _70;
90 u32 _78;
91 SklAnimRetargettingInfo* mRetargettingInfo;
92 bool _88;
93 bool _89;
94};
95} // namespace al
96