Sirikata
|
BulletCharacterController is an object that supports a sliding motion in a world. More...
#include <BulletCharacterController.hpp>
Public Member Functions | |
BulletCharacterController (btPairCachingGhostObject *ghostObject, btConvexShape *convexShape, btScalar stepHeight, int upAxis=1) | |
~BulletCharacterController () | |
virtual void | updateAction (btCollisionWorld *collisionWorld, btScalar deltaTime) |
btActionInterface interface | |
void | debugDraw (btIDebugDraw *debugDrawer) |
btActionInterface interface | |
void | setUpAxis (int axis) |
virtual void | setWalkDirection (const btVector3 &walkDirection) |
This should probably be called setPositionIncrementPerSimulatorStep. | |
virtual void | setVelocityForTimeInterval (const btVector3 &velocity, btScalar timeInterval) |
Caller provides a velocity with which the character should move for the given time period. | |
void | reset () |
void | warp (const btVector3 &origin) |
void | preStep (btCollisionWorld *collisionWorld) |
void | playerStep (btCollisionWorld *collisionWorld, btScalar dt) |
void | setFallSpeed (btScalar fallSpeed) |
void | setJumpSpeed (btScalar jumpSpeed) |
void | setMaxJumpHeight (btScalar maxJumpHeight) |
bool | canJump () const |
void | jump () |
void | setGravity (btScalar gravity) |
btScalar | getGravity () const |
void | setMaxSlope (btScalar slopeRadians) |
The max slope determines the maximum angle that the controller can walk up. | |
btScalar | getMaxSlope () const |
btPairCachingGhostObject * | getGhostObject () |
void | setUseGhostSweepTest (bool useGhostObjectSweepTest) |
bool | onGround () const |
Protected Member Functions | |
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) |
Static Protected Member Functions | |
static btVector3 * | getUpAxisDirections () |
Protected Attributes | |
btScalar | m_halfHeight |
btPairCachingGhostObject * | m_ghostObject |
btConvexShape * | m_convexShape |
btScalar | m_verticalVelocity |
btScalar | m_verticalOffset |
btScalar | m_fallSpeed |
btScalar | m_jumpSpeed |
btScalar | m_maxJumpHeight |
btScalar | m_maxSlopeRadians |
btScalar | m_maxSlopeCosine |
btScalar | m_gravity |
btScalar | m_turnAngle |
btScalar | m_stepHeight |
btScalar | m_addedMargin |
btVector3 | m_walkDirection |
this is the desired walk direction, set by the user | |
btVector3 | m_normalizedDirection |
btVector3 | m_currentPosition |
btScalar | m_currentStepOffset |
btVector3 | m_targetPosition |
btManifoldArray | m_manifoldArray |
keep track of the contact manifolds | |
bool | m_touchingContact |
btVector3 | m_touchingNormal |
bool | m_wasOnGround |
bool | m_wasJumping |
bool | m_useGhostObjectSweepTest |
bool | m_useWalkDirection |
btScalar | m_velocityTimeInterval |
int | m_upAxis |
BulletCharacterController 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 BulletCharacterController and dynamic rigid bodies needs to be explicity implemented by the user.
Sirikata::BulletCharacterController::BulletCharacterController | ( | btPairCachingGhostObject * | ghostObject, |
btConvexShape * | convexShape, | ||
btScalar | stepHeight, | ||
int | upAxis = 1 |
||
) |
References m_addedMargin, m_convexShape, m_fallSpeed, m_ghostObject, m_gravity, m_jumpSpeed, m_stepHeight, m_turnAngle, m_upAxis, m_useGhostObjectSweepTest, m_useWalkDirection, m_velocityTimeInterval, m_verticalOffset, m_verticalVelocity, m_walkDirection, m_wasJumping, m_wasOnGround, and setMaxSlope().
Sirikata::BulletCharacterController::~BulletCharacterController | ( | ) |
bool Sirikata::BulletCharacterController::canJump | ( | ) | const |
References onGround().
Referenced by jump().
btVector3 Sirikata::BulletCharacterController::computeReflectionDirection | ( | const btVector3 & | direction, |
const btVector3 & | normal | ||
) | [protected] |
Referenced by updateTargetPositionBasedOnCollision().
void Sirikata::BulletCharacterController::debugDraw | ( | btIDebugDraw * | debugDrawer | ) |
btActionInterface interface
btPairCachingGhostObject * Sirikata::BulletCharacterController::getGhostObject | ( | ) |
References m_ghostObject.
Referenced by stepDown(), stepForwardAndStrafe(), and stepUp().
btScalar Sirikata::BulletCharacterController::getGravity | ( | ) | const |
References m_gravity.
btScalar Sirikata::BulletCharacterController::getMaxSlope | ( | ) | const |
References m_maxSlopeRadians.
btVector3 * Sirikata::BulletCharacterController::getUpAxisDirections | ( | ) | [static, protected] |
Referenced by stepDown(), and stepUp().
void Sirikata::BulletCharacterController::jump | ( | ) |
References canJump(), m_jumpSpeed, m_verticalVelocity, and m_wasJumping.
bool Sirikata::BulletCharacterController::onGround | ( | ) | const |
References m_verticalOffset, and m_verticalVelocity.
Referenced by canJump(), and playerStep().
btVector3 Sirikata::BulletCharacterController::parallelComponent | ( | const btVector3 & | direction, |
const btVector3 & | normal | ||
) | [protected] |
Referenced by perpindicularComponent(), and updateTargetPositionBasedOnCollision().
btVector3 Sirikata::BulletCharacterController::perpindicularComponent | ( | const btVector3 & | direction, |
const btVector3 & | normal | ||
) | [protected] |
References parallelComponent().
Referenced by updateTargetPositionBasedOnCollision().
void Sirikata::BulletCharacterController::playerStep | ( | btCollisionWorld * | collisionWorld, |
btScalar | dt | ||
) |
References m_currentPosition, m_fallSpeed, m_ghostObject, m_gravity, m_jumpSpeed, m_useWalkDirection, m_velocityTimeInterval, m_verticalOffset, m_verticalVelocity, m_walkDirection, m_wasOnGround, onGround(), stepDown(), stepForwardAndStrafe(), and stepUp().
Referenced by updateAction().
void Sirikata::BulletCharacterController::preStep | ( | btCollisionWorld * | collisionWorld | ) |
References m_currentPosition, m_ghostObject, m_targetPosition, m_touchingContact, and recoverFromPenetration().
Referenced by updateAction().
bool Sirikata::BulletCharacterController::recoverFromPenetration | ( | btCollisionWorld * | collisionWorld | ) | [protected] |
References Sirikata::JS::JSVisible::dist(), m_currentPosition, m_ghostObject, m_manifoldArray, and m_touchingNormal.
Referenced by preStep().
void Sirikata::BulletCharacterController::reset | ( | ) |
void Sirikata::BulletCharacterController::setFallSpeed | ( | btScalar | fallSpeed | ) |
References m_fallSpeed.
void Sirikata::BulletCharacterController::setGravity | ( | btScalar | gravity | ) |
References m_gravity.
void Sirikata::BulletCharacterController::setJumpSpeed | ( | btScalar | jumpSpeed | ) |
References m_jumpSpeed.
void Sirikata::BulletCharacterController::setMaxJumpHeight | ( | btScalar | maxJumpHeight | ) |
References m_maxJumpHeight.
void Sirikata::BulletCharacterController::setMaxSlope | ( | btScalar | slopeRadians | ) |
The max slope determines the maximum angle that the controller can walk up.
The slope angle is measured in radians.
References m_maxSlopeCosine, and m_maxSlopeRadians.
Referenced by BulletCharacterController().
void Sirikata::BulletCharacterController::setUpAxis | ( | int | axis | ) | [inline] |
References m_upAxis.
void Sirikata::BulletCharacterController::setUseGhostSweepTest | ( | bool | useGhostObjectSweepTest | ) | [inline] |
References m_useGhostObjectSweepTest.
void Sirikata::BulletCharacterController::setVelocityForTimeInterval | ( | const btVector3 & | velocity, |
btScalar | timeInterval | ||
) | [virtual] |
Caller provides a velocity with which the character should move for the given time period.
After the time period, velocity is reset to zero. This call will reset any walk direction set by setWalkDirection(). Negative time intervals will result in no motion.
void Sirikata::BulletCharacterController::setWalkDirection | ( | const btVector3 & | walkDirection | ) | [virtual] |
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().
Referenced by Sirikata::BulletCharacterObject::preTick().
void Sirikata::BulletCharacterController::stepDown | ( | btCollisionWorld * | collisionWorld, |
btScalar | dt | ||
) | [protected] |
References getGhostObject(), getUpAxisDirections(), m_convexShape, m_currentPosition, m_currentStepOffset, m_ghostObject, m_maxSlopeCosine, m_stepHeight, m_targetPosition, m_upAxis, m_useGhostObjectSweepTest, m_verticalOffset, m_verticalVelocity, m_wasJumping, and m_wasOnGround.
Referenced by playerStep().
void Sirikata::BulletCharacterController::stepForwardAndStrafe | ( | btCollisionWorld * | collisionWorld, |
const btVector3 & | walkMove | ||
) | [protected] |
void Sirikata::BulletCharacterController::stepUp | ( | btCollisionWorld * | collisionWorld | ) | [protected] |
References getGhostObject(), getUpAxisDirections(), m_addedMargin, m_convexShape, m_currentPosition, m_currentStepOffset, m_ghostObject, m_stepHeight, m_targetPosition, m_upAxis, m_useGhostObjectSweepTest, m_verticalOffset, and m_verticalVelocity.
Referenced by playerStep().
virtual void Sirikata::BulletCharacterController::updateAction | ( | btCollisionWorld * | collisionWorld, |
btScalar | deltaTime | ||
) | [inline, virtual] |
btActionInterface interface
References playerStep(), and preStep().
void Sirikata::BulletCharacterController::updateTargetPositionBasedOnCollision | ( | const btVector3 & | hit_normal, |
btScalar | tangentMag = btScalar(0.0) , |
||
btScalar | normalMag = btScalar(1.0) |
||
) | [protected] |
References computeReflectionDirection(), m_currentPosition, m_targetPosition, parallelComponent(), and perpindicularComponent().
Referenced by stepForwardAndStrafe().
void Sirikata::BulletCharacterController::warp | ( | const btVector3 & | origin | ) |
References m_ghostObject.
btScalar Sirikata::BulletCharacterController::m_addedMargin [protected] |
Referenced by BulletCharacterController(), stepForwardAndStrafe(), and stepUp().
btConvexShape* Sirikata::BulletCharacterController::m_convexShape [protected] |
Referenced by BulletCharacterController(), stepDown(), stepForwardAndStrafe(), and stepUp().
btVector3 Sirikata::BulletCharacterController::m_currentPosition [protected] |
Referenced by playerStep(), preStep(), recoverFromPenetration(), stepDown(), stepForwardAndStrafe(), stepUp(), and updateTargetPositionBasedOnCollision().
btScalar Sirikata::BulletCharacterController::m_currentStepOffset [protected] |
Referenced by stepDown(), and stepUp().
btScalar Sirikata::BulletCharacterController::m_fallSpeed [protected] |
Referenced by BulletCharacterController(), playerStep(), and setFallSpeed().
btPairCachingGhostObject* Sirikata::BulletCharacterController::m_ghostObject [protected] |
Referenced by BulletCharacterController(), getGhostObject(), playerStep(), preStep(), recoverFromPenetration(), stepDown(), stepForwardAndStrafe(), stepUp(), and warp().
btScalar Sirikata::BulletCharacterController::m_gravity [protected] |
Referenced by BulletCharacterController(), getGravity(), playerStep(), and setGravity().
btScalar Sirikata::BulletCharacterController::m_halfHeight [protected] |
btScalar Sirikata::BulletCharacterController::m_jumpSpeed [protected] |
Referenced by BulletCharacterController(), jump(), playerStep(), and setJumpSpeed().
btManifoldArray Sirikata::BulletCharacterController::m_manifoldArray [protected] |
keep track of the contact manifolds
Referenced by recoverFromPenetration().
btScalar Sirikata::BulletCharacterController::m_maxJumpHeight [protected] |
Referenced by setMaxJumpHeight().
btScalar Sirikata::BulletCharacterController::m_maxSlopeCosine [protected] |
Referenced by setMaxSlope(), and stepDown().
btScalar Sirikata::BulletCharacterController::m_maxSlopeRadians [protected] |
Referenced by getMaxSlope(), and setMaxSlope().
btVector3 Sirikata::BulletCharacterController::m_normalizedDirection [protected] |
Referenced by stepForwardAndStrafe().
btScalar Sirikata::BulletCharacterController::m_stepHeight [protected] |
Referenced by BulletCharacterController(), stepDown(), and stepUp().
btVector3 Sirikata::BulletCharacterController::m_targetPosition [protected] |
Referenced by preStep(), stepDown(), stepForwardAndStrafe(), stepUp(), and updateTargetPositionBasedOnCollision().
bool Sirikata::BulletCharacterController::m_touchingContact [protected] |
Referenced by preStep(), and stepForwardAndStrafe().
btVector3 Sirikata::BulletCharacterController::m_touchingNormal [protected] |
Referenced by recoverFromPenetration(), and stepForwardAndStrafe().
btScalar Sirikata::BulletCharacterController::m_turnAngle [protected] |
Referenced by BulletCharacterController().
int Sirikata::BulletCharacterController::m_upAxis [protected] |
Referenced by BulletCharacterController(), setUpAxis(), stepDown(), and stepUp().
bool Sirikata::BulletCharacterController::m_useGhostObjectSweepTest [protected] |
Referenced by BulletCharacterController(), setUseGhostSweepTest(), stepDown(), stepForwardAndStrafe(), and stepUp().
bool Sirikata::BulletCharacterController::m_useWalkDirection [protected] |
Referenced by BulletCharacterController(), and playerStep().
btScalar Sirikata::BulletCharacterController::m_velocityTimeInterval [protected] |
Referenced by BulletCharacterController(), and playerStep().
btScalar Sirikata::BulletCharacterController::m_verticalOffset [protected] |
Referenced by BulletCharacterController(), onGround(), playerStep(), stepDown(), and stepUp().
btScalar Sirikata::BulletCharacterController::m_verticalVelocity [protected] |
Referenced by BulletCharacterController(), jump(), onGround(), playerStep(), stepDown(), and stepUp().
btVector3 Sirikata::BulletCharacterController::m_walkDirection [protected] |
this is the desired walk direction, set by the user
Referenced by BulletCharacterController(), and playerStep().
bool Sirikata::BulletCharacterController::m_wasJumping [protected] |
Referenced by BulletCharacterController(), jump(), and stepDown().
bool Sirikata::BulletCharacterController::m_wasOnGround [protected] |
Referenced by BulletCharacterController(), playerStep(), and stepDown().