From 51579cf43643cdca488b2766005c4e5aa1436c98 Mon Sep 17 00:00:00 2001 From: Cedric Pinson Date: Wed, 24 Jun 2009 10:10:09 +0000 Subject: [PATCH] From Cedric Pinson, Fix the drop of the first frame of action when adding action with addActionNow\nReport stats only for active animations\nAdd priority to RunAction callback --- include/osgAnimation/ActionCallback | 6 ++++-- src/osgAnimation/ActionCallback.cpp | 2 +- src/osgAnimation/StatsVisitor.cpp | 10 ---------- src/osgAnimation/Timeline.cpp | 2 +- 4 files changed, 6 insertions(+), 14 deletions(-) diff --git a/include/osgAnimation/ActionCallback b/include/osgAnimation/ActionCallback index 1bb082e5f..8af140ab6 100644 --- a/include/osgAnimation/ActionCallback +++ b/include/osgAnimation/ActionCallback @@ -15,20 +15,22 @@ #ifndef OSGANIMATION_ACTION_CALLBACK_H #define OSGANIMATION_ACTION_CALLBACK_H +#include #include namespace osgAnimation { /** Callback used to run new action on the timeline.*/ - class RunAction : public Action::Callback + class OSGANIMATION_EXPORT RunAction : public Action::Callback { public: - RunAction(Action* a) : _action(a) {} + RunAction(Action* a, int priority = 0) : _action(a), _priority(priority) {} virtual void operator()(Action* action, ActionVisitor* visitor); protected: osg::ref_ptr _action; + int _priority; }; diff --git a/src/osgAnimation/ActionCallback.cpp b/src/osgAnimation/ActionCallback.cpp index 611c224b7..2e4f2a23e 100644 --- a/src/osgAnimation/ActionCallback.cpp +++ b/src/osgAnimation/ActionCallback.cpp @@ -18,6 +18,6 @@ void osgAnimation::RunAction::operator()(Action* action, ActionVisitor* visitor) { Timeline* tm = visitor->getCurrentTimeline(); - tm->addActionNow(_action.get()); + tm->addActionNow(_action.get(), _priority); } diff --git a/src/osgAnimation/StatsVisitor.cpp b/src/osgAnimation/StatsVisitor.cpp index 513e1a906..b7503087d 100644 --- a/src/osgAnimation/StatsVisitor.cpp +++ b/src/osgAnimation/StatsVisitor.cpp @@ -32,8 +32,6 @@ void osgAnimation::StatsActionVisitor::apply(Timeline& tm) void osgAnimation::StatsActionVisitor::apply(Action& action) { - _channels.push_back(action.getName()); - _stats->setAttribute(_frame,action.getName(),0); if (isActive()) { _channels.push_back(action.getName()); @@ -43,8 +41,6 @@ void osgAnimation::StatsActionVisitor::apply(Action& action) void osgAnimation::StatsActionVisitor::apply(BlendIn& action) { - _channels.push_back(action.getName()); - _stats->setAttribute(_frame,action.getName(),0); if (isActive()) { _channels.push_back(action.getName()); @@ -54,8 +50,6 @@ void osgAnimation::StatsActionVisitor::apply(BlendIn& action) void osgAnimation::StatsActionVisitor::apply(BlendOut& action) { - _channels.push_back(action.getName()); - _stats->setAttribute(_frame,action.getName(),0); if (isActive()) { _channels.push_back(action.getName()); @@ -65,8 +59,6 @@ void osgAnimation::StatsActionVisitor::apply(BlendOut& action) void osgAnimation::StatsActionVisitor::apply(ActionAnimation& action) { - _channels.push_back(action.getName()); - _stats->setAttribute(_frame,action.getName(),0); if (isActive()) { _channels.push_back(action.getName()); @@ -76,8 +68,6 @@ void osgAnimation::StatsActionVisitor::apply(ActionAnimation& action) void osgAnimation::StatsActionVisitor::apply(StripAnimation& action) { - _channels.push_back(action.getName()); - _stats->setAttribute(_frame,action.getName(),0); if (isActive()) { _channels.push_back(action.getName()); diff --git a/src/osgAnimation/Timeline.cpp b/src/osgAnimation/Timeline.cpp index 6027b176d..43367086e 100644 --- a/src/osgAnimation/Timeline.cpp +++ b/src/osgAnimation/Timeline.cpp @@ -161,7 +161,7 @@ void osgAnimation::Timeline::addActionAt(double t, Action* action, int priority) void osgAnimation::Timeline::addActionNow(Action* action, int priority) { - addActionAt(getCurrentFrame(), action, priority); + addActionAt(getCurrentFrame()+1, action, priority); } void osgAnimation::Timeline::processPendingOperation()