BGE Animations: Beginning work on the new action actuator.

* Converted BL_ActionActuator::Update() to use the new action api (still just armatures)
  * Not all of the functionality of the old Update() have been ported (Lood end, continued animation, etc)
  * Things are still pretty messy. Once have things more flushed out, I'll start stripping more of the old actuator out.
This commit is contained in:
Mitchell Stokes 2011-06-01 05:48:37 +00:00
parent 54a37ba855
commit 38d87ee48e
2 changed files with 50 additions and 0 deletions

@ -36,6 +36,7 @@
#include "BL_ActionActuator.h"
#include "BL_ArmatureObject.h"
#include "BL_SkinDeformer.h"
#include "BL_Action.h"
#include "KX_GameObject.h"
#include "STR_HashedString.h"
#include "MEM_guardedalloc.h"
@ -143,7 +144,53 @@ void BL_ActionActuator::SetLocalTime(float curtime)
m_localtime = m_endframe - delta_time;
}
bool BL_ActionActuator::Update(double curtime, bool frame)
{
bool bNegativeEvent = false;
bool bPositiveEvent = false;
KX_GameObject *obj = (KX_GameObject*)GetParent();
short play_mode = BL_Action::ACT_MODE_PLAY;
// Don't do anything if we're not "active"
if (!frame)
return true;
// Convert playmode
if (m_playtype == ACT_ACTION_LOOP_END)
play_mode = BL_Action::ACT_MODE_LOOP;
else if (m_playtype == ACT_ACTION_LOOP_STOP)
play_mode = BL_Action::ACT_MODE_LOOP;
else if (m_playtype == ACT_ACTION_PINGPONG)
play_mode = BL_Action::ACT_MODE_PING_PONG;
// Handle events
bNegativeEvent = m_negevent;
bPositiveEvent = m_posevent;
RemoveAllEvents();
if (!m_is_going && bPositiveEvent)
{
m_is_going = true;
obj->PlayAction(m_action->id.name+2, m_startframe, m_endframe, 0, m_blendin, play_mode);
}
else if (m_is_going && bNegativeEvent)
{
m_is_going = false;
obj->StopAction(0);
return false;
}
// Handle a finished animation
if (m_is_going && obj->IsActionDone(0))
{
return false;
}
return true;
}
#if 0 // Kept around as reference for now
bool BL_ActionActuator::Update(double curtime, bool frame)
{
bool bNegativeEvent = false;
@ -449,6 +496,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
}
return keepgoing;
};
#endif
#ifdef WITH_PYTHON

@ -70,6 +70,7 @@ public:
m_playtype(playtype),
m_priority(priority),
m_end_reset(end_reset),
m_is_going(false),
m_pose(NULL),
m_blendpose(NULL),
m_userpose(NULL),
@ -163,6 +164,7 @@ protected:
short m_playtype;
short m_priority;
bool m_end_reset;
bool m_is_going;
struct bPose* m_pose;
struct bPose* m_blendpose;
struct bPose* m_userpose;