[Bf-blender-cvs] [8cee587] master: BGE Cleanup: Physics conversion is now handled by PHY_IPhysicsEnvironment

Mitchell Stokes noreply at git.blender.org
Thu Apr 24 03:41:24 CEST 2014


Commit: 8cee587bcb44b24cc17a9d6527a63d19dade4e5d
Author: Mitchell Stokes
Date:   Wed Apr 23 18:39:33 2014 -0700
https://developer.blender.org/rB8cee587bcb44b24cc17a9d6527a63d19dade4e5d

BGE Cleanup: Physics conversion is now handled by PHY_IPhysicsEnvironment

The current physics conversion code was moved from
KX_ConvertPhysicsObjects to CcdPhysicsEnvironment.

===================================================================

M	source/gameengine/Converter/BL_BlenderDataConversion.cpp
M	source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
M	source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
M	source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
M	source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
M	source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
M	source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h

===================================================================

diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 3501add..47d25c5 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -80,6 +80,7 @@
 #include "SCA_TimeEventManager.h"
 #include "KX_Light.h"
 #include "KX_Camera.h"
+#include "KX_ClientObjectInfo.h"
 #include "KX_EmptyObject.h"
 #include "KX_FontObject.h"
 #include "MT_Point3.h"
@@ -1359,7 +1360,6 @@ static void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
                                       RAS_MeshObject* meshobj,
                                       KX_Scene* kxscene,
                                       int activeLayerBitInfo,
-                                      e_PhysicsEngine	physics_engine,
                                       KX_BlenderSceneConverter *converter,
                                       bool processCompoundChildren
                                       )
@@ -1413,19 +1413,31 @@ static void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
 	DerivedMesh* dm = NULL;
 	if (gameobj->GetDeformer())
 		dm = gameobj->GetDeformer()->GetPhysicsMesh();
-	
-	switch (physics_engine)
-	{
-#ifdef WITH_BULLET
-		case UseBullet:
-			KX_ConvertBulletObject(gameobj, meshobj, dm, kxscene, shapeprops, smmaterial, activeLayerBitInfo, isCompoundChild, hasCompoundChildren);
-			break;
 
-#endif
-		case UseNone:
-		default:
-			break;
+	class PHY_IMotionState* motionstate = new KX_MotionState(gameobj->GetSGNode());
+
+	kxscene->GetPhysicsEnvironment()->ConvertObject(gameobj, meshobj, dm, kxscene, shapeprops, smmaterial, motionstate, activeLayerBitInfo, isCompoundChild, hasCompoundChildren);
+
+	bool isActor = (blenderobject->gameflag & OB_ACTOR)!=0;
+	bool isSensor = (blenderobject->gameflag & OB_SENSOR) != 0;
+	gameobj->getClientInfo()->m_type =
+		(isSensor) ? ((isActor) ? KX_ClientObjectInfo::OBACTORSENSOR : KX_ClientObjectInfo::OBSENSOR) :
+		(isActor) ? KX_ClientObjectInfo::ACTOR : KX_ClientObjectInfo::STATIC;
+
+	// should we record animation for this object?
+	if ((blenderobject->gameflag & OB_RECORD_ANIMATION) != 0)
+		gameobj->SetRecordAnimation(true);
+
+	// store materialname in auxinfo, needed for touchsensors
+	if (meshobj)
+	{
+		const STR_String& matname=meshobj->GetMaterialName(0);
+		gameobj->getClientInfo()->m_auxilary_info = (matname.Length() ? (void*)(matname.ReadPtr()+2) : NULL);
+	} else
+	{
+		gameobj->getClientInfo()->m_auxilary_info = 0;
 	}
+
 	delete shapeprops;
 	delete smmaterial;
 	if (dm) {
@@ -2342,7 +2354,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
 			meshobj = gameobj->GetMesh(0);
 		}
 		int layerMask = (groupobj.find(blenderobject) == groupobj.end()) ? activeLayerBitInfo : 0;
-		BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,layerMask,physics_engine,converter,processCompoundChildren);
+		BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,layerMask,converter,processCompoundChildren);
 	}
 
 	processCompoundChildren = true;
@@ -2358,7 +2370,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
 			meshobj = gameobj->GetMesh(0);
 		}
 		int layerMask = (groupobj.find(blenderobject) == groupobj.end()) ? activeLayerBitInfo : 0;
