28 #ifndef WINTERMUTE_XMODEL_H 29 #define WINTERMUTE_XMODEL_H 31 #include "engines/wintermute/base/base_object.h" 32 #include "engines/wintermute/base/base_sprite.h" 33 #include "engines/wintermute/base/gfx/xmath.h" 34 #include "engines/wintermute/base/gfx/3deffect.h" 35 #include "engines/wintermute/base/gfx/3deffect_params.h" 36 #include "engines/wintermute/coll_templ.h" 37 #include "engines/wintermute/video/video_theora_player.h" 38 #include "engines/wintermute/utils/utils.h" 42 class AnimationChannel;
51 #define X_NUM_ANIMATION_CHANNELS 10 55 class XModelMatSprite {
69 _effectFile =
nullptr;
70 _effectParams =
nullptr;
73 XModelMatSprite(
const char *matName,
BaseSprite *sprite) {
77 BaseUtils::setString(&_matName, matName);
79 _effectFile =
nullptr;
80 _effectParams =
nullptr;
87 BaseUtils::setString(&_matName, matName);
89 _effectFile =
nullptr;
90 _effectParams =
nullptr;
93 XModelMatSprite(
const char *matName,
Effect3D *effect) {
97 BaseUtils::setString(&_matName, matName);
99 _effectFile =
nullptr;
107 _effectFile =
nullptr;
114 delete _effectParams;
115 _effectParams =
nullptr;
144 _effectParams->clear();
150 persistMgr->transferCharPtr(TMEMBER(_matName));
151 persistMgr->transferPtr(TMEMBER(_sprite));
153 persistMgr->transferPtr(TMEMBER(_theora));
155 if (persistMgr->getIsSaving()) {
156 char *effectFileName =
nullptr;
158 BaseUtils::setString(&effectFileName, _effect->getFileName());
160 effectFileName =
nullptr;
162 persistMgr->transferCharPtr(TMEMBER(effectFileName));
163 delete[] effectFileName;
165 persistMgr->transferCharPtr(TMEMBER(_effectFile));
168 if (persistMgr->getIsSaving()) {
169 bool hasParams = _effectParams !=
nullptr;
170 persistMgr->transferBool(TMEMBER(hasParams));
173 _effectParams->persist(persistMgr);
176 persistMgr->transferBool(TMEMBER(hasParams));
180 _effectParams->persist(persistMgr);
182 _effectParams =
nullptr;
191 const static int kDefaultTicksPerSecond = 4800;
206 bool update()
override;
208 bool renderFlatShadowModel(uint32 shadowColor);
213 bool playAnim(
int channel,
const Common::String &anim, uint32 transitionTime = 0,
bool forceReset =
false, uint32 stopTransitionTime = 0);
214 bool isAnimPending(
char *animName =
nullptr);
215 bool isAnimPending(
int channel,
const char *animName =
nullptr);
217 bool isTransparentAt(
int x,
int y);
225 bool parseAnim(
char *buffer);
229 bool stopAnim(
int channel, uint32 transitionTime);
230 bool stopAnim(uint32 transitionTime);
232 DXMatrix *getBoneMatrix(
const char *boneName);
235 bool setMaterialSprite(
const char *materialName,
const char *spriteFilename);
236 bool setMaterialTheora(
const char *materialName,
const char *theoraFilename);
237 bool setMaterialEffect(
const char *materialName,
const char *effectFilename);
238 bool removeMaterialEffect(
const char *materialName);
239 bool setMaterialEffectParam(
const char *materialName,
const char *paramName,
ScValue *val);
240 bool setMaterialEffectParam(
const char *materialName,
const char *paramName,
DXVector4 val);
241 bool initializeSimple();
243 bool invalidateDeviceObjects()
override;
244 bool restoreDeviceObjects()
override;
246 bool unloadAnimation(
const char *animName);
248 uint32 _ticksPerSecond{};
253 void cleanup(
bool complete =
true);
254 bool findBones(
bool animOnly =
false,
XModel *parentModel =
nullptr);
256 void updateBoundingRect();
262 int32 _lastOffsetX{};
263 int32 _lastOffsetY{};
Definition: base_game.h:75
Definition: script_value.h:42
Definition: base_persistence_manager.h:55
Definition: coll_templ.h:399
Definition: xanimation_set.h:42
Definition: video_theora_player.h:41
Definition: 3dshadow_volume.h:49
Definition: xanimation_channel.h:37
Definition: coll_templ.h:347
Definition: 3deffect_params.h:36
Definition: base_named_object.h:36
Definition: xframe_node.h:44
Definition: base_sprite.h:40
Definition: 3deffect.h:36
Definition: xfile_loader.h:459
Definition: base_object.h:49
Definition: achievements_tables.h:27