[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