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:
authorJean-Luc Peurière <jlp@nerim.net>2005-12-18 22:10:26 +0300
committerJean-Luc Peurière <jlp@nerim.net>2005-12-18 22:10:26 +0300
commit63d0e03bcfd6a9d1e0ce800d2f7d797e336f7f21 (patch)
treee530c810698df762d41b2eaa8c9a22225a69d509 /source/gameengine/Ketsji/KX_IpoActuator.cpp
parentc33831ac1632ac0a0e42e174035dd0d0ea15a087 (diff)
applying Volker Mische engine patch
correct bug #3594
Diffstat (limited to 'source/gameengine/Ketsji/KX_IpoActuator.cpp')
-rw-r--r--source/gameengine/Ketsji/KX_IpoActuator.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp
index df4a5047ef1..1b6b92c790d 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.cpp
+++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp
@@ -163,7 +163,8 @@ bool KX_IpoActuator::ClampLocalTime()
void KX_IpoActuator::SetStartTime(float curtime)
{
float direction = m_startframe < m_endframe ? 1.0 : -1.0;
-
+
+ curtime = curtime - KX_KetsjiEngine::GetSuspendedDelta();
if (m_direction > 0)
m_starttime = curtime - direction*(m_localtime - m_startframe)/KX_FIXED_FRAME_PER_SEC;
else
@@ -172,7 +173,14 @@ void KX_IpoActuator::SetStartTime(float curtime)
void KX_IpoActuator::SetLocalTime(float curtime)
{
- float delta_time = (curtime - m_starttime)*KX_FIXED_FRAME_PER_SEC;
+ float delta_time = ((curtime - m_starttime) - KX_KetsjiEngine::GetSuspendedDelta())*KX_FIXED_FRAME_PER_SEC;
+
+ // negative delta_time is caused by floating point inaccuracy
+ // perhaps the inaccuracy could be reduced a bit
+ if ((m_localtime==m_startframe || m_localtime==m_endframe) && delta_time<0.0)
+ {
+ delta_time = 0.0;
+ }
if (m_endframe < m_startframe)
delta_time = -delta_time;
@@ -211,7 +219,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
bool result=true;
if (m_starttime < -2.0*start_smaller_then_end*(m_endframe - m_startframe))
- m_starttime = curtime;
+ m_starttime = curtime - KX_KetsjiEngine::GetSuspendedDelta();
switch (m_type)
{
@@ -241,7 +249,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
} else
{
m_localtime=m_startframe;
- m_starttime=curtime;
+ SetStartTime(curtime);
m_direction=1;
}
break;