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:
@@ -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
|
||||
|
||||
@@ -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.);
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user