Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2011-11-24 03:29:36 +0400
committerMitchell Stokes <mogurijin@gmail.com>2011-11-24 03:29:36 +0400
commitf94614d791b1381bc4751ad5194680cec81a4b57 (patch)
tree6958e2d14483f07827397853752444890ba28857 /source/gameengine/Converter
parent59077feff1e329a81eb4c3981c8a33143fdc5353 (diff)
BGE Animations: Getting the Action Actuator to behave better with pulse mode (on the sensor) and continuous enabled.
Diffstat (limited to 'source/gameengine/Converter')
-rw-r--r--source/gameengine/Converter/BL_ActionActuator.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp
index abc45293542..1bfe5945bbc 100644
--- a/source/gameengine/Converter/BL_ActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ActionActuator.cpp
@@ -144,6 +144,7 @@ void BL_ActionActuator::SetLocalTime(float curtime)
case ACT_ACTION_PLAY:
// Clamp
m_localtime = m_endframe;
+ ((KX_GameObject*)GetParent())->StopAction(m_layer);
break;
case ACT_ACTION_LOOP_END:
// Put the time back to the beginning
@@ -237,14 +238,14 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
RemoveAllEvents();
}
+ // "Active" actions need to keep updating their current frame
if (bUseContinue && (m_flag & ACT_FLAG_ACTIVE))
- {
m_localtime = obj->GetActionFrame(m_layer);
- ResetStartTime(curtime);
- }
if (m_flag & ACT_FLAG_ATTEMPT_PLAY)
SetLocalTime(curtime);
+ else
+ ResetStartTime(curtime);
// Handle a frame property if it's defined
if ((m_flag & ACT_FLAG_ACTIVE) && m_framepropname[0] != 0)
@@ -299,6 +300,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
else if ((m_flag & ACT_FLAG_ACTIVE) && bNegativeEvent)
{
m_flag &= ~ACT_FLAG_ATTEMPT_PLAY;
+ m_localtime = obj->GetActionFrame(m_layer);
bAction *curr_action = obj->GetCurrentAction(m_layer);
if (curr_action && curr_action != m_action)
{