[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41239] trunk/blender/source/gameengine: BGE Action Actuator fixes:
Mitchell Stokes
mogurijin at gmail.com
Mon Oct 24 09:25:38 CEST 2011
Revision: 41239
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41239
Author: moguri
Date: 2011-10-24 07:25:34 +0000 (Mon, 24 Oct 2011)
Log Message:
-----------
BGE Action Actuator fixes:
* Ping pong now has the same behavior as 2.59.
* Setting the frame on a animation playing in reverse now works correctly
* The frames for continuous were a frame or so behind, this is now fixed.
Modified Paths:
--------------
trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
trunk/blender/source/gameengine/Ketsji/BL_Action.cpp
Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp 2011-10-24 06:57:53 UTC (rev 41238)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp 2011-10-24 07:25:34 UTC (rev 41239)
@@ -158,6 +158,8 @@
m_starttime = curtime;
+ m_flag ^= ACT_FLAG_REVERSE;
+
break;
}
}
@@ -206,9 +208,8 @@
if (m_flag & ACT_FLAG_REVERSE)
{
- m_localtime = start;
- start = end;
- end = m_localtime;
+ start = m_endframe;
+ end = m_startframe;
}
break;
@@ -236,6 +237,12 @@
RemoveAllEvents();
}
+ if (bUseContinue && (m_flag & ACT_FLAG_ACTIVE))
+ {
+ m_localtime = obj->GetActionFrame(m_layer);
+ ResetStartTime(curtime);
+ }
+
if (m_flag & ACT_FLAG_ATTEMPT_PLAY)
SetLocalTime(curtime);
@@ -257,6 +264,9 @@
{
m_flag &= ~ACT_FLAG_ACTIVE;
m_flag &= ~ACT_FLAG_ATTEMPT_PLAY;
+
+ if (m_playtype == ACT_ACTION_PINGPONG)
+ m_flag ^= ACT_FLAG_REVERSE;
return false;
}
@@ -266,7 +276,7 @@
if (bPositiveEvent || (m_flag & ACT_FLAG_ATTEMPT_PLAY && !(m_flag & ACT_FLAG_ACTIVE)))
{
- if (bPositiveEvent)
+ if (bPositiveEvent && m_playtype == ACT_ACTION_PLAY)
{
if (obj->IsActionDone(m_layer))
m_localtime = start;
@@ -279,7 +289,7 @@
if (bUseContinue)
obj->SetActionFrame(m_layer, m_localtime);
- if (m_playtype == ACT_ACTION_PLAY)
+ if (m_playtype == ACT_ACTION_PLAY || m_playtype == ACT_ACTION_PINGPONG)
m_flag |= ACT_FLAG_PLAY_END;
else
m_flag &= ~ACT_FLAG_PLAY_END;
@@ -307,9 +317,6 @@
// We're done
m_flag &= ~ACT_FLAG_ACTIVE;
return false;
- case ACT_ACTION_PINGPONG:
- m_flag ^= ACT_FLAG_REVERSE;
- // Now fallthrough to LOOP_END code
case ACT_ACTION_LOOP_END:
// Convert into a play and let it finish
obj->SetPlayMode(m_layer, BL_Action::ACT_MODE_PLAY);
@@ -327,12 +334,6 @@
break;
}
}
-
- if (bUseContinue && (m_flag & ACT_FLAG_ACTIVE))
- {
- m_localtime = obj->GetActionFrame(m_layer);
- ResetStartTime(curtime);
- }
return true;
}
Modified: trunk/blender/source/gameengine/Ketsji/BL_Action.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/BL_Action.cpp 2011-10-24 06:57:53 UTC (rev 41238)
+++ trunk/blender/source/gameengine/Ketsji/BL_Action.cpp 2011-10-24 07:25:34 UTC (rev 41239)
@@ -279,7 +279,7 @@
void BL_Action::ResetStartTime(float curtime)
{
- float dt = m_localtime - m_startframe;
+ float dt = (m_localtime > m_startframe) ? m_localtime - m_startframe : m_startframe - m_localtime;
m_starttime = curtime - dt / (KX_KetsjiEngine::GetAnimFrameRate()*m_speed);
SetLocalTime(curtime);
More information about the Bf-blender-cvs
mailing list