New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
JointBlendModel.h
Go to the documentation of this file.
1#pragma once
2
3#include <graphics/AnimModel.h>
4#include <graphics/JointBlendModelCalcRatio.h>
5
7{
8public:
10 ModelResource* mdl_res,
11 Model* model,
12 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
13 sead::Heap* heap = nullptr,
14 const sead::PtrArray<ModelResource>* anim_mdl_res_array = nullptr
15 );
16
17 static JointBlendModel* create(
18 ModelResource* mdl_res,
19 const sead::SafeString& name,
20 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
21 Model::BoundingMode bounding_mode = Model::cBoundingMode_Disable,
22 sead::Heap* heap = nullptr
23 );
24
25 static JointBlendModel* create(
26 ModelResource* mdl_res,
27 const sead::SafeString& name,
28 s32 view_num,
29 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
30 Model::BoundingMode bounding_mode,
31 sead::Heap* heap = nullptr
32 );
33
34 static JointBlendModel* create(
35 const sead::SafeString& resource_key,
36 const sead::SafeString& name,
37 s32 skl_anim_num = 0, s32 tex_anim_num = 0, s32 shu_anim_num = 0, s32 vis_anim_num = 0, s32 sha_anim_num = 0,
38 Model::BoundingMode bounding_mode = Model::cBoundingMode_Disable,
39 sead::Heap* heap = nullptr
40 );
41
42 static JointBlendModel* create(
43 const sead::SafeString& resource_key,
44 const sead::SafeString& name,
45 s32 view_num,
46 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
47 Model::BoundingMode bounding_mode,
48 sead::Heap* heap = nullptr
49 );
50
51public:
52 // Address: 0x024DFBF0
53 JointBlendModel(Model* model, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num);
54
55 // Address: 0x024DFC78
56 void init(ModelResource* mdl_res, const sead::PtrArray<ModelResource>* anim_mdl_res_array = nullptr, sead::Heap* heap = nullptr);
57
58 // Progress frame counters for all bound animations
59 // Note: order against "calcBlend" does not matter (they operate independently)
60 // Address: 0x024DFC7C
62
63 // Apply animations & do world-space calculations
64 // Note: implicitly calls "calcBlend" first
65 // Note: "playAnmFrameCtrl" should be called at some point before this function
66 // Address: 0x024DFD04
67 void calc();
68
69 // Update current progress of the blend calculation
70 // Note: order against "playAnmFrameCtrl" does not matter (they operate independently)
71 // Address: 0x024DFC80
72 void calcBlend();
73
74 void update(const sead::Vector3f& pos, const sead::Vector3u& rot, const sead::Vector3f& scale, bool animate = true)
75 {
76 sead::Matrix34f mtx;
77 mtx.makeRTIdx(rot, pos);
78 setBaseModelMtx(mtx);
79 setLocalScale(scale);
80 calc();
81
82 if (animate)
84 }
85
86 SkeletalAnimation* getCurSklAnim() const { return getSklAnim(mCurAnmIdx); }
87
88 // Address: 0x024DFF9C
89 void setAnm(
90 ModelResource* mdl_res,
91 const sead::SafeString& name,
92 f32 blend_duration
93 );
94
95 // Address: 0x024DFFB4
96 void setAnm(
97 const sead::SafeString& name,
98 f32 blend_duration,
99
100 FrameCtrl::PlayMode mode = FrameCtrl::cMode_Repeat,
101 f32 rate = 1.0f,
102 f32 frame = 0.0f
103 );
104
105 // Address: 0x024DFFC4
106 void setAnm(
107 const sead::SafeString& name,
108
109 FrameCtrl::PlayMode mode = FrameCtrl::cMode_Repeat,
110 f32 rate = 1.0f,
111 f32 frame = 0.0f
112 );
113
114private:
115 // Address: 0x024DFD38
117 ModelResource* mdl_res,
118 const sead::SafeString& name,
119 f32 blend_duration,
120
121 FrameCtrl::PlayMode mode = FrameCtrl::cMode_Repeat,
122 f32 rate = 1.0f,
123 f32 frame = 0.0f
124 );
125
126private:
129};
130static_assert(sizeof(JointBlendModel) == 0x48);
131
133 ModelResource* mdl_res,
134 Model* model,
135 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
136 sead::Heap* heap,
137 const sead::PtrArray<ModelResource>* anim_mdl_res_array
138)
139{
140 JointBlendModel* blend_model = new (heap) JointBlendModel(model, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num);
141 blend_model->init(mdl_res, anim_mdl_res_array, heap);
142 return blend_model;
143}
144
146 ModelResource* mdl_res,
147 const sead::SafeString& name,
148 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
149 Model::BoundingMode bounding_mode,
150 sead::Heap* heap
151)
152{
153 Model* model = ModelUtil::createG3d(*mdl_res, name, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, bounding_mode, heap);
154 return create(mdl_res, model, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, heap);
155}
156
158 ModelResource* mdl_res,
159 const sead::SafeString& name,
160 s32 view_num,
161 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
162 Model::BoundingMode bounding_mode,
163 sead::Heap* heap
164)
165{
166 Model* model = ModelUtil::createG3d(*mdl_res, name, view_num, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, bounding_mode, heap);
167 return create(mdl_res, model, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, heap);
168}
169
171 const sead::SafeString& resource_key,
172 const sead::SafeString& name,
173 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
174 Model::BoundingMode bounding_mode,
175 sead::Heap* heap
176)
177{
178 ModelResource* mdl_res = ModelResourceMgr::instance()->getResource(resource_key);
179 return create(mdl_res, name, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, bounding_mode, heap);
180}
181
183 const sead::SafeString& resource_key,
184 const sead::SafeString& name,
185 s32 view_num,
186 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
187 Model::BoundingMode bounding_mode,
188 sead::Heap* heap
189)
190{
191 ModelResource* mdl_res = ModelResourceMgr::instance()->getResource(resource_key);
192 return create(mdl_res, name, view_num, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, bounding_mode, heap);
193}
Definition JointBlendModel.h:7
void update(const sead::Vector3f &pos, const sead::Vector3u &rot, const sead::Vector3f &scale, bool animate=true)
Definition JointBlendModel.h:74
void setAnm(const sead::SafeString &name, FrameCtrl::PlayMode mode=FrameCtrl::cMode_Repeat, f32 rate=1.0f, f32 frame=0.0f)
static JointBlendModel * create(ModelResource *mdl_res, const sead::SafeString &name, s32 view_num, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num, Model::BoundingMode bounding_mode, sead::Heap *heap=nullptr)
Definition JointBlendModel.h:157
static JointBlendModel * create(const sead::SafeString &resource_key, const sead::SafeString &name, s32 skl_anim_num=0, s32 tex_anim_num=0, s32 shu_anim_num=0, s32 vis_anim_num=0, s32 sha_anim_num=0, Model::BoundingMode bounding_mode=Model::cBoundingMode_Disable, sead::Heap *heap=nullptr)
Definition JointBlendModel.h:170
void setAnm(ModelResource *mdl_res, const sead::SafeString &name, f32 blend_duration)
static JointBlendModel * create(ModelResource *mdl_res, const sead::SafeString &name, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num, Model::BoundingMode bounding_mode=Model::cBoundingMode_Disable, sead::Heap *heap=nullptr)
Definition JointBlendModel.h:145
void setAnm_(ModelResource *mdl_res, const sead::SafeString &name, f32 blend_duration, FrameCtrl::PlayMode mode=FrameCtrl::cMode_Repeat, f32 rate=1.0f, f32 frame=0.0f)
SkeletalAnimation * getCurSklAnim() const
Definition JointBlendModel.h:86
JointBlendModel(Model *model, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num)
void playAnmFrameCtrl()
JointBlendModelCalcRatio mCalcRatio
Definition JointBlendModel.h:127
u32 mCurAnmIdx
Definition JointBlendModel.h:128
static JointBlendModel * create(ModelResource *mdl_res, Model *model, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num, sead::Heap *heap=nullptr, const sead::PtrArray< ModelResource > *anim_mdl_res_array=nullptr)
Definition JointBlendModel.h:132
static JointBlendModel * create(const sead::SafeString &resource_key, const sead::SafeString &name, s32 view_num, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num, Model::BoundingMode bounding_mode, sead::Heap *heap=nullptr)
Definition JointBlendModel.h:182
void init(ModelResource *mdl_res, const sead::PtrArray< ModelResource > *anim_mdl_res_array=nullptr, sead::Heap *heap=nullptr)
void setAnm(const sead::SafeString &name, f32 blend_duration, FrameCtrl::PlayMode mode=FrameCtrl::cMode_Repeat, f32 rate=1.0f, f32 frame=0.0f)