OSDN Git Service

Include experimental bugfix of TheAgentD (disabled by default)
authorXoppa <contact@xoppa.nl>
Tue, 8 Oct 2013 17:55:54 +0000 (19:55 +0200)
committerXoppa <contact@xoppa.nl>
Tue, 8 Oct 2013 17:55:54 +0000 (19:55 +0200)
extensions/gdx-bullet/jni/src/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
extensions/gdx-bullet/jni/src/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h
extensions/gdx-bullet/jni/swig-src/com/badlogic/gdx/physics/bullet/btDiscreteDynamicsWorld.java
extensions/gdx-bullet/jni/swig-src/com/badlogic/gdx/physics/bullet/gdxBulletJNI.java
extensions/gdx-bullet/jni/swig-src/gdxBullet_wrap.cpp

index 9ff2d9f..4cb271b 100644 (file)
@@ -210,7 +210,9 @@ m_gravity(0,-10,0),
 m_localTime(0),
 m_synchronizeAllMotionStates(false),
 m_applySpeculativeContactRestitution(false),
-m_profileTimings(0)
+m_profileTimings(0),
+m_fixedTimeStep(0),
+m_interpolation(false)
 
 {
        if (!m_constraintSolver)
@@ -359,7 +361,9 @@ void        btDiscreteDynamicsWorld::synchronizeSingleMotionState(btRigidBody* body)
                {
                        btTransform interpolatedTransform;
                        btTransformUtil::integrateTransform(body->getInterpolationWorldTransform(),
-                               body->getInterpolationLinearVelocity(),body->getInterpolationAngularVelocity(),m_localTime*body->getHitFraction(),interpolatedTransform);
+                               body->getInterpolationLinearVelocity(),body->getInterpolationAngularVelocity(),
+                               (m_interpolation && m_fixedTimeStep) ? m_localTime - m_fixedTimeStep : m_localTime*body->getHitFraction(),
+                               interpolatedTransform);
                        body->getMotionState()->setWorldTransform(interpolatedTransform);
                }
        }
@@ -403,6 +407,7 @@ int btDiscreteDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps,
        if (maxSubSteps)
        {
                //fixed timestep with interpolation
+               m_fixedTimeStep = fixedTimeStep;
                m_localTime += timeStep;
                if (m_localTime >= fixedTimeStep)
                {
@@ -413,7 +418,8 @@ int btDiscreteDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps,
        {
                //variable timestep
                fixedTimeStep = timeStep;
-               m_localTime = timeStep;
+               m_localTime = m_interpolation ? 0 : timeStep;
+               m_fixedTimeStep = 0;
                if (btFuzzyZero(timeStep))
                {
                        numSimulationSubSteps = 0;
index fa934c4..22e40e0 100644 (file)
@@ -53,6 +53,7 @@ protected:
 
        //for variable timesteps
        btScalar        m_localTime;
+       btScalar        m_fixedTimeStep;
        //for variable timesteps
 
        bool    m_ownsIslandManager;
@@ -216,6 +217,7 @@ public:
        ///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (see Bullet/Demos/SerializeDemo)
        virtual void    serialize(btSerializer* serializer);
 
+       bool m_interpolation;
 };
 
 #endif //BT_DISCRETE_DYNAMICS_WORLD_H
index ece1617..4ba1083 100644 (file)
@@ -150,4 +150,12 @@ public class btDiscreteDynamicsWorld extends btDynamicsWorld {
     return gdxBulletJNI.btDiscreteDynamicsWorld_getApplySpeculativeContactRestitution(swigCPtr, this);\r
   }\r
 \r
+  public void setInterpolation(boolean value) {\r
+    gdxBulletJNI.btDiscreteDynamicsWorld_interpolation_set(swigCPtr, this, value);\r
+  }\r
+\r
+  public boolean getInterpolation() {\r
+    return gdxBulletJNI.btDiscreteDynamicsWorld_interpolation_get(swigCPtr, this);\r
+  }\r
+\r
 }\r
index 7704eb6..184e026 100644 (file)
@@ -3039,6 +3039,8 @@ public class gdxBulletJNI {
   public final static native boolean btDiscreteDynamicsWorld_getSynchronizeAllMotionStates(long jarg1, btDiscreteDynamicsWorld jarg1_);\r
   public final static native void btDiscreteDynamicsWorld_setApplySpeculativeContactRestitution(long jarg1, btDiscreteDynamicsWorld jarg1_, boolean jarg2);\r
   public final static native boolean btDiscreteDynamicsWorld_getApplySpeculativeContactRestitution(long jarg1, btDiscreteDynamicsWorld jarg1_);\r
+  public final static native void btDiscreteDynamicsWorld_interpolation_set(long jarg1, btDiscreteDynamicsWorld jarg1_, boolean jarg2);\r
+  public final static native boolean btDiscreteDynamicsWorld_interpolation_get(long jarg1, btDiscreteDynamicsWorld jarg1_);\r
   public final static native void delete_btCharacterControllerInterface(long jarg1);\r
   public final static native void btCharacterControllerInterface_setWalkDirection(long jarg1, btCharacterControllerInterface jarg1_, Vector3 jarg2);\r
   public final static native void btCharacterControllerInterface_setVelocityForTimeInterval(long jarg1, btCharacterControllerInterface jarg1_, Vector3 jarg2, float jarg3);\r
index c700e06..93ca153 100755 (executable)
@@ -55295,6 +55295,34 @@ SWIGEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_bullet_gdxBulletJNI_bt
 }\r
 \r
 \r
+SWIGEXPORT void JNICALL Java_com_badlogic_gdx_physics_bullet_gdxBulletJNI_btDiscreteDynamicsWorld_1interpolation_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jboolean jarg2) {\r
+  btDiscreteDynamicsWorld *arg1 = (btDiscreteDynamicsWorld *) 0 ;\r
+  bool arg2 ;\r
+  \r
+  (void)jenv;\r
+  (void)jcls;\r
+  (void)jarg1_;\r
+  arg1 = *(btDiscreteDynamicsWorld **)&jarg1; \r
+  arg2 = jarg2 ? true : false; \r
+  if (arg1) (arg1)->m_interpolation = arg2;\r
+}\r
+\r
+\r
+SWIGEXPORT jboolean JNICALL Java_com_badlogic_gdx_physics_bullet_gdxBulletJNI_btDiscreteDynamicsWorld_1interpolation_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {\r
+  jboolean jresult = 0 ;\r
+  btDiscreteDynamicsWorld *arg1 = (btDiscreteDynamicsWorld *) 0 ;\r
+  bool result;\r
+  \r
+  (void)jenv;\r
+  (void)jcls;\r
+  (void)jarg1_;\r
+  arg1 = *(btDiscreteDynamicsWorld **)&jarg1; \r
+  result = (bool) ((arg1)->m_interpolation);\r
+  jresult = (jboolean)result; \r
+  return jresult;\r
+}\r
+\r
+\r
 SWIGEXPORT void JNICALL Java_com_badlogic_gdx_physics_bullet_gdxBulletJNI_delete_1btCharacterControllerInterface(JNIEnv *jenv, jclass jcls, jlong jarg1) {\r
   btCharacterControllerInterface *arg1 = (btCharacterControllerInterface *) 0 ;\r
   \r