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:
authorErwin Coumans <blender@erwincoumans.com>2007-01-21 03:56:10 +0300
committerErwin Coumans <blender@erwincoumans.com>2007-01-21 03:56:10 +0300
commit3917b1af5f475b231ca73ae6ec2cceb52a20d573 (patch)
tree01d9721f5f69ca75f2e6f3f31e042d808e347504 /source/gameengine/Ketsji/KX_IpoActuator.cpp
parent1ac4b1d5c366c2213497e10050c27090a7421af7 (diff)
bugfix for an incompatibility with ipo actuator in play mode, thanks Malachy for the fix.
Diffstat (limited to 'source/gameengine/Ketsji/KX_IpoActuator.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_IpoActuator.cpp35
1 files changed, 26 insertions, 9 deletions
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp
index 376d7f3172f..b72e29e955f 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.cpp
+++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp
@@ -119,6 +119,7 @@ KX_IpoActuator::KX_IpoActuator(SCA_IObject* gameobj,
m_type((IpoActType)acttype)
{
m_starttime = -2.0*fabs(m_endframe - m_startframe) - 1.0;
+ m_bIpoPlaying = false;
}
void KX_IpoActuator::SetStart(float starttime)
@@ -211,27 +212,43 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
}
m_events.clear();
- if (bNegativeEvent)
- RemoveAllEvents();
+ if (m_type != KX_ACT_IPO_PLAY)
+ {
+ if (bNegativeEvent)
+ RemoveAllEvents();
+ }
}
double start_smaller_then_end = ( m_startframe < m_endframe ? 1.0 : -1.0);
bool result=true;
- if (m_starttime < -2.0*start_smaller_then_end*(m_endframe - m_startframe))
- m_starttime = curtime - KX_KetsjiEngine::GetSuspendedDelta();
-
+ if (!bNegativeEvent)
+ {
+ if (m_starttime < -2.0*start_smaller_then_end*(m_endframe - m_startframe))
+ {
+ m_starttime = curtime - KX_KetsjiEngine::GetSuspendedDelta();
+ m_bIpoPlaying = true;
+ }
+ }
+
switch (m_type)
{
case KX_ACT_IPO_PLAY:
{
// Check if playing forwards. result = ! finished
- bNegativeEvent = false; // quick fix for message IPO issue
- if (start_smaller_then_end > 0.0)
- result = (m_localtime < m_endframe && !(m_localtime == m_startframe && bNegativeEvent));
+
+ if (!bNegativeEvent)
+ {
+ if (start_smaller_then_end > 0.0)
+ result = (m_localtime < m_endframe && !(m_localtime == m_startframe && bNegativeEvent));
+ else
+ result = (m_localtime > m_endframe && !(m_localtime == m_startframe && bNegativeEvent));
+ }
else
- result = (m_localtime > m_endframe && !(m_localtime == m_startframe && bNegativeEvent));
+ {
+ result = (m_bIpoPlaying && (m_localtime < m_endframe));
+ }
if (result)
{