New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
PlayerModelBase.h
Go to the documentation of this file.
1#pragma once
2
3#include <graphics/FrameCtrl.h>
4#include <utility/Angle3.h>
5
6#include <container/seadSafeArray.h>
7#include <heap/seadDisposer.h>
8#include <math/seadMatrix.h>
9#include <prim/seadRuntimeTypeInfo.h>
10#include <prim/seadSafeString.h>
11
12class AnimModel;
13class ModelResource;
14
15class PlayerModelBase : public sead::IDisposer // vtbl Address: 0x1016BCE4
16{
17 // getRuntimeTypeInfoStatic()::typeInfo initialization guard variable Address: 0x101E9D24
18 // getRuntimeTypeInfoStatic()::typeInfo Address: 0x101EBA78
20
21public:
34 static_assert(cType_Num == 8);
35 static_assert(sizeof(Type) == 4);
36
44 static_assert(sizeof(SceneType) == 4);
45
87 static_assert(cTexAnmType_Num == 37);
88 static_assert(sizeof(cTexAnmType_Num) == 4);
89
91 {
92 cDarkTargetType_InvTevColor0 = 0, // Set for normal & tower door
93 cDarkTargetType_TevKColor3 // Set for castle door
94 };
95 static_assert(sizeof(DarkTargetType) == 4);
96
113
115 {
117 // ...
119 // ...
121 // ...
125 // ...
127 };
128 static_assert(sizeof(AnmFlagBit) == 4);
129
137 static_assert(cAnmFlagType_Num == 3);
138
145
151 static_assert(sizeof(CapMode) == 4);
152
153public:
154 // Address: 0x02920CA8
155 PlayerModelBase(const sead::SafeString& model_res_key, const sead::SafeString& anm_res_key);
156 // Address: 0x02920E8C
157 virtual ~PlayerModelBase();
158
159 virtual void setTexAnmType(TexAnmType type) = 0;
160
161 virtual bool setPersonalAnm(ModelResource** anm_res, sead::BufferedSafeString* anm_name, s32 anm_id, bool body) = 0;
162 virtual bool setPersonalRideAnm(ModelResource** anm_res, sead::BufferedSafeString* anm_name, s32 anm_id) = 0;
163
164 virtual void setFootAnmImpl(const ModelResource* anm_res, const sead::SafeString& anm_name, FrameCtrl::PlayMode mode, f32 rate, f32 frame, f32 blend_duration) = 0;
165 virtual void setBodyAnmImpl(const ModelResource* anm_res, const sead::SafeString& anm_name, FrameCtrl::PlayMode mode, f32 rate, f32 frame, f32 blend_duration) = 0;
166
167 virtual void setAnmBind() = 0;
168
169 virtual void calcImpl() = 0;
170 virtual void calc2Impl() = 0;
171
172 virtual void setModelDrawBufferIndex(s32 idx_opa, s32 idx_xlu) = 0;
173 virtual void setModelDrawFlagDirect(u32 flag) = 0;
174
175 virtual void setDark(DarkTargetType type, f32 value) = 0;
176
177 // Address: 0x02920F88
178 void reset();
179
180 // Address: 0x02920F9C
181 virtual f32 getAnmRate(s32 anm_id);
182 // Address: 0x02920FB0
183 virtual f32 getAnmBlendDuration(s32 anm_id);
184
185 // Address: 0x02921524
186 virtual void setAnm(s32 anm_id, f32 rate, f32 blend_duration = 0.0f, f32 frame = 0.0f);
187 // Address: 0x02921280
188 void setBodyAnm(s32 anm_id, f32 rate, f32 frame = 0.0f, f32 blend_duration = 0.0f);
189 // Address: 0x029219F8
190 void copyLinkAnm(f32 blend_duration);
191
192 // Address: 0x02921444
193 void setLinkAnm(s32 anm_id, f32 rate, f32 blend_duration = 0.0f, f32 frame = 0.0f);
194 // Address: 0x02921A40
195 void setRideAnm(s32 anm_id, f32 rate, f32 blend_duration = 0.0f, f32 frame = 0.0f);
196 // Address: 0x029214F0
197 void setSlopeBodyAnm(f32 blend_duration);
198 virtual void releaseBodyAnm(f32 blend_duration) = 0;
199 virtual void setCarryBodyAnm(f32 blend_duration, bool bubble_reset_frame) = 0;
200
201 // Address: 0x02921DB4
202 void setJumpIndex(s32 rnd_type);
203 // Address: 0x02921E50
204 virtual bool getJumpAnmName(sead::BufferedSafeString* anm_name, s32 anm_id, bool body);
205
206 // Address: 0x02921088
207 void setRate(f32 rate);
208 // Address: 0x029219F0
210
211 // Address: 0x02921058
212 void setRateDirect(f32 rate);
213 // Address: 0x029220E0
215
216 // Address: 0x029220E8
217 virtual void setBodyRate(f32 rate);
218 // Address: 0x029214E0
220
221 // Address: 0x0292211C
222 bool isAnmStop();
223 // Address: 0x02922124
225
226 // Address: 0x02921178
227 void setFrame(f32 frame);
228 // Address: 0x02921210
230
231 // Address: 0x02921170
232 void setFrameDirect(f32 frame);
233 f32 getFrameDirect() { return getFrame(); }
234
235 // Address: 0x0292212C
236 virtual void setBodyFrame(f32 frame);
237 // Address: 0x029214E8
239
240 // Address: 0x02922158
241 bool checkFrame(f32 frame);
242 // Address: 0x02922160
243 bool checkBodyFrame(f32 frame);
244
245 // Address: 0x02922194
247 // Address: Deleted
249
250 // Address: 0x0292219C
252
253 // Address: 0x02921060
255
256 // Address: 0x029221B0
257 void getJointMtx(sead::Matrixf* mtx, s32 index);
258 // Address: 0x029221D4
259 void getJointPos(sead::Vector3f* pos, s32 index);
260
261 // Address: 0x02922210
262 virtual void getJointMtx(sead::Matrixf* mtx, const sead::SafeString& name);
263 // Address: 0x029222BC
264 void getJointPos(sead::Vector3f* pos, const sead::SafeString& name);
265
266 virtual void play() = 0;
267
268 // Address: 0x02922304
269 void calc(const sead::Matrixf& mtx);
270 // Address: 0x029224E8
271 void calc2();
272
273 // Address: 0x029224F8
274 virtual void draw();
275
276 // Address: 0x02922578
278
279 // Address: 0x029225AC
280 void onCarry();
281 // Address: 0x029225D0
282 void onLiftUp();
283 // Address: 0x029225F4
285
287 {
288 mFlag.set(cFlag_IsBubbleChibiYoshiShake);
289 }
290
291 // Address: 0x0292250C
292 void offCarry();
293 // Address: 0x02922530
294 void offLiftUp();
295 // Address: 0x02922554
297
299 {
300 mFlag.reset(cFlag_IsBubbleChibiYoshiShake);
301 }
302
303 // Address: 0x0292123C
304 bool isCarry();
305 // Address: 0x02921218
306 bool isLiftUp();
307
309 {
310 return mFlag.isOn(cFlag_IsBalloonChibiYoshiFly);
311 }
312
314 {
315 return mFlag.isOn(cFlag_IsBubbleChibiYoshiShake);
316 }
317
318 virtual void onStarAnm()
319 {
320 mFlag.set(cFlag_IsStarAnm);
321 }
322
323 virtual void offStarAnm()
324 {
325 mFlag.reset(cFlag_IsStarAnm);
326 }
327
328 // Address: 0x02922618
330
331 // Address: 0x029227D0
333
334 virtual f32 getBaseScale() = 0;
335
336 s32 getAnmID() const
337 {
338 return mAnm;
339 }
340
342 {
343 return mModelRes;
344 }
345
347 {
348 return mAnmRes;
349 }
350
352 {
353 return &mHeadTopPos;
354 }
355
357 {
358 return &mHeadPos;
359 }
360
362 {
363 return mAnmFlag[type];
364 }
365
366 bool isAnmFlag(AnmFlagType type, AnmFlagBit bit) const
367 {
368 return mAnmFlag[type] >> bit & 1;
369 }
370
371 bool isSitAnm() const
372 {
374 }
375
376 bool isHangAnm() const
377 {
379 }
380
381 bool isSwimAnm() const
382 {
384 }
385
387 {
388 mFaceAngleOverrideFlag.change(flag, enable);
389 }
390
392 {
393 return mFaceAngleOverride;
394 }
395
396 void setFaceAngleOverride(const Angle3& angle)
397 {
398 mFaceAngleOverride = angle;
399 }
400
402 {
403 mFaceAngleOverride.x() = 0;
404 mFaceAngleOverride.y() = 0;
405 mFaceAngleOverride.z() = 0;
406 }
407
409 {
410 mFaceAngleOverrideFlag.makeAllZero();
411 }
412
414 {
415 mFlag.set(cFlag_IsOnHDokan);
416 }
417
419 {
420 mFlag.reset(cFlag_IsOnHDokan);
421 }
422
423 bool isOnHDokan() const
424 {
425 return mFlag.isOn(cFlag_IsOnHDokan);
426 }
427
428 void onWaitL()
429 {
430 mFlag.set(cFlag_IsWaitL);
431 }
432
433 void onWaitR()
434 {
435 mFlag.set(cFlag_IsWaitR);
436 }
437
438 void offWait()
439 {
440 mFlag.reset(cFlag_IsWaitL);
441 mFlag.reset(cFlag_IsWaitR);
442 }
443
444 bool isWaitL() const
445 {
446 return mFlag.isOn(cFlag_IsWaitL);
447 }
448
449 bool isWaitR() const
450 {
451 return mFlag.isOn(cFlag_IsWaitR);
452 }
453
455 {
456 mFlag.set(cFlag_IsRideCloudWait);
457 }
458
460 {
461 mFlag.reset(cFlag_IsRideCloudWait);
462 }
463
464 bool isRideCloudWait() const
465 {
466 return mFlag.isOn(cFlag_IsRideCloudWait);
467 }
468
470 {
471 mFlag.set(cFlag_IsRideLiftWait);
472 }
473
475 {
476 mFlag.reset(cFlag_IsRideLiftWait);
477 }
478
479 bool isRideLiftWait() const
480 {
481 return mFlag.isOn(cFlag_IsRideLiftWait);
482 }
483
484protected:
505 u32,
511 Angle3 mFaceAngleOverride; // X is always set to 0 and never actually used
514};
515static_assert(sizeof(PlayerModelBase) == 0xF0);
Definition AnimModel.h:19
Definition ModelResource.h:13
Definition PlayerModelBase.h:16
void resetFaceAngleOverride()
Definition PlayerModelBase.h:401
virtual void setTexAnmType(TexAnmType type)=0
bool isBalloonChibiYoshiFly() const
Definition PlayerModelBase.h:308
void setJumpIndex(s32 rnd_type)
TexAnmType mTexAnmType
Definition PlayerModelBase.h:498
SceneType mSceneType
Definition PlayerModelBase.h:497
void changeFaceAngleOverrideFlag(FaceAngleOverrideFlag flag, bool enable)
Definition PlayerModelBase.h:386
virtual void calcImpl()=0
PlayerModelBase(const sead::SafeString &model_res_key, const sead::SafeString &anm_res_key)
void calc(const sead::Matrixf &mtx)
bool checkBodyFrame(f32 frame)
void onWaitL()
Definition PlayerModelBase.h:428
bool isHangAnm() const
Definition PlayerModelBase.h:376
virtual void calc2Impl()=0
virtual void setAnm(s32 anm_id, f32 rate, f32 blend_duration=0.0f, f32 frame=0.0f)
void setBodyAnm(s32 anm_id, f32 rate, f32 frame=0.0f, f32 blend_duration=0.0f)
AnmFlagType
Definition PlayerModelBase.h:131
@ cAnmFlagType_Num
Definition PlayerModelBase.h:135
@ cAnmFlagType_Main
Definition PlayerModelBase.h:132
@ cAnmFlagType_Unknown
Definition PlayerModelBase.h:134
@ cAnmFlagType_Body
Definition PlayerModelBase.h:133
sead::Vector3f mHeadTopPos
Definition PlayerModelBase.h:494
void setRideAnm(s32 anm_id, f32 rate, f32 blend_duration=0.0f, f32 frame=0.0f)
bool isBodyAnmStop()
DarkTargetType
Definition PlayerModelBase.h:91
@ cDarkTargetType_TevKColor3
Definition PlayerModelBase.h:93
@ cDarkTargetType_InvTevColor0
Definition PlayerModelBase.h:92
virtual void getJointMtx(sead::Matrixf *mtx, const sead::SafeString &name)
ModelResource * mModelRes
Definition PlayerModelBase.h:485
f32 mStoopOffsetTarget
Definition PlayerModelBase.h:502
f32 mStoopOffsetBlendFramesRemaining
Definition PlayerModelBase.h:503
void offBalloonChibiYoshiFly()
void setFrame(f32 frame)
bool isWaitR() const
Definition PlayerModelBase.h:449
virtual f32 getAnmBlendDuration(s32 anm_id)
virtual f32 getAnmRate(s32 anm_id)
void onBubbleChibiYoshiShake()
Definition PlayerModelBase.h:286
Type mType
Definition PlayerModelBase.h:496
bool checkBodyFrameCtrlFlagUnk2()
bool isRideLiftWait() const
Definition PlayerModelBase.h:479
FaceAngleOverrideFlag
Definition PlayerModelBase.h:140
@ cFaceAngleOverrideFlag_Y
Definition PlayerModelBase.h:142
@ cFaceAngleOverrideFlag_X
Definition PlayerModelBase.h:141
@ cFaceAngleOverrideFlag_Z
Definition PlayerModelBase.h:143
s32 mAnm
Definition PlayerModelBase.h:488
bool checkFrame(f32 frame)
ModelResource * getAnmResFile() const
Definition PlayerModelBase.h:346
virtual bool setPersonalAnm(ModelResource **anm_res, sead::BufferedSafeString *anm_name, s32 anm_id, bool body)=0
ModelResource * mAnmRes
Definition PlayerModelBase.h:486
void getJointMtx(sead::Matrixf *mtx, s32 index)
sead::Matrixf mMtxSr
Definition PlayerModelBase.h:493
sead::Matrixf mMtxSrt
Definition PlayerModelBase.h:492
sead::BitFlag32 mFaceAngleOverrideFlag
Definition PlayerModelBase.h:512
sead::BitFlag32 mFlag
Definition PlayerModelBase.h:508
void setRate(f32 rate)
sead::Vector3f mHeadPos
Definition PlayerModelBase.h:495
bool isCourseSelectScene()
virtual void offStarAnm()
Definition PlayerModelBase.h:323
bool isWaitL() const
Definition PlayerModelBase.h:444
void copyLinkAnm(f32 blend_duration)
s32 getAnmID() const
Definition PlayerModelBase.h:336
void onBalloonChibiYoshiFly()
virtual void setModelDrawBufferIndex(s32 idx_opa, s32 idx_xlu)=0
void offBubbleChibiYoshiShake()
Definition PlayerModelBase.h:298
void getJointPos(sead::Vector3f *pos, s32 index)
bool isOnHDokan() const
Definition PlayerModelBase.h:423
virtual ~PlayerModelBase()
Angle3 mFaceAngleOverride
Definition PlayerModelBase.h:511
s32 mDefaultExpressionTimer
Definition PlayerModelBase.h:499
s32 mJumpIndexPrev
Definition PlayerModelBase.h:510
f32 mOffsetY
Definition PlayerModelBase.h:500
bool isSitAnm() const
Definition PlayerModelBase.h:371
void setSlopeBodyAnm(f32 blend_duration)
void setRateDirect(f32 rate)
void setLinkAnm(s32 anm_id, f32 rate, f32 blend_duration=0.0f, f32 frame=0.0f)
virtual void releaseBodyAnm(f32 blend_duration)=0
f32 getFrameDirect()
Definition PlayerModelBase.h:233
void offOnHDokan()
Definition PlayerModelBase.h:418
u32 getAnmFlag(AnmFlagType type) const
Definition PlayerModelBase.h:361
void setFaceAngleOverride(const Angle3 &angle)
Definition PlayerModelBase.h:396
bool isSwimAnm() const
Definition PlayerModelBase.h:381
TexAnmType
Definition PlayerModelBase.h:47
@ cTexAnmType_Wait
Definition PlayerModelBase.h:49
@ cTexAnmType_DmEscortWait
Definition PlayerModelBase.h:81
@ cTexAnmType_CoinComp
Definition PlayerModelBase.h:62
@ cTexAnmType_PropellerGoalPutOnCap
Definition PlayerModelBase.h:51
@ cTexAnmType_KinopioDmShoot
Definition PlayerModelBase.h:79
@ cTexAnmType_BalloonWaitDisconnect
Definition PlayerModelBase.h:70
@ cTexAnmType_DmEnding1Wait
Definition PlayerModelBase.h:83
@ cTexAnmType_DmGlad
Definition PlayerModelBase.h:63
@ cTexAnmType_DmEscort
Definition PlayerModelBase.h:80
@ cTexAnmType_MusaGoalPutOnCap
Definition PlayerModelBase.h:53
@ cTexAnmType_DmGlad2
Definition PlayerModelBase.h:64
@ cTexAnmType_DmSad
Definition PlayerModelBase.h:69
@ cTexAnmType_DmCourseIn
Definition PlayerModelBase.h:73
@ cTexAnmType_KinopioMGGlad
Definition PlayerModelBase.h:71
@ cTexAnmType_CourseIn
Definition PlayerModelBase.h:61
@ cTexAnmType_Num
Definition PlayerModelBase.h:85
@ cTexAnmType_MusaRideGoalPutOnCap
Definition PlayerModelBase.h:55
@ cTexAnmType_PenguinRideGoalPutOnCap
Definition PlayerModelBase.h:54
@ cTexAnmType_GoalPutOnCap
Definition PlayerModelBase.h:50
@ cTexAnmType_Jump
Definition PlayerModelBase.h:58
@ cTexAnmType_DmEnding1
Definition PlayerModelBase.h:82
@ cTexAnmType_Dam
Definition PlayerModelBase.h:57
@ cTexAnmType_DmSad2
Definition PlayerModelBase.h:74
@ cTexAnmType_KinopioDmHail
Definition PlayerModelBase.h:76
@ cTexAnmType_DmGlad3Wait
Definition PlayerModelBase.h:67
@ cTexAnmType_Throw
Definition PlayerModelBase.h:60
@ cTexAnmType_GoalPutOnCap_2
Definition PlayerModelBase.h:56
@ cTexAnmType_PenguinGoalPutOnCap
Definition PlayerModelBase.h:52
@ cTexAnmType_Jumped
Definition PlayerModelBase.h:59
@ cTexAnmType_WaitStatic
Definition PlayerModelBase.h:48
@ cTexAnmType_DmGlad4Wait
Definition PlayerModelBase.h:68
@ cTexAnmType_DmGlad2Wait
Definition PlayerModelBase.h:65
@ cTexAnmType_DmGlad3
Definition PlayerModelBase.h:66
@ cTexAnmType_KinopioDmAwawa
Definition PlayerModelBase.h:78
@ cTexAnmType_KinopioDmThanksGift
Definition PlayerModelBase.h:75
@ cTexAnmType_KinopioDmDamage
Definition PlayerModelBase.h:77
@ cTexAnmType_DmEnding2
Definition PlayerModelBase.h:84
@ cTexAnmType_KinopioMGSad
Definition PlayerModelBase.h:72
void offRideLiftWait()
Definition PlayerModelBase.h:474
virtual void draw()
CapMode
Definition PlayerModelBase.h:147
@ cCapMode_Normal
Definition PlayerModelBase.h:148
@ cCapMode_Bonus
Definition PlayerModelBase.h:149
PlayerModelBase * mLinkPlayer
Definition PlayerModelBase.h:491
AnmFlagBit
Definition PlayerModelBase.h:115
@ cAnmFlagBit_7
Definition PlayerModelBase.h:122
@ cAnmFlagBit_Sit
Definition PlayerModelBase.h:116
@ cAnmFlagBit_8
Definition PlayerModelBase.h:123
@ cAnmFlagBit_Hang
Definition PlayerModelBase.h:118
@ cAnmFlagBit_9
Definition PlayerModelBase.h:124
@ cAnmFlagBit_Swim
Definition PlayerModelBase.h:120
@ cAnmFlagBit_IsSlopeBodyAnm
Definition PlayerModelBase.h:126
virtual void play()=0
virtual void setCarryBodyAnm(f32 blend_duration, bool bubble_reset_frame)=0
void onRideLiftWait()
Definition PlayerModelBase.h:469
bool isAnmFlag(AnmFlagType type, AnmFlagBit bit) const
Definition PlayerModelBase.h:366
f32 mStoopOffsetCurrent
Definition PlayerModelBase.h:501
s32 mBodyAnm
Definition PlayerModelBase.h:489
SceneType
Definition PlayerModelBase.h:38
@ cSceneType_2D
Definition PlayerModelBase.h:42
@ cSceneType_CourseSelect
Definition PlayerModelBase.h:40
@ cSceneType_Course
Definition PlayerModelBase.h:39
@ cSceneType_Unknown
Definition PlayerModelBase.h:41
bool mCarryStateChanged
Definition PlayerModelBase.h:513
sead::Vector3f * getHeadTopPosP()
Definition PlayerModelBase.h:351
void onOnHDokan()
Definition PlayerModelBase.h:413
virtual void setDark(DarkTargetType type, f32 value)=0
bool isBubbleChibiYoshiShake() const
Definition PlayerModelBase.h:313
virtual void setBodyRate(f32 rate)
virtual void setBodyAnmImpl(const ModelResource *anm_res, const sead::SafeString &anm_name, FrameCtrl::PlayMode mode, f32 rate, f32 frame, f32 blend_duration)=0
void offWait()
Definition PlayerModelBase.h:438
bool isRideCloudWait() const
Definition PlayerModelBase.h:464
bool checkFrameCtrlFlagUnk2()
s32 mRideAnm
Definition PlayerModelBase.h:490
virtual void setFootAnmImpl(const ModelResource *anm_res, const sead::SafeString &anm_name, FrameCtrl::PlayMode mode, f32 rate, f32 frame, f32 blend_duration)=0
virtual void setBodyFrame(f32 frame)
ModelResource * getModelResFile() const
Definition PlayerModelBase.h:341
void getJointPos(sead::Vector3f *pos, const sead::SafeString &name)
void onRideCloudWait()
Definition PlayerModelBase.h:454
sead::Vector3f * getHeadPosP()
Definition PlayerModelBase.h:356
virtual void setModelDrawFlagDirect(u32 flag)=0
virtual f32 getBaseScale()=0
virtual void onStarAnm()
Definition PlayerModelBase.h:318
AnimModel * mModel
Definition PlayerModelBase.h:487
void onWaitR()
Definition PlayerModelBase.h:433
void setFrameDirect(f32 frame)
void offRideCloudWait()
Definition PlayerModelBase.h:459
bool isFootStepTiming()
Flag
Definition PlayerModelBase.h:98
@ cFlag_IsStarAnm
Definition PlayerModelBase.h:104
@ cFlag_None
Definition PlayerModelBase.h:111
@ cFlag_IsRideCloudWait
Definition PlayerModelBase.h:108
@ cFlag_IsWaitL
Definition PlayerModelBase.h:106
@ cFlag_IsBubbleChibiYoshiShake
Definition PlayerModelBase.h:102
@ cFlag_IsWaitR
Definition PlayerModelBase.h:107
@ cFlag_IsBalloonChibiYoshiFly
Definition PlayerModelBase.h:101
@ cFlag_IsRideLiftWait
Definition PlayerModelBase.h:109
@ cFlag_IsCarry
Definition PlayerModelBase.h:99
@ cFlag_IsOnHDokan
Definition PlayerModelBase.h:105
@ cFlag_IsLiftUp
Definition PlayerModelBase.h:100
sead::SafeArray< u32, cAnmFlagType_Num > mAnmFlag
Definition PlayerModelBase.h:507
const Angle3 & getFaceAngleOverride() const
Definition PlayerModelBase.h:391
virtual bool getJumpAnmName(sead::BufferedSafeString *anm_name, s32 anm_id, bool body)
virtual void setAnmBind()=0
virtual bool setPersonalRideAnm(ModelResource **anm_res, sead::BufferedSafeString *anm_name, s32 anm_id)=0
void resetFaceAngleOverrideFlag()
Definition PlayerModelBase.h:408
s32 mJumpIndex
Definition PlayerModelBase.h:509