diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2012-11-05 00:56:02 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2012-11-05 00:56:02 +0400 |
commit | f840bd4a9f89815ca213d8398c99865fc6d64e4c (patch) | |
tree | b2c27e3ec22ac337120ab6f8db47b5071b6c49cb /source/gameengine/Physics/Bullet | |
parent | cc77001416b385b289e7824cd5d71cad2bddfefb (diff) |
BGE: This patch adds a character wrapper (similar to the already implemented vehicle wrapper) to control character physics options. Currently supported options are:
* jump() -- causes the character to jump
* onGround -- specifies whether or not the character is on the ground
* gravity -- controls the "gravity" that the character physics uses for the character
More options could be added (such as jump speed, step height, make fall speed, max slope, etc).
Diffstat (limited to 'source/gameengine/Physics/Bullet')
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp | 40 | ||||
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h | 2 |
2 files changed, 42 insertions, 0 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp index 687fc116234..486411d7e35 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp @@ -37,6 +37,7 @@ subject to the following restrictions: #include "PHY_IMotionState.h" +#include "PHY_ICharacter.h" #include "KX_GameObject.h" #include "RAS_MeshObject.h" #include "RAS_Polygon.h" @@ -266,6 +267,36 @@ public: }; #endif //NEW_BULLET_VEHICLE_SUPPORT +class CharacterWrapper : public PHY_ICharacter +{ +private: + btKinematicCharacterController* m_controller; + +public: + CharacterWrapper(btKinematicCharacterController* cont) + : m_controller(cont) + {} + + virtual void Jump() + { + m_controller->jump(); + } + + virtual bool OnGround() + { + return m_controller->onGround(); + } + + virtual float GetGravity() + { + return m_controller->getGravity(); + } + virtual void SetGravity(float gravity) + { + m_controller->setGravity(gravity); + } +}; + class CcdOverlapFilterCallBack : public btOverlapFilterCallback { private: @@ -2285,6 +2316,15 @@ PHY_IVehicle* CcdPhysicsEnvironment::getVehicleConstraint(int constraintId) #endif //NEW_BULLET_VEHICLE_SUPPORT +PHY_ICharacter* CcdPhysicsEnvironment::getCharacterController(KX_GameObject *ob) +{ + CcdPhysicsController* controller = (CcdPhysicsController*)ob->GetPhysicsController()->GetUserData(); + if (controller->GetCharacterController()) + return new CharacterWrapper(controller->GetCharacterController()); + + return NULL; +} + int currentController = 0; int numController = 0; diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h index 350ecd2588a..18ce0550498 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h @@ -184,6 +184,8 @@ protected: return 0; } #endif /* NEW_BULLET_VEHICLE_SUPPORT */ + // Character physics wrapper + virtual PHY_ICharacter* getCharacterController(class KX_GameObject* ob); btTypedConstraint* getConstraintById(int constraintId); |