From 4b358e6042018a71797b000a4dc6c1caeaaa541c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20=E2=80=98Touky=E2=80=99=20Huet?= Date: Tue, 7 Aug 2012 12:12:33 +0000 Subject: [PATCH] Skeleton for EasyCharacterController --- test/Physics/EasyPhysics.cpp | 34 ++++++++++++++ test/Physics/EasyPhysics.h | 89 +++++++++++++++++++++++------------- 2 files changed, 92 insertions(+), 31 deletions(-) diff --git a/test/Physics/EasyPhysics.cpp b/test/Physics/EasyPhysics.cpp index 32051d2b..414de1ac 100644 --- a/test/Physics/EasyPhysics.cpp +++ b/test/Physics/EasyPhysics.cpp @@ -197,6 +197,7 @@ void EasyPhysic::AddToSimulation(class Simulation* current_simulation) } } +//Remove Physic object to the simulation void EasyPhysic::RemoveFromSimulation(class Simulation* current_simulation) { btDiscreteDynamicsWorld* dynamics_world = current_simulation->GetWorld(); @@ -236,6 +237,39 @@ void EasyPhysic::SetLocalInertia(float mass) m_local_inertia = btVector3(.0f, .0f, .0f); } +//------------------------------------------------------------------------- +//EASY_CHARACTER_CONTROLLER +//-- + +void EasyCharacterController::SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation) +{ + +} +void EasyCharacterController::SetMass(float mass) +{ + +} +void EasyCharacterController::InitBodyToRigid(bool ZeroMassIsKinematic) +{ + +} +void EasyCharacterController::InitBodyToGhost() +{ + //btCollisionObject::CF_CHARACTER_OBJECT +} +void EasyCharacterController::AddToSimulation(class Simulation* current_simulation) +{ + +} +void EasyCharacterController::RemoveFromSimulation(class Simulation* current_simulation) +{ + +} +mat4 EasyCharacterController::GetTransform() +{ + mat4(1.f); +} + //------------------------------------------------------------------------- //EASY_CONSTRAINT //-- diff --git a/test/Physics/EasyPhysics.h b/test/Physics/EasyPhysics.h index 7b72dda6..118dff76 100644 --- a/test/Physics/EasyPhysics.h +++ b/test/Physics/EasyPhysics.h @@ -41,24 +41,24 @@ public: EasyPhysic(); ~EasyPhysic(); - void SetShapeToBox(lol::vec3& box_size); - void SetShapeToSphere(float radius); - void SetShapeToCone(float radius, float height); - void SetShapeToCylinder(lol::vec3& cyl_size); - void SetShapeToCapsule(float radius, float height); - - bool CanChangeCollisionChannel() { return (m_rigid_body == NULL); } - void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))); - void SetMass(float mass); - void InitBodyToRigid(bool ZeroMassIsKinematic=false); - void InitBodyToGhost(); - void AddToSimulation(class Simulation* current_simulation); - void RemoveFromSimulation(class Simulation* current_simulation); - mat4 GetTransform(); + virtual void SetShapeToBox(lol::vec3& box_size); + virtual void SetShapeToSphere(float radius); + virtual void SetShapeToCone(float radius, float height); + virtual void SetShapeToCylinder(lol::vec3& cyl_size); + virtual void SetShapeToCapsule(float radius, float height); + + virtual bool CanChangeCollisionChannel() { return (m_rigid_body == NULL); } + virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))); + virtual void SetMass(float mass); + virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false); + virtual void InitBodyToGhost(); + virtual void AddToSimulation(class Simulation* current_simulation); + virtual void RemoveFromSimulation(class Simulation* current_simulation); + virtual mat4 GetTransform(); protected: - void SetLocalInertia(float mass); - void SetShapeTo(btCollisionShape* collision_shape); + virtual void SetLocalInertia(float mass); + virtual void SetShapeTo(btCollisionShape* collision_shape); btCollisionObject* m_collision_object; @@ -75,27 +75,27 @@ protected: public: EasyPhysic() { } - void SetShapeToBox(lol::vec3& BoxSize) { } - void SetShapeToSphere(float radius) { } - void SetShapeToCone(float radius, float height) { } - void SetShapeToCylinder(lol::vec3& cyl_size) { } - void SetShapeToCapsule(float radius, float height) { } - - bool CanChangeCollisionChannel() { return true; } - void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))) { } - void SetMass(float mass) { } - void InitBodyToRigid() { } - void InitBodyToGhost() { } - void AddToSimulation(class Simulation* current_simulation) { } - void RemoveFromSimulation(class Simulation* current_simulation) { } - mat4 GetTransform() { return mat4(1.0f); } + virtual void SetShapeToBox(lol::vec3& BoxSize) { } + virtual void SetShapeToSphere(float radius) { } + virtual void SetShapeToCone(float radius, float height) { } + virtual void SetShapeToCylinder(lol::vec3& cyl_size) { } + virtual void SetShapeToCapsule(float radius, float height) { } + + virtual bool CanChangeCollisionChannel() { return true; } + virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))) { } + virtual void SetMass(float mass) { } + virtual void InitBodyToRigid() { } + virtual void InitBodyToGhost() { } + virtual void AddToSimulation(class Simulation* current_simulation) { } + virtual void RemoveFromSimulation(class Simulation* current_simulation) { } + virtual mat4 GetTransform() { return mat4(1.0f); } #endif // PHYSIC IMPLEMENTATION public: //Sets the collision Group & Mask. //Mask can change at runtime, not group ! - bool SetCollisionChannel(int NewGroup, int NewMask) + virtual bool SetCollisionChannel(int NewGroup, int NewMask) { if (CanChangeCollisionChannel()) { @@ -115,6 +115,33 @@ protected: int m_collision_mask; }; +class EasyCharacterController : public EasyPhysic +{ + +#ifdef HAVE_PHYS_USE_BULLET + +public: + EasyCharacterController(); + ~EasyCharacterController(); + + virtual void SetTransform(const lol::vec3& base_location, const lol::quat& base_rotation=lol::quat(lol::mat4(1.0f))); + virtual void SetMass(float mass); + virtual void InitBodyToRigid(bool ZeroMassIsKinematic=false); + virtual void InitBodyToGhost(); + virtual void AddToSimulation(class Simulation* current_simulation); + virtual void RemoveFromSimulation(class Simulation* current_simulation); + virtual mat4 GetTransform(); + +protected: + + btPairCachingGhostObject* m_pair_caching_object; + +#else // NO PHYSIC IMPLEMENTATION + +#endif // PHYSIC IMPLEMENTATION + +}; + class EasyConstraint { #ifdef HAVE_PHYS_USE_BULLET