diff options
Diffstat (limited to 'source/gameengine/Physics/Bullet/CcdPhysicsController.h')
-rw-r--r-- | source/gameengine/Physics/Bullet/CcdPhysicsController.h | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h index 6df5c85f5c0..f1f0ca31419 100644 --- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h +++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h @@ -391,17 +391,42 @@ struct CcdConstructionInfo }; - class btRigidBody; class btCollisionObject; class btSoftBody; +class btPairCachingGhostObject; + +class BlenderBulletCharacterController : public btKinematicCharacterController +{ +private: + btMotionState* m_motionState; + int m_jumps; + int m_maxJumps; + +public: + BlenderBulletCharacterController(btMotionState *motionState, btPairCachingGhostObject *ghost, btConvexShape* shape, float stepHeight); + + virtual void updateAction(btCollisionWorld *collisionWorld, btScalar dt); + + int getMaxJumps() const; + + void setMaxJumps(int maxJumps); + + int getJumpCount() const; + + virtual bool canJump() const; + + virtual void jump(); + + const btVector3& getWalkDirection(); +}; ///CcdPhysicsController is a physics object that supports continuous collision detection and time of impact based physics resolution. class CcdPhysicsController : public PHY_IPhysicsController { protected: btCollisionObject* m_object; - btKinematicCharacterController* m_characterController; + BlenderBulletCharacterController* m_characterController; class PHY_IMotionState* m_MotionState; @@ -478,12 +503,12 @@ protected: /** - SynchronizeMotionStates ynchronizes dynas, kinematic and deformable entities (and do 'late binding') - */ + * SynchronizeMotionStates ynchronizes dynas, kinematic and deformable entities (and do 'late binding') + */ virtual bool SynchronizeMotionStates(float time); /** - WriteMotionStateToDynamics ynchronizes dynas, kinematic and deformable entities (and do 'late binding') - */ + * WriteMotionStateToDynamics ynchronizes dynas, kinematic and deformable entities (and do 'late binding') + */ virtual void WriteMotionStateToDynamics(bool nondynaonly); virtual void WriteDynamicsToMotionState(); @@ -494,11 +519,12 @@ protected: // kinematic methods virtual void RelativeTranslate(float dlocX,float dlocY,float dlocZ,bool local); + virtual void SetWalkDirection(float dirX,float dirY,float dirZ,bool local); virtual void RelativeRotate(const float drot[9],bool local); virtual void getOrientation(float &quatImag0,float &quatImag1,float &quatImag2,float &quatReal); virtual void setOrientation(float quatImag0,float quatImag1,float quatImag2,float quatReal); virtual void setPosition(float posX,float posY,float posZ); - virtual void getPosition(PHY__Vector3& pos) const; + virtual void getPosition(MT_Vector3& pos) const; virtual void setScaling(float scaleX,float scaleY,float scaleZ); @@ -508,6 +534,7 @@ protected: virtual void SetAngularVelocity(float ang_velX,float ang_velY,float ang_velZ,bool local); virtual void SetLinearVelocity(float lin_velX,float lin_velY,float lin_velZ,bool local); virtual void applyImpulse(float attachX,float attachY,float attachZ, float impulseX,float impulseY,float impulseZ); + virtual void Jump(); virtual void SetActive(bool active); // reading out information from physics @@ -515,6 +542,7 @@ protected: virtual void GetAngularVelocity(float& angVelX,float& angVelY,float& angVelZ); virtual void GetVelocity(const float posX,const float posY,const float posZ,float& linvX,float& linvY,float& linvZ); virtual void getReactionForce(float& forceX,float& forceY,float& forceZ); + virtual void GetWalkDirection(float& dirX,float& dirY,float& dirZ); // dyna's that are rigidbody are free in orientation, dyna's with non-rigidbody are restricted virtual void setRigidBody(bool rigid); |