/* -*-c++-*- * Copyright (C) 2008 Cedric Pinson * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #ifndef OSGANIMATION_ANIMATION_H #define OSGANIMATION_ANIMATION_H #include #include #include #include #include #include namespace osgAnimation { class OSGANIMATION_EXPORT Animation : public virtual osg::Object { public: META_Object(osgAnimation, Animation) Animation() : _duration(0), _weight(0), _startTime(0), _playmode(LOOP) {} Animation(const osgAnimation::Animation& anim, const osg::CopyOp&); enum PlayMode { ONCE, STAY, LOOP, PPONG }; // addChannel insert the channel and call the computeDuration function void addChannel (Channel* pChannel); /** Those accessors let you add and remove channels * if you modify something that can change the duration * you are supposed to call computeDuration or setDuration */ ChannelList& getChannels(); const ChannelList& getChannels() const; /** Change the duration of animation * then evaluate the animation in the range 0-duration * it stretch the animation in time. * see computeDuration too */ void setDuration(double duration); /** Compute duration from channel and keyframes * if the duration is not specified you should * call this method before using it */ void computeDuration(); float getDuration() const; void setWeight (float weight); float getWeight() const; bool update (float time); void resetTargets(); void setPlaymode (PlayMode mode) { _playmode = mode; } void setStartTime(float time) { _startTime = time;} float getStartTime() const { return _startTime;} protected: double computeDurationFromChannels() const; ~Animation() {} std::string _name; double _duration; double _originalDuration; float _weight; float _startTime; PlayMode _playmode; ChannelList _channels; }; typedef std::vector > AnimationList; typedef std::map > AnimationMap; } #endif