Fix 'auto-rescue' when not on rescue material

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3913 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
davemk
2009-08-24 10:05:10 +00:00
parent 96dc2a8fe2
commit fe6ed7b8f2
3 changed files with 11 additions and 13 deletions

View File

@@ -475,10 +475,7 @@ float Kart::getActualWheelForce()
*/
bool Kart::isOnGround() const
{
return m_vehicle->getWheelInfo(0).m_raycastInfo.m_isInContact &&
m_vehicle->getWheelInfo(1).m_raycastInfo.m_isInContact &&
m_vehicle->getWheelInfo(2).m_raycastInfo.m_isInContact &&
m_vehicle->getWheelInfo(3).m_raycastInfo.m_isInContact;
return (m_vehicle->getNumWheelsOnGround() == m_vehicle->getNumWheels());
} // isOnGround
//-----------------------------------------------------------------------------
/** The kart is near the ground, but not necesarily on it (small jumps). This

View File

@@ -37,6 +37,8 @@ btKart::btKart(const btVehicleTuning& tuning,btRigidBody* chassis,
{
m_track_connect_accel = track_connect_accel;
m_num_wheels_on_ground = 0;
m_zipper_active = false;
m_zipper_velocity = btScalar(0);
}
@@ -384,6 +386,7 @@ bool btKart::projectVehicleToSurface(const btVector3& ray, bool translate_vehicl
return true;
}
// ----------------------------------------------------------------------------
void btKart::updateVehicle( btScalar step )
{
@@ -414,10 +417,15 @@ void btKart::updateVehicle( btScalar step )
//
int i=0;
m_num_wheels_on_ground = 0;
for (i=0;i<m_wheelInfo.size();i++)
{
btScalar depth;
depth = rayCast( m_wheelInfo[i]);
if (m_wheelInfo[i].m_raycastInfo.m_isInContact)
m_num_wheels_on_ground++;
}
// Work around: make sure that either both wheels on one axis
@@ -471,11 +479,9 @@ void btKart::updateVehicle( btScalar step )
btVector3 relpos = wheel.m_raycastInfo.m_contactPointWS - getRigidBody()->getCenterOfMassPosition();
getRigidBody()->applyImpulse(impulse, relpos);
}
updateFriction( step);
@@ -619,19 +625,12 @@ void btKart::updateFriction(btScalar timeStep)
m_forwardImpulse.resize(numWheel);
m_sideImpulse.resize(numWheel);
int numWheelsOnGround = 0;
//collapse all those loops into one!
for (int i=0;i<getNumWheels();i++)
{
btWheelInfo& wheelInfo = m_wheelInfo[i];
class btRigidBody* groundObject = (class btRigidBody*) wheelInfo.m_raycastInfo.m_groundObject;
if (groundObject)
numWheelsOnGround++;
m_sideImpulse[i] = btScalar(0.);
m_forwardImpulse[i] = btScalar(0.);
}
{

View File

@@ -24,6 +24,7 @@ class btKart : public btRaycastVehicle
void defaultInit(const btVehicleTuning& tuning);
btScalar m_track_connect_accel;
btScalar m_skidding_factor;
int m_num_wheels_on_ground;
bool m_zipper_active;
btScalar m_zipper_velocity;
public:
@@ -36,6 +37,7 @@ public:
void setSkidding(btScalar sf) { m_skidding_factor = sf; }
virtual void updateVehicle(btScalar step);
void resetSuspension();
int getNumWheelsOnGround() const { return m_num_wheels_on_ground; }
void setRaycastWheelInfo(int wheelIndex , bool isInContact,
const btVector3& hitPoint,
const btVector3& hitNormal,btScalar depth);