1#pragma once
2
3#include <math/seadMatrix.h>
4#include <math/seadVector.h>
5
6#include "Library/Anim/AnimPlayerSkl.h"
7#include "Library/Execute/ExecuteTableHolderUpdate.h"
8#include "Library/LiveActor/LiveActor.h"
9#include "Library/Model/ModelCtrl.h"
10#include "Library/Model/ModelKeeper.h"
11
12namespace al {
13class AnimPlayerMat;
14class LiveActor;
15struct SklAnimRetargettingInfo;
16
17// Inlined
18
19inline AnimPlayerSkl* getSkl(const LiveActor* actor) {
20 return actor->getModelKeeper()->getAnimSkl();
21}
22
23inline AnimPlayerMat* getMtp(const LiveActor* actor) {
24 return actor->getModelKeeper()->getAnimMtp();
25}
26
27inline AnimPlayerMat* getMcl(const LiveActor* actor) {
28 return actor->getModelKeeper()->getAnimMcl();
29}
30
31inline AnimPlayerMat* getMts(const LiveActor* actor) {
32 return actor->getModelKeeper()->getAnimMts();
33}
34
35inline AnimPlayerMat* getMat(const LiveActor* actor) {
36 return actor->getModelKeeper()->getAnimMat();
37}
38
39inline AnimPlayerVis* getVis(const LiveActor* actor) {
40 return actor->getModelKeeper()->getAnimVis();
41}
42
43inline AnimPlayerVis* getVisForAction(const LiveActor* actor) {
44 return actor->getModelKeeper()->getAnimVisForAction();
45}
46
47inline void updateModelDraw(const LiveActor* actor) {
48 actor->getModelKeeper()->getModelCtrl()->recreateDisplayList();
49}
50
51inline void updateActorSystem(LiveActor* actor) {
52 alActorSystemFunction::updateExecutorDraw(actor);
53}
54
55inline void setSklBlendWeight(const LiveActor* actor, u32 index, f32 weight) {
56 getSkl(actor)->setSklAnimBlendWeight(index, weight);
57}
58
59inline void createMat(const LiveActor* actor, s32 programType) {
60 actor->getModelKeeper()->createMatAnimForProgram(programType);
61}
62
63// All
64
65void setAllAnimFrame(LiveActor*, f32);
66void setAllAnimFrameRate(LiveActor* f32);
67
68// Skl
69
70bool tryStartSklAnimIfExist(LiveActor*, const char*);
71bool tryStartSklAnimIfNotPlaying(LiveActor*, const char*);
72
73void startSklAnim(LiveActor*, const char*);
74void startSklAnimInterpole(LiveActor*, const char*, const char*);
75void startSklAnimBlend(LiveActor*, const char*, const char*, const char*, const char*, const char*,
76 const char*);
77void startSklAnimBlendInterpole(LiveActor*, const char*, const char*, const char*, const char*,
78 const char*, const char*, const char*);
79
80void clearSklAnimInterpole(LiveActor*);
81void validateSklAnimRetargetting(const LiveActor*);
82void invalidateSklAnimRetargetting(const LiveActor*);
83void copySklAnim(LiveActor*, const LiveActor*);
84
85void setSklAnimFrame(LiveActor*, f32, s32);
86void setSklAnimFrameRate(LiveActor*, f32, s32);
87void setSklAnimFrameAndStop(LiveActor*, f32, s32);
88void setSklAnimBlendWeight(LiveActor*, f32, s32);
89void setSklAnimBlendWeightDouble(LiveActor*, f32);
90void setSklAnimBlendWeightDouble(LiveActor*, f32, f32);
91void setSklAnimBlendWeightTriple(LiveActor*, f32, f32, f32);
92void setSklAnimBlendWeightQuad(LiveActor*, f32, f32, f32, f32);
93void setSklAnimBlendWeightFivefold(LiveActor*, f32, f32, f32, f32, f32);
94void setSklAnimBlendWeightSixfold(LiveActor*, f32, f32, f32, f32, f32);
95void setSklAnimBlendFrameAll(LiveActor*, f32, bool);
96void setSklAnimBlendFrameRateAll(LiveActor*, f32, bool);
97
98const char* getPlayingSklAnimName(const LiveActor*, s32);
99f32 getSklAnimFrame(const LiveActor*, s32);
100f32 getSklAnimFrameRate(const LiveActor*, s32);
101f32 getSklAnimFrameMax(const LiveActor*, s32);
102f32 getSklAnimFrameMax(const LiveActor*, const char*);
103s32 getSklAnimBlendNum(const LiveActor*);
104f32 getSklAnimBlendWeight(const LiveActor*, s32);
105
106bool isSklAnimExist(const LiveActor*, const char*);
107bool isSklAnimPlaying(const LiveActor*, const char*, s32);
108bool isExistSklAnimRetargetting(const LiveActor*);
109bool isSklAnimRetargettingValid(const LiveActor*);
110bool isSklAnimExist(const LiveActor*);
111bool isSklAnimEnd(const LiveActor*, s32);
112bool isSklAnimOneTime(const LiveActor*, const char*);
113bool isSklAnimOneTime(const LiveActor*, s32);
114bool isSklAnimPlaying(const LiveActor*, s32);
115
116// Mtp
117
118bool tryStartMtpAnimIfExist(LiveActor*, const char*);
119bool tryStartMtpAnimIfNotPlaying(LiveActor*, const char*);
120
121void startMtpAnim(LiveActor*, const char*);
122void startMtpAnimAndSetFrameAndStop(LiveActor*, const char*, f32);
123
124void clearMtpAnim(LiveActor*);
125
126void setMtpAnimFrame(LiveActor*, f32);
127void setMtpAnimFrameRate(LiveActor*, f32);
128void setMtpAnimFrameAndStop(LiveActor*, f32);
129void setMtpAnimFrameAndStopEnd(LiveActor*);
130
131const char* getPlayingMtpAnimName(const LiveActor*);
132f32 getMtpAnimFrame(const LiveActor*);
133f32 getMtpAnimFrameRate(const LiveActor*);
134f32 getMtpAnimFrameMax(const LiveActor*);
135f32 getMtpAnimFrameMax(const LiveActor*, const char*);
136
137bool isMtpAnimExist(const LiveActor*, const char*);
138bool isMtpAnimPlaying(const LiveActor*, const char*);
139bool isMtpAnimExist(const LiveActor*);
140bool isMtpAnimEnd(const LiveActor*);
141bool isMtpAnimOneTime(const LiveActor*, const char*);
142bool isMtpAnimOneTime(const LiveActor*);
143bool isMtpAnimPlaying(const LiveActor*);
144
145// Mcl
146
147bool tryStartMclAnimIfExist(LiveActor*, const char*);
148bool tryStartMclAnimIfNotPlaying(LiveActor*, const char*);
149
150void startMclAnim(LiveActor*, const char*);
151void startMclAnimAndSetFrameAndStop(LiveActor*, const char*, f32);
152
153void clearMclAnim(LiveActor*);
154
155void setMclAnimFrame(LiveActor*, f32);
156void setMclAnimFrameRate(LiveActor*, f32);
157void setMclAnimFrameAndStop(LiveActor*, f32);
158void setMclAnimNormalFrameAndStop(LiveActor*, f32);
159void setMclAnimFrameAndStopEnd(LiveActor*);
160
161const char* getPlayingMclAnimName(const LiveActor*);
162f32 getMclAnimFrame(const LiveActor*);
163f32 getMclAnimFrameRate(const LiveActor*);
164f32 getMclAnimFrameMax(const LiveActor*);
165f32 getMclAnimFrameMax(const LiveActor*, const char*);
166
167bool isMclAnimExist(const LiveActor*, const char*);
168bool isMclAnimPlaying(const LiveActor*, const char*);
169bool isMclAnimExist(const LiveActor*);
170bool isMclAnimEnd(const LiveActor*);
171bool isMclAnimOneTime(const LiveActor*, const char*);
172bool isMclAnimOneTime(const LiveActor*);
173bool isMclAnimPlaying(const LiveActor*);
174
175// Mts
176
177bool tryStartMtsAnimIfExist(LiveActor*, const char*);
178bool tryStartMtsAnimIfNotPlaying(LiveActor*, const char*);
179
180void startMtsAnim(LiveActor*, const char*);
181void startMtsAnimAndSetFrameAndStop(LiveActor*, const char*, f32);
182
183void clearMtsAnim(LiveActor*);
184
185void setMtsAnimFrame(LiveActor*, f32);
186void setMtsAnimFrameRate(LiveActor*, f32);
187void setMtsAnimFrameAndStop(LiveActor*, f32);
188void setMtsAnimFrameAndStopEnd(LiveActor*);
189
190const char* getPlayingMtsAnimName(const LiveActor*);
191f32 getMtsAnimFrame(const LiveActor*);
192f32 getMtsAnimFrameRate(const LiveActor*);
193f32 getMtsAnimFrameMax(const LiveActor*);
194f32 getMtsAnimFrameMax(const LiveActor*, const char*);
195
196bool isMtsAnimExist(const LiveActor*, const char*);
197bool isMtsAnimPlaying(const LiveActor*, const char*);
198bool isMtsAnimExist(const LiveActor*);
199bool isMtsAnimEnd(const LiveActor*);
200bool isMtsAnimOneTime(const LiveActor*, const char*);
201bool isMtsAnimOneTime(const LiveActor*);
202bool isMtsAnimPlaying(const LiveActor*);
203
204// Mat
205
206bool tryStartMatAnimIfExist(LiveActor*, const char*);
207bool tryStartMatAnimIfNotPlaying(LiveActor*, const char*);
208
209void createMatAnimSlotForMcl(LiveActor*);
210void createMatAnimSlotForMtp(LiveActor*);
211void createMatAnimSlotForMts(LiveActor*);
212
213void startMatAnim(LiveActor, const char*);
214void startMatAnimAndSetFrameAndStop(LiveActor, const char*, f32);
215void clearMatAnim(LiveActor*);
216
217void setMatAnimFrame(LiveActor*, f32);
218void setMatAnimFrameRate(LiveActor*, f32);
219void setMatAnimFrameAndStop(LiveActor*, f32);
220void setMatAnimFrameAndStopEnd(LiveActor*);
221
222const char* getPlayingMatAnimName(const LiveActor*);
223f32 getMatAnimFrame(const LiveActor*);
224f32 getMatAnimFrameRate(const LiveActor*);
225f32 getMatAnimFrameMax(const LiveActor*);
226f32 getMatAnimFrameMax(const LiveActor*, const char*);
227
228bool isMatAnimExist(const LiveActor*, const char*);
229bool isMatAnimPlaying(const LiveActor*, const char*);
230bool isMatAnimExist(const LiveActor*);
231bool isMatAnimEnd(const LiveActor*);
232bool isMatAnimOneTime(const LiveActor*, const char*);
233bool isMatAnimOneTime(const LiveActor*);
234bool isMatAnimPlaying(const LiveActor*);
235
236// Vis
237
238bool tryStartVisAnimIfExist(LiveActor*, const char*);
239bool tryStartVisAnimIfNotPlaying(LiveActor*, const char*);
240
241void startVisAnim(LiveActor*, const char*);
242void startVisAnimAndSetFrameAndStop(LiveActor*, const char*, f32);
243
244void clearVisAnim(LiveActor*);
245
246void setVisAnimFrame(LiveActor*, f32);
247void setVisAnimFrameRate(LiveActor*, f32);
248void setVisAnimFrameAndStop(LiveActor*, f32);
249void setVisAnimFrameAndStopEnd(LiveActor*);
250
251const char* getPlayingVisAnimName(const LiveActor*);
252f32 getVisAnimFrame(const LiveActor*);
253f32 getVisAnimFrameRate(const LiveActor*);
254f32 getVisAnimFrameMax(const LiveActor*);
255f32 getVisAnimFrameMax(const LiveActor*, const char*);
256
257bool isVisAnimExist(const LiveActor*, const char*);
258bool isVisAnimPlaying(const LiveActor*, const char*);
259bool isVisAnimExist(const LiveActor*);
260bool isVisAnimEnd(const LiveActor*);
261bool isVisAnimOneTime(const LiveActor*, const char*);
262bool isVisAnimOneTime(const LiveActor*);
263bool isVisAnimPlaying(const LiveActor*);
264
265// Vis for Action
266
267bool tryStartVisAnimIfExistForAction(LiveActor*, const char*);
268bool tryStartVisAnimIfNotPlayingForAction(LiveActor*, const char*);
269
270void startVisAnimForAction(LiveActor*, const char*);
271void startVisAnimAndSetFrameAndStopForAction(LiveActor*, const char*, f32);
272
273void clearVisAnimForAction(LiveActor*);
274
275void setVisAnimFrameForAction(LiveActor*, f32);
276void setVisAnimFrameRateForAction(LiveActor*, f32);
277void setVisAnimFrameAndStopForAction(LiveActor*, f32);
278void setVisAnimFrameAndStopEndForAction(LiveActor*);
279
280const char* getPlayingVisAnimNameForAction(const LiveActor*);
281f32 getVisAnimFrameForAction(const LiveActor*);
282f32 getVisAnimFrameRateForAction(const LiveActor*);
283f32 getVisAnimFrameMaxForAction(const LiveActor*);
284f32 getVisAnimFrameMaxForAction(const LiveActor*, const char*);
285
286bool isVisAnimExistForAction(const LiveActor*, const char*);
287bool isVisAnimPlayingForAction(const LiveActor*, const char*);
288bool isVisAnimExistForAction(const LiveActor*);
289bool isVisAnimEndForAction(const LiveActor*);
290bool isVisAnimOneTimeForAction(const LiveActor*, const char*);
291bool isVisAnimOneTimeForAction(const LiveActor*);
292bool isVisAnimPlayingForAction(const LiveActor*);
293
294// Skl Retargetting
295
296void initAndBindSklAnimRetargetting(LiveActor*, const char*, const sead::Vector3f&);
297SklAnimRetargettingInfo* createSklAnimRetargetting(const LiveActor*, const char*,
298 const sead::Vector3f&);
299void bindSklAnimRetargetting(const LiveActor*, const SklAnimRetargettingInfo*);
300SklAnimRetargettingInfo* createSklAnimRetargetting(const LiveActor*, const LiveActor*,
301 const sead::Vector3f&);
302void unbindSklAnimRetargetting(const LiveActor*);
303
304// Partial Skl
305
306void startPartialSklAnim(LiveActor*, const char*, s32, s32, const SklAnimRetargettingInfo*);
307void startPartialSklAnimWithInterpolate(LiveActor*, const char*, s32, s32, s32,
308 const SklAnimRetargettingInfo*);
309void initPartialSklAnim(LiveActor*, s32, s32, s32);
310void clearPartialSklAnim(LiveActor*, s32);
311void clearPartialSklAnimWithInterpolate(LiveActor*, s32, s32);
312
313void addPartialSklAnimPartsList(LiveActor*, const char*, const char*, s32);
314void addPartialSklAnimPartsListRecursive(LiveActor*, const char*, s32);
315void setPartialSklAnimFrame(LiveActor*, s32, f32);
316void setPartialSklAnimFrameRate(LiveActor*, s32, f32);
317void setBaseMtxAndCalcAnim(LiveActor*, const sead::Matrix34f&, const sead::Vector3f&);
318
319const char* getPlayingPartialSklAnimName(const LiveActor*, s32);
320f32 getPartialSklAnimFrame(const LiveActor*, s32);
321f32 getPartialSklAnimFrameRate(const LiveActor*, s32);
322s32 getPartialSklAnimSlotNum(LiveActor*);
323s32 calcJoitsAmountFromJoint(LiveActor*, const char*);
324
325bool isPartialSklAnimEnd(const LiveActor*, s32);
326bool isPartialSklAnimOneTime(const LiveActor*, s32);
327bool isPartialSklAnimAttached(const LiveActor*, s32);
328bool isPartialAnimPlaying(const LiveActor*, s32);
329
330} // namespace al
331
332namespace alAnimFunction {
333bool isAllAnimEnd(const al::LiveActor*, s32);
334f32 getAllAnimFrame(const al::LiveActor*, s32);
335f32 getAllAnimFrameMax(const al::LiveActor*, const char*, s32);
336f32 getAllAnimFrameRate(const al::LiveActor*, s32);
337const char* getAllAnimName(const al::LiveActor*);
338} // namespace alAnimFunction
339