-		BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,layerMask,physics_engine,converter,processCompoundChildren);
+		BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,layerMask,converter,processCompoundChildren);
 	}
 	
 	//set ini linearVel and int angularVel //rcruiz
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
index 4f341d7..efe4f2e 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
@@ -32,22 +32,11 @@
 #ifndef __KX_CONVERTPHYSICSOBJECT_H__
 #define __KX_CONVERTPHYSICSOBJECT_H__
 
+class KX_GameObject;
 class RAS_MeshObject;
-class KX_Scene;
-struct DerivedMesh;
 
 #ifdef WITH_BULLET
 
-void	KX_ConvertBulletObject(class	KX_GameObject* gameobj,
-	class	RAS_MeshObject* meshobj,
-	struct  DerivedMesh* dm,
-	class	KX_Scene* kxscene,
-	struct	PHY_ShapeProps* shapeprops,
-	struct	PHY_MaterialProps*	smmaterial,
-	int activeLayerBitInfo,
-	bool isCompoundChild,
-	bool hasCompoundChildren);
-
 bool KX_ReInstanceBulletShapeFromMesh(KX_GameObject *gameobj, KX_GameObject *from_gameobj, RAS_MeshObject* from_meshobj);
 
 #endif
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
index 5791c9f..111d62b 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
@@ -33,539 +33,15 @@
 #  pragma warning (disable:4786)
 #endif
 
-#include "MT_assert.h"
-
-#include "KX_SoftBodyDeformer.h"
 #include "KX_ConvertPhysicsObject.h"
-#include "BL_DeformableGameObject.h"
-#include "RAS_MeshObject.h"
-#include "KX_Scene.h"
-#include "BL_System.h"
-
-#include "PHY_Pro.h" //todo cleanup
-#include "KX_ClientObjectInfo.h"
-
-#include "CTR_Map.h"
-#include "CTR_HashedPtr.h"
-
-#include "MT_MinMax.h"
-
-#include "KX_PhysicsEngineEnums.h"
 
-#include "KX_MotionState.h" // bridge between motionstate and scenegraph node
-
-extern "C"{
-	#include "BLI_utildefines.h"
-	#include "BKE_object.h"
-}
-
-#include "DNA_object_force.h"
+#include "KX_GameObject.h"
+#include "RAS_MeshObject.h"
 
 #ifdef WITH_BULLET
-#include "BulletSoftBody/btSoftBody.h"
 
 #include "CcdPhysicsEnvironment.h"
 #include "CcdPhysicsController.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-
