1) Made some attributes private.

2) Fixed the AI calling rescue when crashing repeatedly (which hasn't
  d been working since bullet physics was used).



git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/trunk/supertuxkart@2138 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hikerstk 2008-06-24 06:29:35 +00:00
parent 8c6378df34
commit 370fa80994
8 changed files with 25 additions and 27 deletions

View File

@ -318,7 +318,7 @@ void Kart::reset()
// Set the brakes so that karts don't slide downhill
for(int i=0; i<4; i++) m_vehicle->setBrake(5.0f, i);
m_transform = m_reset_transform;
setTrans(m_reset_transform);
world->m_track->findRoadSector(getXYZ(), &m_track_sector);

View File

@ -50,6 +50,11 @@ class Smoke;
class Kart : public TerrainInfo, public Moveable
{
private:
btTransform m_reset_transform; // reset position
Vec3 m_curr_track_coords;
Vec3 m_last_track_coords;
protected:
bool m_on_road; // true if the kart is on top of the
// road path drawn by the drivelines
@ -62,9 +67,6 @@ protected:
KartControl m_controls; // The position of the karts controls
int m_track_sector; // index in driveline, special values
// e.g. UNKNOWN_SECTOR can be negative!
btTransform m_reset_transform; // reset position
Vec3 m_curr_track_coords;
Vec3 m_last_track_coords;
float m_max_speed; // maximum speed of the kart, computed from
float m_max_speed_reverse_ratio;
float m_wheelie_angle;

View File

@ -65,8 +65,6 @@ Moveable::~Moveable()
// The reset position must be set before calling reset
void Moveable::reset ()
{
m_collided = false;
m_crashed = false;
m_material_hot = NULL;
m_normal_hot = NULL;
if(m_body)

View File

@ -37,22 +37,19 @@ class Moveable
{
private:
btVector3 m_velocityLC; /* velocity in kart coordinates */
btTransform m_transform;
Vec3 m_hpr;
protected:
UserPointer m_user_pointer;
sgVec4* m_normal_hot; /* plane on which HOT was computed */
Material* m_material_hot; /* Material at HOT */
ssgTransform* m_model_transform; // The transform where the model is under
ssgTransform* m_shadow;
int m_collided;
int m_crashed;
sgVec3 m_surface_avoidance_vector ;
int m_first_time ;
sgCoord* m_history_velocity;
sgCoord* m_history_position;
btRigidBody* m_body;
btDefaultMotionState* m_motion_state;
btTransform m_transform;
Vec3 m_hpr;
public:
Moveable (bool bHasHistory=false);
@ -84,7 +81,7 @@ public:
void createBody(float mass, btTransform& trans,
btCollisionShape *shape);
const btTransform& getTrans() const {return m_transform;}
void setTrans (btTransform& t){m_transform=t;m_motion_state->setWorldTransform(t);}
void setTrans (const btTransform& t){m_transform=t;m_motion_state->setWorldTransform(t);}
}
; // class Moveable

View File

@ -213,14 +213,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies,
if(upB->is(UserPointer::UP_FLYABLE)) // 1.1 projectile hits track
m_all_collisions.push_back(upB, upA);
else if(upB->is(UserPointer::UP_KART))
// FIXME: sound disabled for now, since the chassis of the karts hits
// the track when accelerating, causing a constant crash sfx
// to be played. Might be fixed with better physics parameters
//upB->getPointerKart()->crashed();
#if defined(WIN32) && !defined(__CYGWIN__)
0 // avoid VS compiler warning while the above statement is commented out
#endif
;
upB->getPointerKart()->crashed();
}
// 2) object a is a kart
// =====================

View File

@ -208,9 +208,13 @@ void PlayerKart::crashed()
// noise by playing the crash sound over and over again. To prevent
// this, the crash sound is only played if there was at least 0.5
// seconds since the last time it was played (for this kart)
if(world->getTime() - m_time_last_crash_sound > 0.5f)
{
sound_manager->playSfx( SOUND_CRASH );
// FIXME: sound disabled for now, since the chassis of the karts hits
// the track when accelerating, causing a constant crash sfx
// to be played. Might be fixed with better physics parameters
//sound_manager->playSfx( SOUND_CRASH );
m_time_last_crash_sound = world->getTime();
}
} // crashed

View File

@ -130,6 +130,7 @@ void DefaultRobot::update( float delta )
/*And obviously general kart stuff*/
AutoKart::update( delta );
m_collided = false;
} // update
//-----------------------------------------------------------------------------
@ -175,7 +176,7 @@ void DefaultRobot::handle_braking()
//if the curve angle is bigger than what the kart can steer, brake
//even if we are in the inside, because the kart would be 'thrown'
//out of the curve.
if(!(m_curr_track_coords[0] > world->m_track->
if(!(getDistanceToCenter() > world->m_track->
getWidth()[m_track_sector] * -CURVE_INSIDE_PERC ||
m_curve_angle > getMaxSteerAngle()))
{
@ -185,7 +186,7 @@ void DefaultRobot::handle_braking()
}
else if( m_curve_angle < -MIN_TRACK_ANGLE ) //Next curve is right
{
if(!(m_curr_track_coords[0] < world->m_track->
if(!(getDistanceToCenter() < world->m_track->
getWidth()[m_track_sector] * CURVE_INSIDE_PERC ||
m_curve_angle < -getMaxSteerAngle()))
{
@ -226,7 +227,7 @@ void DefaultRobot::handle_steering()
*finite state machine.
*/
//Reaction to being outside of the road
if( fabsf(m_curr_track_coords[0]) + 0.5 >
if( fabsf(getDistanceToCenter()) + 0.5 >
world->m_track->getWidth()[m_track_sector] )
{
steer_angle = steer_to_point( world->m_track->
@ -254,7 +255,7 @@ void DefaultRobot::handle_steering()
}
else
{
if(m_curr_track_coords[0] > world->getKart(m_crashes.m_kart)->
if(getDistanceToCenter() > world->getKart(m_crashes.m_kart)->
getDistanceToCenter())
{
steer_angle = steer_to_angle( NEXT_SECTOR, -90.0f );
@ -496,8 +497,8 @@ void DefaultRobot::handle_rescue(const float DELTA)
//TODO: check if we collided against a dynamic object (ej.:kart) or
//against the track's static object.
//The m_crash_time measures if a kart has been crashing for too long
m_crash_time += (m_collided && isOnGround()) ? 3.0f * DELTA : -0.25f * DELTA;
m_crash_time += (m_collided && isOnGround()) ? 3.0f * DELTA : -0.25f * DELTA;
if( m_crash_time < 0.0f ) m_crash_time = 0.0f;
//Reaction to being stuck
@ -780,8 +781,9 @@ void DefaultRobot::reset()
m_future_sector = 0;
m_time_till_start = -1.0f;
m_crash_time = 0.0f;
m_collided = false;
m_time_since_stuck = 0.0f;

View File

@ -79,6 +79,7 @@ private:
//The crash percentage is how much of the time the AI has been crashing,
//if the AI has been crashing for some time, use the rescue.
float m_crash_time;
int m_collided; // true if the kart collided with the track
float m_time_since_last_shot;
int m_future_sector;
@ -132,6 +133,7 @@ public:
void update (float delta) ;
void reset ();
virtual void crashed() {m_collided = true;};
};
#endif