New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
AnimModel.h
Go to the documentation of this file.
1#pragma once
2
3#include <graphics/Model.h>
4#include <graphics/ModelResourceMgr.h>
5#include <graphics/Renderer.h>
6#include <graphics/SkeletalAnimation.h>
7#include <graphics/TexturePatternAnimation.h>
8#include <graphics/ShaderParamAnimation.h>
9#include <graphics/VisibilityAnimation.h>
10#include <graphics/ShapeAnimation.h>
11
12#include <container/seadBuffer.h>
13#include <container/seadPtrArray.h>
14#include <heap/seadHeap.h>
15
16class ModelResource;
17
19{
20public:
21 static AnimModel* create(
22 ModelResource* mdl_res,
23 Model* model,
24 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
25 sead::Heap* heap = nullptr,
26 const sead::PtrArray<ModelResource>* anim_mdl_res_array = nullptr
27 );
28
29 static AnimModel* create(
30 ModelResource* mdl_res,
31 const sead::SafeString& name,
32 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
33 Model::BoundingMode bounding_mode = Model::cBoundingMode_Disable,
34 sead::Heap* heap = nullptr
35 );
36
37 static AnimModel* create(
38 ModelResource* mdl_res,
39 const sead::SafeString& name,
40 s32 view_num,
41 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
42 Model::BoundingMode bounding_mode,
43 sead::Heap* heap = nullptr
44 );
45
46 static AnimModel* create(
47 const sead::SafeString& resource_key,
48 const sead::SafeString& name,
49 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,
50 Model::BoundingMode bounding_mode = Model::cBoundingMode_Disable,
51 sead::Heap* heap = nullptr
52 );
53
54 static AnimModel* create(
55 const sead::SafeString& resource_key,
56 const sead::SafeString& name,
57 s32 view_num,
58 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
59 Model::BoundingMode bounding_mode,
60 sead::Heap* heap = nullptr
61 );
62
63 static void destroy(
64 AnimModel*& anim_model
65 );
66
67public:
68 // Address: 0x024D4798
69 AnimModel(Model* model, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num);
70
71 Model* getModel() const { return mModel; }
73
74 void draw() const { Renderer::instance()->drawModel(this); }
75 void setMtxRT(const sead::Matrix34f& rt) { mModel->setMtxRT(rt); }
76 void setScale(const sead::Vector3f& scale) { mModel->setScale(scale); }
77
78 void update(const sead::Vector3f& pos, const sead::Vector3u& rot, const sead::Vector3f& scale, bool animate = true)
79 {
80 sead::Matrix34f mtx;
81 mtx.makeRTIdx(rot, pos);
82 setMtxRT(mtx);
83 setScale(scale);
85
86 if (animate)
88 }
89
90 SkeletalAnimation* getSklAnim(u32 index) const { return mSklAnim[index]; }
91 TexturePatternAnimation* getTexAnim(u32 index) const { return mTexAnim[index]; }
92 ShaderParamAnimation* getShuAnim(u32 index) const { return mShuAnim[index]; }
93 VisibilityAnimation* getVisAnim(u32 index) const { return mVisAnim[index]; }
94 ShapeAnimation* getShaAnim(u32 index) const { return mShaAnim[index]; }
95
96 void playSklAnim(const sead::SafeString& name, u32 idx = 0) { mSklAnim[idx]->play(mModelResource, name); }
97 void playTexAnim(const sead::SafeString& name, u32 idx = 0) { mTexAnim[idx]->play(mModelResource, name); }
98 void playColorAnim(const sead::SafeString& name, u32 idx = 0) { mShuAnim[idx]->playColorAnim(mModelResource, name); }
99 void playTexSrtAnim(const sead::SafeString& name, u32 idx = 0) { mShuAnim[idx]->playTexSrtAnim(mModelResource, name); }
100 void playBoneVisAnim(const sead::SafeString& name, u32 idx = 0) { mVisAnim[idx]->playBoneVisAnim(mModelResource, name); }
101 void playMatVisAnim(const sead::SafeString& name, u32 idx = 0) { mVisAnim[idx]->playMatVisAnim(mModelResource, name); }
102 void playShapeAnim(const sead::SafeString& name, u32 idx = 0) { mShaAnim[idx]->play(mModelResource, name); }
103
104 // Address: 0x024D49A0
105 void init(ModelResource* mdl_res, const sead::PtrArray<ModelResource>* anim_mdl_res_array = nullptr, sead::Heap* heap = nullptr);
106
107 // Address: 0x024D4D20
109
110 // Address: 0x024D4E84
111 void calcMdl();
112
113private:
121};
122static_assert(sizeof(AnimModel) == 0x30);
123
124inline AnimModel* AnimModel::create(
125 ModelResource* mdl_res,
126 Model* model,
127 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
128 sead::Heap* heap,
129 const sead::PtrArray<ModelResource>* anim_mdl_res_array
130)
131{
132 AnimModel* anim_model = new (heap) AnimModel(model, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num);
133 anim_model->init(mdl_res, anim_mdl_res_array, heap);
134 return anim_model;
135}
136
137inline AnimModel* AnimModel::create(
138 ModelResource* mdl_res,
139 const sead::SafeString& name,
140 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
141 Model::BoundingMode bounding_mode,
142 sead::Heap* heap
143)
144{
145 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);
146 return create(mdl_res, model, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, heap);
147}
148
149inline AnimModel* AnimModel::create(
150 ModelResource* mdl_res,
151 const sead::SafeString& name,
152 s32 view_num,
153 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
154 Model::BoundingMode bounding_mode,
155 sead::Heap* heap
156)
157{
158 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);
159 return create(mdl_res, model, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, heap);
160}
161
162inline AnimModel* AnimModel::create(
163 const sead::SafeString& resource_key,
164 const sead::SafeString& name,
165 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
166 Model::BoundingMode bounding_mode,
167 sead::Heap* heap
168)
169{
170 ModelResource* mdl_res = ModelResourceMgr::instance()->getResource(resource_key);
171 return create(mdl_res, name, skl_anim_num, tex_anim_num, shu_anim_num, vis_anim_num, sha_anim_num, bounding_mode, heap);
172}
173
174inline AnimModel* AnimModel::create(
175 const sead::SafeString& resource_key,
176 const sead::SafeString& name,
177 s32 view_num,
178 s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num,
179 Model::BoundingMode bounding_mode,
180 sead::Heap* heap
181)
182{
183 ModelResource* mdl_res = ModelResourceMgr::instance()->getResource(resource_key);
184 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);
185}
186
187inline void AnimModel::destroy(
188 AnimModel*& anim_model
189)
190{
191 if (anim_model != nullptr)
192 {
193 Model* model = anim_model->getModel();
194 delete model;
195 delete anim_model;
196 anim_model = nullptr;
197 }
198}
Definition AnimModel.h:19
AnimModel(Model *model, s32 skl_anim_num, s32 tex_anim_num, s32 shu_anim_num, s32 vis_anim_num, s32 sha_anim_num)
static AnimModel * 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 AnimModel.h:174
ModelResource * mModelResource
Definition AnimModel.h:115
static void destroy(AnimModel *&anim_model)
Definition AnimModel.h:187
sead::Buffer< TexturePatternAnimation * > mTexAnim
Definition AnimModel.h:117
static AnimModel * 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 AnimModel.h:162
void playShapeAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:102
VisibilityAnimation * getVisAnim(u32 index) const
Definition AnimModel.h:93
static AnimModel * 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 AnimModel.h:149
sead::Buffer< VisibilityAnimation * > mVisAnim
Definition AnimModel.h:119
static AnimModel * 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 AnimModel.h:124
void playColorAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:98
void calcMdl()
void setScale(const sead::Vector3f &scale)
Definition AnimModel.h:76
void init(ModelResource *mdl_res, const sead::PtrArray< ModelResource > *anim_mdl_res_array=nullptr, sead::Heap *heap=nullptr)
void playBoneVisAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:100
void draw() const
Definition AnimModel.h:74
sead::Buffer< ShaderParamAnimation * > mShuAnim
Definition AnimModel.h:118
void playMatVisAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:101
ModelResource * getModelResource() const
Definition AnimModel.h:72
sead::Buffer< ShapeAnimation * > mShaAnim
Definition AnimModel.h:120
ShapeAnimation * getShaAnim(u32 index) const
Definition AnimModel.h:94
TexturePatternAnimation * getTexAnim(u32 index) const
Definition AnimModel.h:91
sead::Buffer< SkeletalAnimation * > mSklAnim
Definition AnimModel.h:116
Model * getModel() const
Definition AnimModel.h:71
SkeletalAnimation * getSklAnim(u32 index) const
Definition AnimModel.h:90
void playTexSrtAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:99
void playAnmFrameCtrl()
Model * mModel
Definition AnimModel.h:114
void update(const sead::Vector3f &pos, const sead::Vector3u &rot, const sead::Vector3f &scale, bool animate=true)
Definition AnimModel.h:78
static AnimModel * 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 AnimModel.h:137
ShaderParamAnimation * getShuAnim(u32 index) const
Definition AnimModel.h:92
void playTexAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:97
void playSklAnim(const sead::SafeString &name, u32 idx=0)
Definition AnimModel.h:96
void setMtxRT(const sead::Matrix34f &rt)
Definition AnimModel.h:75
Definition ModelResource.h:13