Revision: 37778
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37778
Author:   moguri
Date:     2011-06-23 23:19:39 +0000 (Thu, 23 Jun 2011)
Log Message:
-----------
BGE Animations: Making BL_Action::SetFrame() not so dependent on timing. This 
should smooth out things like setActionFrame().

Modified Paths:
--------------
    branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp
    branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.h

Modified: branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp     
2011-06-23 23:18:53 UTC (rev 37777)
+++ branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.cpp     
2011-06-23 23:19:39 UTC (rev 37778)
@@ -66,7 +66,8 @@
        m_blendpose(NULL),
        m_sg_contr(NULL),
        m_ptrrna(NULL),
-       m_done(true)
+       m_done(true),
+       m_bcalc_local_time(true)
 {
        if (m_obj->GetGameObjectType() == SCA_IObject::OBJ_ARMATURE)
        {
@@ -184,6 +185,10 @@
        else if (frame > max(m_startframe, m_endframe))
                frame = max(m_startframe, m_endframe);
 
+       m_localtime = frame;
+       m_bcalc_local_time = false;
+
+#if 0
        // We don't set m_localtime directly since it's recalculated
        // in the next update. So, we modify the value (m_starttime) 
        // used to calculate m_localtime the next time SetLocalTime() is called.
@@ -194,6 +199,7 @@
                dt = -dt;
 
        m_starttime -= dt / (KX_KetsjiEngine::GetAnimFrameRate()*m_speed);
+#endif
 }
 
 void BL_Action::SetLocalTime(float curtime)
@@ -212,10 +218,17 @@
        if (m_done)
                return;
 
-       curtime -= KX_KetsjiEngine::GetSuspendedDelta();
+       // We only want to calculate the current time we weren't given a frame 
(e.g., from SetFrame())
+       if (m_bcalc_local_time)
+       {
+               curtime -= KX_KetsjiEngine::GetSuspendedDelta();
+               SetLocalTime(curtime);
+       }
+       else
+       {
+               m_bcalc_local_time = true;
+       }
 
-       SetLocalTime(curtime);
-
        // Handle wrap around
        if (m_localtime < min(m_startframe, m_endframe) || m_localtime > 
max(m_startframe, m_endframe))
        {

Modified: branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.h
===================================================================
--- branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.h       
2011-06-23 23:18:53 UTC (rev 37777)
+++ branches/soc-2011-pepper/source/gameengine/Ketsji/BL_Action.h       
2011-06-23 23:19:39 UTC (rev 37778)
@@ -64,6 +64,7 @@
        short m_ipo_flags;
 
        bool m_done;
+       bool m_bcalc_local_time;
 
        void InitIPO();
        void SetLocalTime(float curtime);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to