15 #ifndef OSGANIMATION_ACTION_H
16 #define OSGANIMATION_ACTION_H
18 #include <osgAnimation/Export>
19 #include <osgAnimation/Animation>
20 #include <osgAnimation/ActionVisitor>
21 #include <osgAnimation/FrameAction>
24 #define META_Action(library,name) \
25 virtual osg::Object* cloneType() const { return new name (); } \
26 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new name (*this,copyop); } \
27 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const name *>(obj)!=NULL; } \
28 virtual const char* className() const { return #name; } \
29 virtual const char* libraryName() const { return #library; } \
30 virtual void accept(osgAnimation::ActionVisitor& nv) { nv.apply(*this); } \
45 _nestedCallback(nc._nestedCallback) {}
55 if (_nestedCallback.valid())
56 _nestedCallback->addNestedCallback(callback);
58 _nestedCallback = callback;
67 if (_nestedCallback.get() == cb)
68 _nestedCallback = _nestedCallback->getNestedCallback();
69 else if (_nestedCallback.valid())
70 _nestedCallback->removeCallback(cb);
87 setCallback(static_cast<unsigned int>(floor(when*_fps)), callback);
92 if (_framesCallback[frame].valid())
93 _framesCallback[frame]->addNestedCallback(callback);
95 _framesCallback[frame] = callback;
99 if (_framesCallback.find(frame) == _framesCallback.end())
101 return _framesCallback[frame].get();
104 void removeCallback(Callback*);
106 Callback* getFrameCallback(
unsigned int frame);
107 Callback* getFrameCallback(
double time);
111 void setDuration(
double duration) { _numberFrame =
static_cast<unsigned int>(floor(duration * _fps)); }
116 virtual void setLoop(
unsigned int nb) { _loop = nb; }
117 virtual unsigned int getLoop()
const {
return _loop;}
121 bool evaluateFrame(
unsigned int frame,
unsigned int& resultframe,
unsigned int& nbloop );
#define OSGANIMATION_EXPORT
void setCallback(unsigned int frame, Callback *callback)
Callback * getCallback(unsigned int frame)
unsigned int getFramesPerSecond() const
void addNestedCallback(Callback *callback)
void setCallback(double when, Callback *callback)
void setDuration(double duration)
virtual void traverse(ActionVisitor &)
Callback(const Callback &nc, const osg::CopyOp &)
osg::ref_ptr< Callback > _nestedCallback
void setNumFrames(unsigned int numFrames)
unsigned int getNumFrames() const
unsigned int _numberFrame
double getDuration() const
void removeCallback(Callback *cb)
virtual void operator()(Action *, osgAnimation::ActionVisitor *)
#define META_Object(library, name)
FrameCallback _framesCallback
virtual void setLoop(unsigned int nb)
Callback * getNestedCallback()
virtual unsigned int getLoop() const
std::map< unsigned int, osg::ref_ptr< Callback > > FrameCallback
#define META_Action(library, name)