00001 /* 00002 ----------------------------------------------------------------------------- 00003 This source file is part of OGRE 00004 (Object-oriented Graphics Rendering Engine) 00005 For the latest info, see http://www.ogre3d.org/ 00006 00007 Copyright © 2000-2002 The OGRE Team 00008 Also see acknowledgements in Readme.html 00009 00010 This program is free software; you can redistribute it and/or modify it under 00011 the terms of the GNU Lesser General Public License as published by the Free Software 00012 Foundation; either version 2 of the License, or (at your option) any later 00013 version. 00014 00015 This program is distributed in the hope that it will be useful, but WITHOUT 00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License along with 00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple 00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to 00022 http://www.gnu.org/copyleft/lesser.txt. 00023 ----------------------------------------------------------------------------- 00024 */ 00025 #include "OgreStableHeaders.h" 00026 #include "OgreAnimation.h" 00027 #include "OgreKeyFrame.h" 00028 #include "OgreAnimationTrack.h" 00029 #include "OgreException.h" 00030 #include "OgreSkeleton.h" 00031 #include "OgreBone.h" 00032 00033 namespace Ogre { 00034 00035 Animation::InterpolationMode Animation::msDefaultInterpolationMode = Animation::IM_LINEAR; 00036 Animation::RotationInterpolationMode 00037 Animation::msDefaultRotationInterpolationMode = Animation::RIM_LINEAR; 00038 //--------------------------------------------------------------------- 00039 Animation::Animation(const String& name, Real length) : mName(name), mLength(length) 00040 { 00041 mInterpolationMode = Animation::msDefaultInterpolationMode; 00042 mRotationInterpolationMode = Animation::msDefaultRotationInterpolationMode; 00043 } 00044 //--------------------------------------------------------------------- 00045 Animation::~Animation() 00046 { 00047 destroyAllTracks(); 00048 } 00049 //--------------------------------------------------------------------- 00050 Real Animation::getLength(void) const 00051 { 00052 return mLength; 00053 } 00054 //--------------------------------------------------------------------- 00055 AnimationTrack* Animation::createTrack(unsigned short handle) 00056 { 00057 AnimationTrack* ret; 00058 00059 ret = new AnimationTrack(this); 00060 00061 mTrackList[handle] = ret; 00062 return ret; 00063 } 00064 //--------------------------------------------------------------------- 00065 AnimationTrack* Animation::createTrack(unsigned short handle, Node* node) 00066 { 00067 AnimationTrack* ret = createTrack(handle); 00068 00069 ret->setAssociatedNode(node); 00070 00071 return ret; 00072 } 00073 //--------------------------------------------------------------------- 00074 unsigned short Animation::getNumTracks(void) const 00075 { 00076 return (unsigned short)mTrackList.size(); 00077 } 00078 //--------------------------------------------------------------------- 00079 AnimationTrack* Animation::getTrack(unsigned short handle) const 00080 { 00081 TrackList::const_iterator i = mTrackList.find(handle); 00082 00083 if (i == mTrackList.end()) 00084 { 00085 Except(Exception::ERR_ITEM_NOT_FOUND, 00086 "Cannot find track with the specified handle", 00087 "Animation::getTrackByHandle"); 00088 } 00089 00090 return i->second; 00091 00092 } 00093 //--------------------------------------------------------------------- 00094 void Animation::destroyTrack(unsigned short handle) 00095 { 00096 TrackList::iterator i = mTrackList.find(handle); 00097 00098 delete i->second; 00099 00100 mTrackList.erase(i); 00101 } 00102 //--------------------------------------------------------------------- 00103 void Animation::destroyAllTracks(void) 00104 { 00105 TrackList::iterator i; 00106 for (i = mTrackList.begin(); i != mTrackList.end(); ++i) 00107 { 00108 delete i->second; 00109 } 00110 mTrackList.clear(); 00111 } 00112 //--------------------------------------------------------------------- 00113 const String& Animation::getName(void) const 00114 { 00115 return mName; 00116 } 00117 //--------------------------------------------------------------------- 00118 void Animation::apply(Real timePos, Real weight, bool accumulate) 00119 { 00120 TrackList::iterator i; 00121 for (i = mTrackList.begin(); i != mTrackList.end(); ++i) 00122 { 00123 i->second->apply(timePos, weight, accumulate); 00124 } 00125 00126 00127 } 00128 //--------------------------------------------------------------------- 00129 void Animation::apply(Skeleton* skel, Real timePos, Real weight, bool accumulate) 00130 { 00131 TrackList::iterator i; 00132 for (i = mTrackList.begin(); i != mTrackList.end(); ++i) 00133 { 00134 // get bone to apply to 00135 Bone* b = skel->getBone(i->first); 00136 i->second->applyToNode(b, timePos, weight, accumulate); 00137 } 00138 00139 00140 } 00141 //--------------------------------------------------------------------- 00142 void Animation::setInterpolationMode(InterpolationMode im) 00143 { 00144 mInterpolationMode = im; 00145 } 00146 //--------------------------------------------------------------------- 00147 Animation::InterpolationMode Animation::getInterpolationMode(void) const 00148 { 00149 return mInterpolationMode; 00150 } 00151 //--------------------------------------------------------------------- 00152 void Animation::setDefaultInterpolationMode(InterpolationMode im) 00153 { 00154 msDefaultInterpolationMode = im; 00155 } 00156 //--------------------------------------------------------------------- 00157 Animation::InterpolationMode Animation::getDefaultInterpolationMode(void) 00158 { 00159 return msDefaultInterpolationMode; 00160 } 00161 //--------------------------------------------------------------------- 00162 const Animation::TrackList& Animation::_getTrackList(void) const 00163 { 00164 return mTrackList; 00165 00166 } 00167 //--------------------------------------------------------------------- 00168 void Animation::setRotationInterpolationMode(RotationInterpolationMode im) 00169 { 00170 mRotationInterpolationMode = im; 00171 } 00172 //--------------------------------------------------------------------- 00173 Animation::RotationInterpolationMode Animation::getRotationInterpolationMode(void) const 00174 { 00175 return mRotationInterpolationMode; 00176 } 00177 //--------------------------------------------------------------------- 00178 void Animation::setDefaultRotationInterpolationMode(RotationInterpolationMode im) 00179 { 00180 msDefaultRotationInterpolationMode = im; 00181 } 00182 //--------------------------------------------------------------------- 00183 Animation::RotationInterpolationMode Animation::getDefaultRotationInterpolationMode(void) 00184 { 00185 return msDefaultRotationInterpolationMode; 00186 } 00187 00188 } 00189 00190
Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:14 2004