# OgreAnimation.h

Go to the documentation of this file.

    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 (c) 2000-2005 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
    00026 #ifndef __Animation_H__
    00027 #define __Animation_H__
    00028
    00029 #include "OgrePrerequisites.h"
    00030 #include "OgreString.h"
    00031 #include "OgreIteratorWrappers.h"
    00032 #include "OgreAnimable.h"
    00033 #include "OgreAnimationTrack.h"
    00034
    00035
    00036 namespace Ogre {
    00037
    00048     class _OgreExport Animation
    00049     {
    00050
    00051     public:
    00053         enum InterpolationMode
    00054         {
    00056             IM_LINEAR,
    00058             IM_SPLINE
    00059         };
    00060
    00062         enum RotationInterpolationMode
    00063         {
    00067             RIM_LINEAR,
    00071             RIM_SPHERICAL
    00072         };
    00077         Animation(const String& name, Real length);
    00078         virtual ~Animation();
    00079
    00081         const String& getName(void) const;
    00082
    00084         Real getLength(void) const;
    00085
    00090         NodeAnimationTrack* createNodeTrack(unsigned short handle);
    00091
    00096         NumericAnimationTrack* createNumericTrack(unsigned short handle);
    00097
    00105         VertexAnimationTrack* createVertexTrack(unsigned short handle, VertexAnimationType animType);
    00106
    00115         NodeAnimationTrack* createNodeTrack(unsigned short handle, Node* node);
    00116
    00122         NumericAnimationTrack* createNumericTrack(unsigned short handle,
    00123             const AnimableValuePtr& anim);
    00124
    00131         VertexAnimationTrack* createVertexTrack(unsigned short handle,
    00132             VertexData* data, VertexAnimationType animType);
    00133
    00135         unsigned short getNumNodeTracks(void) const;
    00136
    00138         NodeAnimationTrack* getNodeTrack(unsigned short handle) const;
    00139
    00141         bool hasNodeTrack(unsigned short handle) const;
    00142
    00144         unsigned short getNumNumericTracks(void) const;
    00145
    00147         NumericAnimationTrack* getNumericTrack(unsigned short handle) const;
    00148
    00150         bool hasNumericTrack(unsigned short handle) const;
    00151
    00153         unsigned short getNumVertexTracks(void) const;
    00154
    00156         VertexAnimationTrack* getVertexTrack(unsigned short handle) const;
    00157
    00159         bool hasVertexTrack(unsigned short handle) const;
    00160
    00162         void destroyNodeTrack(unsigned short handle);
    00163
    00165         void destroyNumericTrack(unsigned short handle);
    00166
    00168         void destroyVertexTrack(unsigned short handle);
    00169
    00171         void destroyAllTracks(void);
    00172
    00174         void destroyAllNodeTracks(void);
    00176         void destroyAllNumericTracks(void);
    00178         void destroyAllVertexTracks(void);
    00179
    00190         void apply(Real timePos, Real weight = 1.0, bool accumulate = false,
    00191             Real scale = 1.0f);
    00192
    00203         void apply(Skeleton* skeleton, Real timePos, Real weight = 1.0,
    00204             bool accumulate = false, Real scale = 1.0f);
    00205
    00215         void apply(Entity* entity, Real timePos, Real weight, bool software,
    00216             bool hardware);
    00217
    00230         void setInterpolationMode(InterpolationMode im);
    00231
    00236         InterpolationMode getInterpolationMode(void) const;
    00247         void setRotationInterpolationMode(RotationInterpolationMode im);
    00248
    00253         RotationInterpolationMode getRotationInterpolationMode(void) const;
    00254
    00255         // Methods for setting the defaults
    00262         static void setDefaultInterpolationMode(InterpolationMode im);
    00263
    00265         static InterpolationMode getDefaultInterpolationMode(void);
    00266
    00273         static void setDefaultRotationInterpolationMode(RotationInterpolationMode im);
    00274
    00276         static RotationInterpolationMode getDefaultRotationInterpolationMode(void);
    00277
    00278         typedef std::map<unsigned short, NodeAnimationTrack*> NodeTrackList;
    00279         typedef ConstMapIterator<NodeTrackList> NodeTrackIterator;
    00280
    00281         typedef std::map<unsigned short, NumericAnimationTrack*> NumericTrackList;
    00282         typedef ConstMapIterator<NumericTrackList> NumericTrackIterator;
    00283
    00284         typedef std::map<unsigned short, VertexAnimationTrack*> VertexTrackList;
    00285         typedef ConstMapIterator<VertexTrackList> VertexTrackIterator;
    00286
    00288         const NodeTrackList& _getNodeTrackList(void) const;
    00289
    00291         NodeTrackIterator getNodeTrackIterator(void) const
    00292         { return NodeTrackIterator(mNodeTrackList.begin(), mNodeTrackList.end()); }
    00293
    00295         const NumericTrackList& _getNumericTrackList(void) const;
    00296
    00298         NumericTrackIterator getNumericTrackIterator(void) const
    00299         { return NumericTrackIterator(mNumericTrackList.begin(), mNumericTrackList.end()); }
    00300
    00302         const VertexTrackList& _getVertexTrackList(void) const;
    00303
    00305         VertexTrackIterator getVertexTrackIterator(void) const
    00306         { return VertexTrackIterator(mVertexTrackList.begin(), mVertexTrackList.end()); }
    00307
    00317         void optimise(void);
    00318
    00325         Animation* clone(const String& newName) const;
    00326
    00327
    00328
    00329     protected:
    00331         NodeTrackList mNodeTrackList;
    00333         NumericTrackList mNumericTrackList;
    00335         VertexTrackList mVertexTrackList;
    00336         String mName;
    00337
    00338         Real mLength;
    00339
    00340         InterpolationMode mInterpolationMode;
    00341         RotationInterpolationMode mRotationInterpolationMode;
    00342
    00343         static InterpolationMode msDefaultInterpolationMode;
    00344         static RotationInterpolationMode msDefaultRotationInterpolationMode;
    00345
    00346         void optimiseNodeTracks(void);
    00347         void optimiseVertexTracks(void);
    00348
    00349
    00350     };
    00351
    00352
    00353 }
    00354
    00355
    00356 #endif
    00357

Copyright © 2000-2005 by The OGRE Team
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Sep 17 15:39:07 2006