-#include "btBulletDynamicsCommon.h"
-
-#ifdef WIN32
-#if defined(_MSC_VER) && (_MSC_VER >= 1310)
-//only use SIMD Hull code under Win32
-//#define TEST_HULL 1
-#ifdef TEST_HULL
-#define USE_HULL 1
-//#define TEST_SIMD_HULL 1
-
-#include "NarrowPhaseCollision/Hull.h"
-#endif //#ifdef TEST_HULL
-
-#endif //_MSC_VER 
-#endif //WIN32
-
-
-// forward declarations
-
-void	KX_ConvertBulletObject(	class	KX_GameObject* gameobj,
-	class	RAS_MeshObject* meshobj,
-	struct  DerivedMesh* dm,
-	class	KX_Scene* kxscene,
-	struct	PHY_ShapeProps* shapeprops,
-	struct	PHY_MaterialProps*	smmaterial,
-	int activeLayerBitInfo,
-	bool isCompoundChild,
-	bool hasCompoundChildren)
-{
-	Object* blenderobject = gameobj->GetBlenderObject();
-	CcdPhysicsEnvironment* env = (CcdPhysicsEnvironment*)kxscene->GetPhysicsEnvironment();
-	assert(env);
-	
-
-	bool isbulletdyna = (blenderobject->gameflag & OB_DYNAMIC) != 0;;
-	bool isbulletsensor = (blenderobject->gameflag & OB_SENSOR) != 0;
-	bool isbulletchar = (blenderobject->gameflag & OB_CHARACTER) != 0;
-	bool isbulletsoftbody = (blenderobject->gameflag & OB_SOFT_BODY) != 0;
-	bool isbulletrigidbody = (blenderobject->gameflag & OB_RIGID_BODY) != 0;
-	bool useGimpact = false;
-	CcdConstructionInfo ci;
-	class PHY_IMotionState* motionstate = new KX_MotionState(gameobj->GetSGNode());
-	class CcdShapeConstructionInfo *shapeInfo = new CcdShapeConstructionInfo();
-
-	KX_GameObject *parent = gameobj->GetParent();
-	if (parent)
-	{
-		isbulletdyna = false;
-		isbulletsoftbody = false;
-		shapeprops->m_mass = 0.f;
-	}
-
-	if (!isbulletdyna)
-	{
-		ci.m_collisionFlags |= btCollisionObject::CF_STATIC_OBJECT;
-	}
-	if ((blenderobject->gameflag & (OB_GHOST | OB_SENSOR | OB_CHARACTER)) != 0)
-	{
-		ci.m_collisionFlags |= btCollisionObject::CF_NO_CONTACT_RESPONSE;
-	}
-
-	ci.m_MotionState = motionstate;
-	ci.m_gravity = btVector3(0,0,0);
-	ci.m_linearFactor = btVector3(((blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_X_AXIS) !=0)? 0 : 1,
-									((blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_Y_AXIS) !=0)? 0 : 1,
-									((blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_Z_AXIS) !=0)? 0 : 1);
-	ci.m_angularFactor = btVector3(((blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_X_ROT_AXIS) !=0)? 0 : 1,
-									((blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_Y_ROT_AXIS) !=0)? 0 : 1,
-									((blenderobject->gameflag2 & OB_LOCK_RIGID_BODY_Z_ROT_AXIS) !=0)? 0 : 1);
-	ci.m_localInertiaTensor =btVector3(0,0,0);
-	ci.m_mass = isbulletdyna ? shapeprops->m_mass : 0.f;
-	ci.m_clamp_vel_min = shapeprops->m_clamp_vel_min;
-	ci.m_clamp_vel_max = shapeprops->m_clamp_vel_max;
-	ci.m_stepHeight = isbulletchar ? shapeprops->m_step_height : 0.f;
-	ci.m_jumpSpeed = isbulletchar ? shapeprops->m_jump_speed : 0.f;
-	ci.m_fallSpeed = isbulletchar ? shapeprops->m_fall_speed : 0.f;
-
-	//mmm, for now, take this for the size of the dynamicobject
-	// Blender uses inertia for radius of dynamic object
-	shapeInfo->m_radius = ci.m_radius = blenderobject->inertia;
-	useGimpact = ((isbulletdyna || isbulletsensor) && !isbulletsoftbody);
-
-	if (isbulletsoftbody)
-	{
-		if (blenderobject->bsoft)
-		{
-			ci.m_margin = blenderobject->bsoft->margin;
-		}
-		else
-		{
-			ci.m_margin = 0.f;
-		}
-	}
-	else
-	{
-		ci.m_margin = blenderobject->margin;
-	}
-
-	ci.m_localInertiaTensor = btVector3(ci.m_mass/3.f,ci.m_mass/3.f,ci.m_mass/3.f);
-	
-	btCollisionShape* bm = 0;
-
-	char bounds;
-	if (blenderobject->gameflag & OB_BOUNDS)
-	{
-		bounds = blenderobject->collision_boundtype;
-	}
-	else
-	{
-		if (blenderobject->gameflag & OB_SOFT_BODY)
-			bounds = OB_BOUND_TRIANGLE_MESH;
-		else if (blenderobject->gameflag & OB_CHARACTER)
-			bounds = OB_BOUND_SPHERE;
-		else if (isbulletdyna)
-			bounds = OB_BOUND_SPHERE;
-		else
-			bounds = OB_BOUND_TRIANGLE_MESH;
-	}
-
-	// Can't use triangle mesh or convex hull on a non-mesh object, fall-back to sphere
-	if (ELEM(bounds, OB_BOUND_TRIANGLE_MESH, OB_BOUND_CONVEX_HULL) && blenderobject->type != OB_MESH)
-		bounds = OB_BOUND_SPHERE;
-
-	// Get bounds information
-	float bounds_center[3], bounds_extends[3];
-	BoundBox *bb= BKE_object_boundbox_get(blenderobject);
-	if (bb==NULL)
-	{
-		bounds_center[0] = bounds_center[1] = bounds_center[2] = 0.0;
-		bounds_extends[0] = bounds_extends[1] = bounds_extends[2] = 1.0;
-	}
-	else
-	{
-		bounds_extends[0] = 0.5f * fabsf(bb->vec[0][0] - bb->vec[4][0]);
-		bounds_extends[1] = 0.5f * fabsf(bb->vec[0][1] - bb->vec[2][1]);
-		bounds_extends[2] = 0.5f * fabsf(bb->vec[0][2] - bb->vec[1][2]);
-
-		bounds_center[0] = 0.5f * (bb-

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list