diff options
author | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-12-05 05:50:57 +0300 |
---|---|---|
committer | Kester Maddock <Christopher.Maddock.1@uni.massey.ac.nz> | 2004-12-05 05:50:57 +0300 |
commit | ef971de66d946d69114c817b4340b82316c4d108 (patch) | |
tree | ea796d89d8acfa32bcaf3e686a1f40e1a8340c26 /source/gameengine/Ketsji/KX_IpoActuator.cpp | |
parent | 5d04d876f724626c36e5feba2dd6c16a3049243b (diff) |
Fix Action & IPO actuators: (Bugs #1921 & #1920)
Diffstat (limited to 'source/gameengine/Ketsji/KX_IpoActuator.cpp')
-rw-r--r-- | source/gameengine/Ketsji/KX_IpoActuator.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp index ea9fe8554cc..37c0578987c 100644 --- a/source/gameengine/Ketsji/KX_IpoActuator.cpp +++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp @@ -112,14 +112,13 @@ KX_IpoActuator::KX_IpoActuator(SCA_IObject* gameobj, m_endframe(endtime), m_recurse(recurse), m_localtime(starttime), - m_starttime(-1.0), m_direction(1), m_propname(propname), m_ipo_as_force(ipo_as_force), m_force_ipo_local(force_ipo_local), m_type((IpoActType)acttype) { - // intentionally empty + m_starttime = -2.0*fabs(m_endframe - m_startframe) - 1.0; } void KX_IpoActuator::SetStart(float starttime) @@ -189,10 +188,11 @@ bool KX_IpoActuator::Update(double curtime, bool frame) // result = true if animation has to be continued, false if animation stops // maybe there are events for us in the queue ! bool bNegativeEvent = false; - int numevents = m_events.size(); + int numevents = 0; if (frame) { + numevents = m_events.size(); for (vector<CValue*>::iterator i=m_events.end(); !(i==m_events.begin());) { --i; @@ -204,15 +204,13 @@ bool KX_IpoActuator::Update(double curtime, bool frame) m_events.clear(); if (bNegativeEvent) - { RemoveAllEvents(); - } } double start_smaller_then_end = ( m_startframe < m_endframe ? 1.0 : -1.0); bool result=true; - if (m_starttime < 0.0) + if (m_starttime < -2.0*start_smaller_then_end*(m_endframe - m_startframe)) m_starttime = curtime; switch (m_type) @@ -273,7 +271,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame) } case KX_ACT_IPO_FLIPPER: { - result = true; + result = !(bNegativeEvent && (m_localtime == m_startframe)); if (numevents) { if (bNegativeEvent) @@ -404,7 +402,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame) } if (!result && m_type != KX_ACT_IPO_LOOPSTOP) - m_starttime = -1.0; + m_starttime = -2.0*start_smaller_then_end*(m_endframe - m_startframe) - 1.0; return result; } |