Revision: 20952
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20952
Author:   ben2610
Date:     2009-06-17 10:36:37 +0200 (Wed, 17 Jun 2009)

Log Message:
-----------
BGE #18823: Loading older blend files (from the blender Gamekit 1.0 demos) that 
use Sumo crash on playback in 2.48.5, worked in rc3. Fixed by upgrading Sumo to 
support the new method of sensor synchronization introduced with Sensor objects 
in Bullet. Sumo demo will not crash but may still not run well as other 
features and methods have not been ported.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp
    trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h
    trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp

Modified: trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp      
2009-06-17 07:38:07 UTC (rev 20951)
+++ trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.cpp      
2009-06-17 08:36:37 UTC (rev 20952)
@@ -402,7 +402,13 @@
        
 void   SumoPhysicsController::WriteMotionStateToDynamics(bool)
 {
-
+       float tmp[4];
+       m_MotionState->getWorldPosition(tmp[0], tmp[1], tmp[2]);
+       MT_Point3 pos(tmp);
+       m_sumoObj->setPosition(pos);
+       m_MotionState->getWorldOrientation(tmp[0], tmp[1], tmp[2], tmp[3]);
+       MT_Quaternion quat(tmp);
+       m_sumoObj->setOrientation(quat);
 }
 // this is the actual callback from sumo, and the position/orientation
 //is written to the scenegraph, using the motionstate abstraction
@@ -493,3 +499,70 @@
        return 0.f;
 
 }
+
+///////////////////////////////////////////////////////////
+///A small utility class, SumoDefaultMotionState
+///
+///////////////////////////////////////////////////////////
+
+SumoDefaultMotionState::SumoDefaultMotionState()
+{
+       m_worldTransform.setIdentity();
+       m_localScaling.setValue(1.f,1.f,1.f);
+}
+
+
+SumoDefaultMotionState::~SumoDefaultMotionState()
+{
+
+}
+
+void   SumoDefaultMotionState::getWorldPosition(float& posX,float& posY,float& 
posZ)
+{
+       posX = m_worldTransform.getOrigin().x();
+       posY = m_worldTransform.getOrigin().y();
+       posZ = m_worldTransform.getOrigin().z();
+}
+
+void   SumoDefaultMotionState::getWorldScaling(float& scaleX,float& 
scaleY,float& scaleZ)
+{
+       scaleX = m_localScaling.x();
+       scaleY = m_localScaling.y();
+       scaleZ = m_localScaling.z();
+}
+
+void   SumoDefaultMotionState::getWorldOrientation(float& quatIma0,float& 
quatIma1,float& quatIma2,float& quatReal)
+{
+       MT_Quaternion quat = m_worldTransform.getRotation();
+       quatIma0 = quat.x();
+       quatIma1 = quat.y();
+       quatIma2 = quat.z();
+       quatReal = quat.w();
+}
+               
+void   SumoDefaultMotionState::getWorldOrientation(float* ori)
+{
+       m_worldTransform.getBasis().getValue(ori);
+}
+
+void   SumoDefaultMotionState::setWorldOrientation(const float* ori)
+{
+       m_worldTransform.getBasis().setValue(ori);
+}
+void   SumoDefaultMotionState::setWorldPosition(float posX,float posY,float 
posZ)
+{
+       MT_Point3 pos(posX,posY,posZ);
+       m_worldTransform.setOrigin( pos );
+}
+
+void   SumoDefaultMotionState::setWorldOrientation(float quatIma0,float 
quatIma1,float quatIma2,float quatReal)
+{
+       MT_Quaternion orn(quatIma0,quatIma1,quatIma2,quatReal);
+       m_worldTransform.setRotation( orn );
+}
+               
+void   SumoDefaultMotionState::calculateWorldTransformations()
+{
+
+}
+

Modified: trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h
===================================================================
--- trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h        
2009-06-17 07:38:07 UTC (rev 20951)
+++ trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsController.h        
2009-06-17 08:36:37 UTC (rev 20952)
@@ -30,6 +30,7 @@
 #define __SUMO_PHYSICSCONTROLLER_H
 
 #include "PHY_IPhysicsController.h"
+#include "PHY_IMotionState.h"
 #include "SM_Scene.h"
 #include "SM_Callback.h"
 
@@ -188,5 +189,30 @@
        
 };
 
+///SumoDefaultMotionState implements standard motionstate, using btTransform
+class  SumoDefaultMotionState : public PHY_IMotionState
+
+{
+       public:
+               SumoDefaultMotionState();
+
+               virtual ~SumoDefaultMotionState();
+
+               virtual void    getWorldPosition(float& posX,float& posY,float& 
posZ);
+               virtual void    getWorldScaling(float& scaleX,float& 
scaleY,float& scaleZ);
+               virtual void    getWorldOrientation(float& quatIma0,float& 
quatIma1,float& quatIma2,float& quatReal);
+               
+               virtual void    setWorldPosition(float posX,float posY,float 
posZ);
+               virtual void    setWorldOrientation(float quatIma0,float 
quatIma1,float quatIma2,float quatReal);
+               virtual void    getWorldOrientation(float* ori);
+               virtual void    setWorldOrientation(const float* ori);
+               
+               virtual void    calculateWorldTransformations();
+               
+               MT_Transform    m_worldTransform;
+               MT_Vector3              m_localScaling;
+
+};
+
 #endif //__SUMO_PHYSICSCONTROLLER_H
 

Modified: 
trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp     
2009-06-17 07:38:07 UTC (rev 20951)
+++ trunk/blender/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.cpp     
2009-06-17 08:36:37 UTC (rev 20952)
@@ -244,8 +244,8 @@
        //testing
        MT_Quaternion rotquatje(MT_Vector3(0,0,1),MT_radians(90));              
        ob->setOrientation(rotquatje);
-
-       PHY_IPhysicsController* ctrl = new 
SumoPhysicsController(m_sumoScene,ob,0,false);
+       PHY_IMotionState* motionState = new SumoDefaultMotionState();
+       PHY_IPhysicsController* ctrl = new 
SumoPhysicsController(m_sumoScene,ob,motionState,false);
        ctrl->SetMargin(radius);
        return ctrl;
 }
@@ -256,8 +256,9 @@
        ob->setPosition(MT_Point3(0.f,0.f,0.f));
        MT_Quaternion rotquatje(MT_Vector3(0,0,1),MT_radians(90));              
        ob->setOrientation(rotquatje);
+       PHY_IMotionState* motionState = new SumoDefaultMotionState();
 
-       PHY_IPhysicsController* ctrl = new 
SumoPhysicsController(m_sumoScene,ob,0,false);
+       PHY_IPhysicsController* ctrl = new 
SumoPhysicsController(m_sumoScene,ob,motionState,false);
 
        return ctrl;
 }


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

Reply via email to