#include <animation.h>
Inheritance diagram for NL3D::CAnimation:
Nevrax France
Definition at line 60 of file animation.h.
Public interface. | |
enum | { NotFound = 0xffffffff } |
void | addTrack (const std::string &name, ITrack *pChannel) |
uint | getIdTrackByName (const std::string &name) const |
ITrack * | getTrack (uint trackId) |
const ITrack * | getTrack (uint trackId) const |
void | getTrackNames (std::set< std::string > &setString) const |
void | serial (NLMISC::IStream &f) |
Serial the template. | |
void | setMinEndTime (TAnimationTime minEndTime) |
Set animation min end time. | |
Members | |
typedef std::map< std::string, uint32 > | TMapStringUInt |
typedef std::vector< ITrack * > | TVectAPtrTrack |
TMapStringUInt | _IdByName |
TAnimationTime | _MinEndTime |
std::string | _Name |
TVectAPtrTrack | _TrackVector |
Public Types | |
Public Member Functions | |
CAnimation () | |
ctor | |
virtual | ~CAnimation () |
Destructor. | |
From UAnimation | |
virtual bool | allTrackLoop () const |
virtual TAnimationTime | getBeginTime () const |
virtual TAnimationTime | getEndTime () const |
virtual UTrack * | getTrackByName (const char *name) |
virtual void | releaseTrack (UTrack *track) |
Static Public Member Functions | |
Create / delete animations | |
UAnimation * | createAnimation (const char *sPath) |
void | releaseAnimation (UAnimation *animation) |
Create / delete animations | |
UAnimation * | createAnimation (const char *sPath) |
void | releaseAnimation (UAnimation *animation) |
Private Attributes | |
Anim time caching | |
bool | _AnimLoop |
bool | _AnimLoopTouched |
TAnimationTime | _BeginTime |
bool | _BeginTimeTouched |
TAnimationTime | _EndTime |
bool | _EndTimeTouched |
|
Definition at line 149 of file animation.h. |
|
Definition at line 150 of file animation.h. |
|
Definition at line 70 of file animation.h.
00070 { NotFound=0xffffffff }; |
|
ctor
|
|
Destructor.
Definition at line 53 of file animation.cpp. References _TrackVector, NL3D_MEM_ANIMATION, and uint.
00054 { 00055 NL3D_MEM_ANIMATION 00056 // Delete all the pointers in the array 00057 for (uint i=0; i<_TrackVector.size(); i++) 00058 // Delete 00059 delete _TrackVector[i]; 00060 } |
|
Add a track at the end of the track list. This method is used to insert tracks in the animation. Tracks must be allocated with new. The pointer is then handeled by the CAnimation. Definition at line 64 of file animation.cpp. References _AnimLoopTouched, _BeginTimeTouched, _EndTimeTouched, _IdByName, _TrackVector, NL3D_MEM_ANIMATION, and uint32. Referenced by NL3D::CAnimationOptimizer::optimize().
00065 { 00066 NL3D_MEM_ANIMATION 00067 // Add an entry in the map 00068 _IdByName.insert (TMapStringUInt::value_type (name, (uint32)_TrackVector.size())); 00069 00070 // Add an entry in the array 00071 _TrackVector.push_back (pChannel); 00072 00073 // 00074 _BeginTimeTouched = _EndTimeTouched = _AnimLoopTouched= true; 00075 00076 } |
|
Say if all track of this animation loop. NB: If no tracks in the animation, return true Implements NL3D::UAnimation. Definition at line 192 of file animation.cpp. References _AnimLoop, _AnimLoopTouched, _TrackVector, NL3D_HAUTO_UI_ANIMATION, NL3D_MEM_ANIMATION, t, and uint.
00193 { 00194 NL3D_MEM_ANIMATION 00195 NL3D_HAUTO_UI_ANIMATION; 00196 00197 if(_AnimLoopTouched) 00198 { 00199 // Track count 00200 uint trackCount=_TrackVector.size(); 00201 00202 // Default is true 00203 _AnimLoop= true; 00204 00205 // Scan tracks keys 00206 for (uint t=0; t<trackCount; t++) 00207 { 00208 if (!_TrackVector[t]->getLoopMode()) 00209 { 00210 _AnimLoop= false; 00211 break; 00212 } 00213 } 00214 _AnimLoopTouched = false; 00215 } 00216 00217 return _AnimLoop; 00218 } |
|
Load an animation. This method will use CPath to find the good animation file. (*.anim). You should call releaseAnimation to delete the animation.
Definition at line 259 of file animation.cpp. References file, NL3D_HAUTO_UI_ANIMATION, and NL3D_MEM_ANIMATION.
00260 { 00261 NL3D_MEM_ANIMATION 00262 NL3D_HAUTO_UI_ANIMATION; 00263 00264 // Allocate an animation 00265 std::auto_ptr<CAnimation> anim (new CAnimation); 00266 00267 // Read it 00268 NLMISC::CIFile file; 00269 if (file.open ( NLMISC::CPath::lookup( sPath ) ) ) 00270 { 00271 // Serial the animation 00272 file.serial (*anim); 00273 00274 // Return pointer 00275 CAnimation *ret=anim.release (); 00276 00277 // Return the animation interface 00278 return ret; 00279 } 00280 else 00281 return NULL; 00282 } |
|
Get begin time of the animation.
Implements NL3D::UAnimation. Definition at line 125 of file animation.cpp. References _BeginTime, _BeginTimeTouched, _TrackVector, NL3D_HAUTO_UI_ANIMATION, NL3D_MEM_ANIMATION, t, NL3D::TAnimationTime, and uint. Referenced by NL3D::CAnimationPlaylist::getLocalTime(), NL3D::CAnimationPlaylist::setupMixer(), and NL3D::CMeshBaseInstance::traverseHrc().
00126 { 00127 NL3D_MEM_ANIMATION 00128 NL3D_HAUTO_UI_ANIMATION; 00129 00130 if (_BeginTimeTouched) 00131 { 00132 // Track count 00133 uint trackCount=_TrackVector.size(); 00134 00135 // Track count empty ? 00136 if (trackCount==0) 00137 return 0.f; 00138 00139 // Look for the lowest 00140 _BeginTime=_TrackVector[0]->getBeginTime (); 00141 00142 // Scan all keys 00143 for (uint t=1; t<trackCount; t++) 00144 { 00145 if (_TrackVector[t]->getBeginTime ()<_BeginTime) 00146 _BeginTime=_TrackVector[t]->getBeginTime (); 00147 } 00148 00149 _BeginTimeTouched = false; 00150 } 00151 00152 return _BeginTime; 00153 } |
|
Get end time of the animation.
Implements NL3D::UAnimation. Definition at line 157 of file animation.cpp. References _EndTime, _EndTimeTouched, _MinEndTime, _TrackVector, NL3D_HAUTO_UI_ANIMATION, NL3D_MEM_ANIMATION, t, NL3D::TAnimationTime, and uint. Referenced by NL3D::CLodCharacterBuilder::addAnim(), NL3D::CAnimationPlaylist::getLocalTime(), NL3D::CAnimationOptimizer::optimize(), NL3D::CAnimationPlaylist::setupMixer(), and NL3D::CMeshBaseInstance::traverseHrc().
00158 { 00159 NL3D_MEM_ANIMATION 00160 NL3D_HAUTO_UI_ANIMATION; 00161 00162 if (_EndTimeTouched) 00163 { 00164 // Track count 00165 uint trackCount=_TrackVector.size(); 00166 00167 // Track count empty ? 00168 if (trackCount==0) 00169 return 0.f; 00170 00171 // Look for the highest 00172 _EndTime=_TrackVector[0]->getEndTime (); 00173 00174 // Scan tracks keys 00175 for (uint t=1; t<trackCount; t++) 00176 { 00177 if (_TrackVector[t]->getEndTime ()>_EndTime) 00178 _EndTime=_TrackVector[t]->getEndTime (); 00179 } 00180 00181 // Check min end time 00182 if (_EndTime < _MinEndTime) 00183 _EndTime = _MinEndTime; 00184 00185 _EndTimeTouched = false; 00186 } 00187 00188 return _EndTime; 00189 } |
|
Get track with its name.
Definition at line 77 of file animation.h. References _IdByName, NL3D_MEM_ANIMATION, NotFound, and uint. Referenced by getTrackByName(), NL3D::CAnimationOptimizer::optimize(), and NL3D::CChannelMixer::refreshList().
00078 { 00079 NL3D_MEM_ANIMATION 00080 // Find an entry in the name/id map 00081 TMapStringUInt::const_iterator ite=_IdByName.find (name); 00082 00083 // Not found ? 00084 if (ite==_IdByName.end ()) 00085 // yes, error 00086 return NotFound; 00087 else 00088 // no, return track ID 00089 return (uint)ite->second; 00090 } |
|
Get a track pointer
Definition at line 114 of file animation.h. References _TrackVector, NL3D_MEM_ANIMATION, and uint.
00115 { 00116 NL3D_MEM_ANIMATION 00117 // Get the trackId-th track pointer 00118 return _TrackVector[trackId]; 00119 } |
|
Get a const track pointer
Definition at line 103 of file animation.h. References _TrackVector, NL3D_MEM_ANIMATION, and uint. Referenced by getTrackByName(), and NL3D::CAnimationOptimizer::optimize().
00104 { 00105 NL3D_MEM_ANIMATION 00106 // Get the trackId-th track pointer 00107 return _TrackVector[trackId]; 00108 } |
|
Get an animation track with its name. The track interface should be released with releaseTrack.
Implements NL3D::UAnimation. Definition at line 222 of file animation.cpp. References getIdTrackByName(), getTrack(), NL3D_HAUTO_UI_ANIMATION, NL3D_MEM_ANIMATION, and uint.
00223 { 00224 NL3D_MEM_ANIMATION 00225 NL3D_HAUTO_UI_ANIMATION; 00226 00227 // Get track id 00228 uint id=getIdTrackByName (name); 00229 00230 // Not found ? 00231 if (id==CAnimation::NotFound) 00232 // Error, return NULL 00233 return NULL; 00234 else 00235 // No error, return the track 00236 return getTrack (id); 00237 } |
|
Fill the set of string with the name of the channels.
Definition at line 108 of file animation.cpp. References _IdByName, and NL3D_MEM_ANIMATION. Referenced by NL3D::CAnimationSet::build(), NL3D::CAnimationOptimizer::optimize(), and NL3D::CScene::setAutomaticAnimationSet().
00109 { 00110 NL3D_MEM_ANIMATION 00111 // For each track name 00112 TMapStringUInt::const_iterator ite=_IdByName.begin(); 00113 while (ite!=_IdByName.end()) 00114 { 00115 // Add the name in the map 00116 setString.insert (ite->first); 00117 00118 // Next track 00119 ite++; 00120 } 00121 } |
|
Release an animation. This animation must have been created will createAnimation().
Definition at line 286 of file animation.cpp. References NL3D_HAUTO_UI_ANIMATION, and NL3D_MEM_ANIMATION.
00287 { 00288 NL3D_MEM_ANIMATION 00289 NL3D_HAUTO_UI_ANIMATION; 00290 00291 // Cast the pointer 00292 CAnimation* release=(CAnimation*)animation; 00293 00294 // Delete it 00295 delete release; 00296 } |
|
Relase a track interface.
Implements NL3D::UAnimation. Definition at line 241 of file animation.cpp. References NL3D_HAUTO_UI_ANIMATION, and NL3D_MEM_ANIMATION.
00242 { 00243 NL3D_MEM_ANIMATION 00244 NL3D_HAUTO_UI_ANIMATION; 00245 00246 // Nothing to do 00247 } |
|
Serial the template.
Definition at line 80 of file animation.cpp. References _IdByName, _MinEndTime, _TrackVector, NL3D_MEM_ANIMATION, NLMISC::IStream::serial(), NLMISC::IStream::serialCheck(), NLMISC::IStream::serialCont(), NLMISC::IStream::serialContPolyPtr(), NLMISC::IStream::serialVersion(), sint, and uint32.
00081 { 00082 NL3D_MEM_ANIMATION 00083 // Serial a header 00084 f.serialCheck ((uint32)'_LEN'); 00085 f.serialCheck ((uint32)'MINA'); 00086 00087 // Serial a version 00088 sint version=f.serialVersion (1); 00089 00090 // Serial the name 00091 f.serial (_Name); 00092 00093 // Serial the name/id map 00094 f.serialCont(_IdByName); 00095 00096 // Serial the vector 00097 f.serialContPolyPtr (_TrackVector); 00098 00099 // Serial the min end time 00100 if (version>=1) 00101 { 00102 f.serial (_MinEndTime); 00103 } 00104 } |
|
Set animation min end time.
Definition at line 251 of file animation.cpp. References _MinEndTime, NL3D_MEM_ANIMATION, and NL3D::TAnimationTime. Referenced by NL3D::CAnimationOptimizer::optimize().
00252 { 00253 NL3D_MEM_ANIMATION 00254 _MinEndTime = minEndTime; 00255 } |
|
Definition at line 168 of file animation.h. Referenced by allTrackLoop(). |
|
Definition at line 171 of file animation.h. Referenced by addTrack(), and allTrackLoop(). |
|
Definition at line 166 of file animation.h. Referenced by getBeginTime(). |
|
Definition at line 169 of file animation.h. Referenced by addTrack(), and getBeginTime(). |
|
Definition at line 167 of file animation.h. Referenced by getEndTime(). |
|
Definition at line 170 of file animation.h. Referenced by addTrack(), and getEndTime(). |
|
Definition at line 156 of file animation.h. Referenced by addTrack(), getIdTrackByName(), getTrackNames(), and serial(). |
|
Definition at line 162 of file animation.h. Referenced by getEndTime(), serial(), and setMinEndTime(). |
|
Definition at line 153 of file animation.h. |
|
Definition at line 159 of file animation.h. Referenced by addTrack(), allTrackLoop(), getBeginTime(), getEndTime(), getTrack(), serial(), and ~CAnimation(). |