diff --git a/src/drivers/kilo2008/kdriver.cpp b/src/drivers/kilo2008/kdriver.cpp index 3ed610d0..48fabdb5 100644 --- a/src/drivers/kilo2008/kdriver.cpp +++ b/src/drivers/kilo2008/kdriver.cpp @@ -131,6 +131,8 @@ static int current_light = RM_LIGHT_HEAD1 | RM_LIGHT_HEAD2; KDriver::KDriver(int index) : mode_(NORMAL) { INDEX = index; + forcePitStop = false; + } @@ -716,6 +718,8 @@ void KDriver::initTrack(tTrack * t, void *carHandle, KILO_ATT_PITOFFSET, NULL, 10.0); brake_delay_ = GfParmGetNum(*carParmHandle, KILO_SECT_PRIV, KILO_ATT_BRDELAY, NULL, 10.0); + forcePitStop = GfParmGetNum(*carParmHandle, KILO_SECT_PRIV, + KILO_FORCE_PITSTOP, NULL, 0) == 1; // Create a pit stop strategy object & initialize fuel. strategy_ = new KStrategy(); @@ -774,7 +778,7 @@ void KDriver::CheckPitStatus(tSituation *s) { if ((car_->_distFromStartLine < pit_->n_entry() || car_->_distFromStartLine > pit_->n_end()) || car_->_fuel < 5.0) { - pit_->set_pitstop(strategy_->NeedPitstop()); + pit_->set_pitstop(strategy_->NeedPitstop() || forcePitStop); } } // if no pit planned @@ -823,6 +827,7 @@ double KDriver::FilterBColl(const double brake) { double mu = car_->_trkPos.seg->surface->kFriction; Opponent *o = opponents_->GetOppByState(OPP_COLL); if (o != NULL) { // Endangered species nearby +// if (BrakeDist(o->speed(), mu) if (BrakeDist(o->speed(), mu) + MIN(1.0, 0.5 + MAX(0.0, (speed() - o->speed()) / 4.0)) > o->distance()) { // Damn, too close, brake hard!!! @@ -1256,7 +1261,8 @@ double KDriver::FilterBPit(double brake) { tdble dl, dw; RtDistToPit(car_, track_, &dl, &dw); if (dl < PIT_BRAKE_AHEAD) { - if (BrakeDist(0.0, mu) > dl) +// if (BrakeDist(0.0, mu) > dl) + if (BrakeDist(0.0, 0.5f * mu) > dl) return 1.0; } } diff --git a/src/drivers/kilo2008/kdriver.h b/src/drivers/kilo2008/kdriver.h index a4a0111b..fce5f3a2 100644 --- a/src/drivers/kilo2008/kdriver.h +++ b/src/drivers/kilo2008/kdriver.h @@ -60,6 +60,7 @@ class LRaceLine; #define KILO_SECT_SKILL "skill" #define KILO_SKILL_LEVEL "level" #define KILO_SKILL_AGGRO "aggression" +#define KILO_FORCE_PITSTOP "force pit" enum { NORMAL = 1, AVOIDING, CORRECTING, PITTING, BEING_OVERLAPPED }; @@ -233,6 +234,9 @@ class KDriver { double MU_FACTOR; // [-] double (KDriver::*GET_DRIVEN_WHEEL_SPEED)(); + // DEBUG + bool forcePitStop; + // Class constants. static const double MAX_UNSTUCK_ANGLE; static const double UNSTUCK_TIME_LIMIT; diff --git a/src/drivers/kilo2008/pit.cpp b/src/drivers/kilo2008/pit.cpp index 7e7c3102..81e5b747 100644 --- a/src/drivers/kilo2008/pit.cpp +++ b/src/drivers/kilo2008/pit.cpp @@ -84,7 +84,8 @@ Pit::Pit(const tSituation * s, KDriver * driver, const double pitoffset) { points_[i].y *= sign; } // for i - points_[3].y = fabs(pitinfo_->driversPits->pos.toMiddle + 1.0) * sign; +// points_[3].y = fabs(pitinfo_->driversPits->pos.toMiddle + 1.0) * sign; + points_[3].y = fabs(pitinfo_->driversPits->pos.toMiddle + 2.0) * sign; spline_ = new Spline(NPOINTS, points_); } // if pit not null } // Pit::Pit