Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h')
-rw-r--r--extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h166
1 files changed, 98 insertions, 68 deletions
diff --git a/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h b/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h
index add6f30a687..ff34fc871a5 100644
--- a/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h
+++ b/extern/bullet2/src/BulletDynamics/Character/btKinematicCharacterController.h
@@ -13,7 +13,6 @@ subject to the following restrictions:
3. This notice may not be removed or altered from any source distribution.
*/
-
#ifndef BT_KINEMATIC_CHARACTER_CONTROLLER_H
#define BT_KINEMATIC_CHARACTER_CONTROLLER_H
@@ -23,7 +22,6 @@ subject to the following restrictions:
#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-
class btCollisionShape;
class btConvexShape;
class btRigidBody;
@@ -34,99 +32,111 @@ class btPairCachingGhostObject;
///btKinematicCharacterController is an object that supports a sliding motion in a world.
///It uses a ghost object and convex sweep test to test for upcoming collisions. This is combined with discrete collision detection to recover from penetrations.
///Interaction between btKinematicCharacterController and dynamic rigid bodies needs to be explicity implemented by the user.
-ATTRIBUTE_ALIGNED16(class) btKinematicCharacterController : public btCharacterControllerInterface
+ATTRIBUTE_ALIGNED16(class)
+btKinematicCharacterController : public btCharacterControllerInterface
{
protected:
-
btScalar m_halfHeight;
-
+
btPairCachingGhostObject* m_ghostObject;
- btConvexShape* m_convexShape;//is also in m_ghostObject, but it needs to be convex, so we store it here to avoid upcast
-
+ btConvexShape* m_convexShape; //is also in m_ghostObject, but it needs to be convex, so we store it here to avoid upcast
+
+ btScalar m_maxPenetrationDepth;
btScalar m_verticalVelocity;
btScalar m_verticalOffset;
btScalar m_fallSpeed;
btScalar m_jumpSpeed;
+ btScalar m_SetjumpSpeed;
btScalar m_maxJumpHeight;
- btScalar m_maxSlopeRadians; // Slope angle that is set (used for returning the exact value)
- btScalar m_maxSlopeCosine; // Cosine equivalent of m_maxSlopeRadians (calculated once when set, for optimization)
+ btScalar m_maxSlopeRadians; // Slope angle that is set (used for returning the exact value)
+ btScalar m_maxSlopeCosine; // Cosine equivalent of m_maxSlopeRadians (calculated once when set, for optimization)
btScalar m_gravity;
btScalar m_turnAngle;
-
+
btScalar m_stepHeight;
- btScalar m_addedMargin;//@todo: remove this and fix the code
+ btScalar m_addedMargin; //@todo: remove this and fix the code
///this is the desired walk direction, set by the user
- btVector3 m_walkDirection;
- btVector3 m_normalizedDirection;
+ btVector3 m_walkDirection;
+ btVector3 m_normalizedDirection;
+ btVector3 m_AngVel;
+
+ btVector3 m_jumpPosition;
//some internal variables
btVector3 m_currentPosition;
- btScalar m_currentStepOffset;
+ btScalar m_currentStepOffset;
btVector3 m_targetPosition;
+ btQuaternion m_currentOrientation;
+ btQuaternion m_targetOrientation;
+
///keep track of the contact manifolds
- btManifoldArray m_manifoldArray;
+ btManifoldArray m_manifoldArray;
bool m_touchingContact;
btVector3 m_touchingNormal;
- bool m_wasOnGround;
- bool m_wasJumping;
- bool m_useGhostObjectSweepTest;
- bool m_useWalkDirection;
- btScalar m_velocityTimeInterval;
- int m_upAxis;
+ btScalar m_linearDamping;
+ btScalar m_angularDamping;
+
+ bool m_wasOnGround;
+ bool m_wasJumping;
+ bool m_useGhostObjectSweepTest;
+ bool m_useWalkDirection;
+ btScalar m_velocityTimeInterval;
+ btVector3 m_up;
+ btVector3 m_jumpAxis;
static btVector3* getUpAxisDirections();
- bool m_interpolateUp;
- bool full_drop;
- bool bounce_fix;
-
- btVector3 computeReflectionDirection (const btVector3& direction, const btVector3& normal);
- btVector3 parallelComponent (const btVector3& direction, const btVector3& normal);
- btVector3 perpindicularComponent (const btVector3& direction, const btVector3& normal);
-
- bool recoverFromPenetration ( btCollisionWorld* collisionWorld);
- void stepUp (btCollisionWorld* collisionWorld);
- void updateTargetPositionBasedOnCollision (const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0));
- void stepForwardAndStrafe (btCollisionWorld* collisionWorld, const btVector3& walkMove);
- void stepDown (btCollisionWorld* collisionWorld, btScalar dt);
-public:
+ bool m_interpolateUp;
+ bool full_drop;
+ bool bounce_fix;
+
+ btVector3 computeReflectionDirection(const btVector3& direction, const btVector3& normal);
+ btVector3 parallelComponent(const btVector3& direction, const btVector3& normal);
+ btVector3 perpindicularComponent(const btVector3& direction, const btVector3& normal);
+
+ bool recoverFromPenetration(btCollisionWorld * collisionWorld);
+ void stepUp(btCollisionWorld * collisionWorld);
+ void updateTargetPositionBasedOnCollision(const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0));
+ void stepForwardAndStrafe(btCollisionWorld * collisionWorld, const btVector3& walkMove);
+ void stepDown(btCollisionWorld * collisionWorld, btScalar dt);
+
+ virtual bool needsCollision(const btCollisionObject* body0, const btCollisionObject* body1);
+ void setUpVector(const btVector3& up);
+
+ btQuaternion getRotation(btVector3 & v0, btVector3 & v1) const;
+
+public:
BT_DECLARE_ALIGNED_ALLOCATOR();
- btKinematicCharacterController (btPairCachingGhostObject* ghostObject,btConvexShape* convexShape,btScalar stepHeight, int upAxis = 1);
- ~btKinematicCharacterController ();
-
+ btKinematicCharacterController(btPairCachingGhostObject * ghostObject, btConvexShape * convexShape, btScalar stepHeight, const btVector3& up = btVector3(1.0, 0.0, 0.0));
+ ~btKinematicCharacterController();
///btActionInterface interface
- virtual void updateAction( btCollisionWorld* collisionWorld,btScalar deltaTime)
+ virtual void updateAction(btCollisionWorld * collisionWorld, btScalar deltaTime)
{
- preStep ( collisionWorld);
- playerStep (collisionWorld, deltaTime);
+ preStep(collisionWorld);
+ playerStep(collisionWorld, deltaTime);
}
-
+
///btActionInterface interface
- void debugDraw(btIDebugDraw* debugDrawer);
+ void debugDraw(btIDebugDraw * debugDrawer);
- void setUpAxis (int axis)
- {
- if (axis < 0)
- axis = 0;
- if (axis > 2)
- axis = 2;
- m_upAxis = axis;
- }
+ void setUp(const btVector3& up);
+
+ const btVector3& getUp() { return m_up; }
/// This should probably be called setPositionIncrementPerSimulatorStep.
/// This is neither a direction nor a velocity, but the amount to
/// increment the position each simulation iteration, regardless
/// of dt.
/// This call will reset any velocity set by setVelocityForTimeInterval().
- virtual void setWalkDirection(const btVector3& walkDirection);
+ virtual void setWalkDirection(const btVector3& walkDirection);
/// Caller provides a velocity with which the character should move for
/// the given time period. After the time period, velocity is reset
@@ -134,37 +144,57 @@ public:
/// This call will reset any walk direction set by setWalkDirection().
/// Negative time intervals will result in no motion.
virtual void setVelocityForTimeInterval(const btVector3& velocity,
- btScalar timeInterval);
+ btScalar timeInterval);
+
+ virtual void setAngularVelocity(const btVector3& velocity);
+ virtual const btVector3& getAngularVelocity() const;
+
+ virtual void setLinearVelocity(const btVector3& velocity);
+ virtual btVector3 getLinearVelocity() const;
- void reset ( btCollisionWorld* collisionWorld );
- void warp (const btVector3& origin);
+ void setLinearDamping(btScalar d) { m_linearDamping = btClamped(d, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); }
+ btScalar getLinearDamping() const { return m_linearDamping; }
+ void setAngularDamping(btScalar d) { m_angularDamping = btClamped(d, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); }
+ btScalar getAngularDamping() const { return m_angularDamping; }
- void preStep ( btCollisionWorld* collisionWorld);
- void playerStep ( btCollisionWorld* collisionWorld, btScalar dt);
+ void reset(btCollisionWorld * collisionWorld);
+ void warp(const btVector3& origin);
- void setFallSpeed (btScalar fallSpeed);
- void setJumpSpeed (btScalar jumpSpeed);
- void setMaxJumpHeight (btScalar maxJumpHeight);
- bool canJump () const;
+ void preStep(btCollisionWorld * collisionWorld);
+ void playerStep(btCollisionWorld * collisionWorld, btScalar dt);
- void jump ();
+ void setStepHeight(btScalar h);
+ btScalar getStepHeight() const { return m_stepHeight; }
+ void setFallSpeed(btScalar fallSpeed);
+ btScalar getFallSpeed() const { return m_fallSpeed; }
+ void setJumpSpeed(btScalar jumpSpeed);
+ btScalar getJumpSpeed() const { return m_jumpSpeed; }
+ void setMaxJumpHeight(btScalar maxJumpHeight);
+ bool canJump() const;
- void setGravity(btScalar gravity);
- btScalar getGravity() const;
+ void jump(const btVector3& v = btVector3(0, 0, 0));
+
+ void applyImpulse(const btVector3& v) { jump(v); }
+
+ void setGravity(const btVector3& gravity);
+ btVector3 getGravity() const;
/// The max slope determines the maximum angle that the controller can walk up.
/// The slope angle is measured in radians.
void setMaxSlope(btScalar slopeRadians);
btScalar getMaxSlope() const;
+ void setMaxPenetrationDepth(btScalar d);
+ btScalar getMaxPenetrationDepth() const;
+
btPairCachingGhostObject* getGhostObject();
- void setUseGhostSweepTest(bool useGhostObjectSweepTest)
+ void setUseGhostSweepTest(bool useGhostObjectSweepTest)
{
m_useGhostObjectSweepTest = useGhostObjectSweepTest;
}
- bool onGround () const;
- void setUpInterpolate (bool value);
+ bool onGround() const;
+ void setUpInterpolate(bool value);
};
-#endif // BT_KINEMATIC_CHARACTER_CONTROLLER_H
+#endif // BT_KINEMATIC_CHARACTER_CONTROLLER_H