1
// Copyright (C) 2002-2011 Nikolaus Gebhardt
2
// This file is part of the "Irrlicht Engine".
3
// For conditions of distribution and use, see copyright notice in irrlicht.h
5
#include "CSceneNodeAnimatorTexture.h"
15
CSceneNodeAnimatorTexture::CSceneNodeAnimatorTexture(const core::array<video::ITexture*>& textures,
16
s32 timePerFrame, bool loop, u32 now)
17
: ISceneNodeAnimatorFinishing(0),
18
TimePerFrame(timePerFrame), StartTime(now), Loop(loop)
21
setDebugName("CSceneNodeAnimatorTexture");
24
for (u32 i=0; i<textures.size(); ++i)
29
Textures.push_back(textures[i]);
32
FinishTime = now + (timePerFrame * Textures.size());
37
CSceneNodeAnimatorTexture::~CSceneNodeAnimatorTexture()
43
void CSceneNodeAnimatorTexture::clearTextures()
45
for (u32 i=0; i<Textures.size(); ++i)
51
//! animates a scene node
52
void CSceneNodeAnimatorTexture::animateNode(ISceneNode* node, u32 timeMs)
59
const u32 t = (timeMs-StartTime);
62
if (!Loop && timeMs >= FinishTime)
64
idx = Textures.size() - 1;
69
idx = (t/TimePerFrame) % Textures.size();
72
if (idx < Textures.size())
73
node->setMaterialTexture(0, Textures[idx]);
78
//! Writes attributes of the scene node animator.
79
void CSceneNodeAnimatorTexture::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
81
out->addInt("TimePerFrame", TimePerFrame);
82
out->addBool("Loop", Loop);
84
// add one texture in addition when serializing for editors
85
// to make it easier to add textures quickly
87
u32 count = Textures.size();
88
if ( options && (options->Flags & io::EARWF_FOR_EDITOR))
91
for (u32 i=0; i<count; ++i)
93
core::stringc tname = "Texture";
96
out->addTexture(tname.c_str(), i<Textures.size() ? Textures[i] : 0);
101
//! Reads attributes of the scene node animator.
102
void CSceneNodeAnimatorTexture::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
104
TimePerFrame = in->getAttributeAsInt("TimePerFrame");
105
Loop = in->getAttributeAsBool("Loop");
109
for(u32 i=1; true; ++i)
111
core::stringc tname = "Texture";
114
if (in->existsAttribute(tname.c_str()))
116
video::ITexture* tex = in->getAttributeAsTexture(tname.c_str());
120
Textures.push_back(tex);
129
ISceneNodeAnimator* CSceneNodeAnimatorTexture::createClone(ISceneNode* node, ISceneManager* newManager)
131
CSceneNodeAnimatorTexture * newAnimator =
132
new CSceneNodeAnimatorTexture(Textures, TimePerFrame, Loop, StartTime);
138
} // end namespace scene
139
} // end namespace irr