diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2014-04-24 04:53:25 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2014-04-24 04:53:25 +0400 |
commit | 89c61b20f019766fa57835b3548c4f84d36f6214 (patch) | |
tree | 91dc4c6ee5149b720f63e8ccfde8f16c75f13f01 /source/gameengine/Physics | |
parent | 3442a658fc24267d0fd77da72eb7b254e7079c65 (diff) |
BGE Cleanup: Reducing KX_BlenderSceneConverter's dependence on Bullet.
* Moving the BlenderDebugDraw (derived from btIDebugDraw) from
KX_BlenderSceneConverter to CcdPhysicsEnvironment
* Moving CcdPhysicsEnvironment initialization to CcdPhysicsEnvironment
(this could probably be cleaned up some more with some sort of
factory, or at least moving code to CcdPhysicsEnvironment's
constructor)
* Simplifying physics environment initialization (went from two
switches to one)
Diffstat (limited to 'source/gameengine/Physics')
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp | 64 | ||||
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h | 2 |
2 files changed, 66 insertions, 0 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index dcd30ea1174..4a9fd6aa3c6 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -40,10 +40,14 @@ subject to the following restrictions: #include "PHY_IMotionState.h" #include "PHY_ICharacter.h" #include "KX_GameObject.h" +#include "KX_PythonInit.h" // for KX_RasterizerDrawDebugLine #include "RAS_MeshObject.h" #include "RAS_Polygon.h" #include "RAS_TexVert.h" +#include "DNA_scene_types.h" +#include "DNA_world_types.h" + #define CCD_CONSTRAINT_DISABLE_LINKED_COLLISION 0x80 #ifdef NEW_BULLET_VEHICLE_SUPPORT @@ -2895,3 +2899,63 @@ void CcdPhysicsEnvironment::ExportFile(const char* filename) } } +struct BlenderDebugDraw : public btIDebugDraw +{ + BlenderDebugDraw () : + m_debugMode(0) + { + } + + int m_debugMode; + + virtual void drawLine(const btVector3& from,const btVector3& to,const btVector3& color) + { + if (m_debugMode >0) + { + MT_Vector3 kxfrom(from[0],from[1],from[2]); + MT_Vector3 kxto(to[0],to[1],to[2]); + MT_Vector3 kxcolor(color[0],color[1],color[2]); + + KX_RasterizerDrawDebugLine(kxfrom,kxto,kxcolor); + } + } + + virtual void reportErrorWarning(const char* warningString) + { + + } + + virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,float distance,int lifeTime,const btVector3& color) + { + //not yet + } + + virtual void setDebugMode(int debugMode) + { + m_debugMode = debugMode; + } + virtual int getDebugMode() const + { + return m_debugMode; + } + ///todo: find out if Blender can do this + virtual void draw3dText(const btVector3& location,const char* textString) + { + + } + +}; + +CcdPhysicsEnvironment *CcdPhysicsEnvironment::Create(Scene *blenderscene, bool visualizePhysics) +{ + CcdPhysicsEnvironment* ccdPhysEnv = new CcdPhysicsEnvironment((blenderscene->gm.mode & WO_DBVT_CULLING) != 0); + ccdPhysEnv->SetDebugDrawer(new BlenderDebugDraw()); + ccdPhysEnv->SetDeactivationLinearTreshold(blenderscene->gm.lineardeactthreshold); + ccdPhysEnv->SetDeactivationAngularTreshold(blenderscene->gm.angulardeactthreshold); + ccdPhysEnv->SetDeactivationTime(blenderscene->gm.deactivationtime); + + if (visualizePhysics) + ccdPhysEnv->SetDebugMode(btIDebugDraw::DBG_DrawWireframe|btIDebugDraw::DBG_DrawAabb|btIDebugDraw::DBG_DrawContactPoints|btIDebugDraw::DBG_DrawText|btIDebugDraw::DBG_DrawConstraintLimits|btIDebugDraw::DBG_DrawConstraints); + + return ccdPhysEnv; +} diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h index 4e002f5ce3c..8b8e3f1f6d0 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h @@ -260,6 +260,8 @@ protected: void MergeEnvironment(PHY_IPhysicsEnvironment *other_env); + static CcdPhysicsEnvironment *Create(struct Scene *blenderscene, bool visualizePhysics); + protected: |