usr_36GP - 10x per sec updates, improved collision braking.

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@1479 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: bb1da15d31f51ce1034d1c0d0b0a1b4c159afb2c
Former-commit-id: 02164a9c249248e3cc4fb064782bca8157c55ccf
This commit is contained in:
andrewsumner 2009-09-28 00:39:52 +00:00
parent 06a9846274
commit 705b103cf1
3 changed files with 40 additions and 6 deletions

View file

@ -55,6 +55,8 @@ const float Driver::USE_LEARNED_OFFSET_RANGE = 0.2f; // [m] if offset < this us
const float Driver::TEAM_REAR_DIST = 50.0f; // const float Driver::TEAM_REAR_DIST = 50.0f; //
const int Driver::TEAM_DAMAGE_CHANGE_LEAD = 700; // When to change position in the team? const int Driver::TEAM_DAMAGE_CHANGE_LEAD = 700; // When to change position in the team?
#define SKIPLIMIT 4
enum { FLYING_FRONT = 1, FLYING_BACK = 2, FLYING_SIDE = 4 }; enum { FLYING_FRONT = 1, FLYING_BACK = 2, FLYING_SIDE = 4 };
enum { STUCK_REVERSE = 1, STUCK_FORWARD = 2 }; enum { STUCK_REVERSE = 1, STUCK_FORWARD = 2 };
@ -192,7 +194,14 @@ Driver::Driver(int index) :
TIREMU(0.0f), TIREMU(0.0f),
OVERTAKE_OFFSET_INC(0.0f), OVERTAKE_OFFSET_INC(0.0f),
MU_FACTOR(0.0f), MU_FACTOR(0.0f),
track(NULL) track(NULL),
skipcount(0),
cmd_accel(0.0f),
cmd_brake(0.0f),
cmd_steer(0.0f),
cmd_gear(0),
cmd_clutch(0.0f),
cmd_light(0.0f)
{ {
INDEX = index; INDEX = index;
} }
@ -548,6 +557,9 @@ void Driver::newRace(tCarElt* car, tSituation *s)
steerLock = GfParmGetNum(car->_carHandle, SECT_STEER, PRM_STEERLOCK, (char *)NULL, 4.0f); steerLock = GfParmGetNum(car->_carHandle, SECT_STEER, PRM_STEERLOCK, (char *)NULL, 4.0f);
brakemargin = GfParmGetNum(car->_carHandle, SECT_PRIVATE, PRV_BRAKE_MARGIN, (char *)NULL, 0.0f); brakemargin = GfParmGetNum(car->_carHandle, SECT_PRIVATE, PRV_BRAKE_MARGIN, (char *)NULL, 0.0f);
myoffset = 0.0f; myoffset = 0.0f;
cmd_accel = cmd_brake = cmd_clutch = cmd_steer = cmd_light = 0.0f;
cmd_gear = 1;
skipcount = 0;
simtime = correcttimer = skill_adjust_limit = aligned_timer = stopped_timer = 0.0; simtime = correcttimer = skill_adjust_limit = aligned_timer = stopped_timer = 0.0;
avoidtime = frontavoidtime = 0.0; avoidtime = frontavoidtime = 0.0;
correctlimit = 1000.0; correctlimit = 1000.0;
@ -838,6 +850,21 @@ void Driver::drive(tSituation *s)
laststeer = car->_steerCmd; laststeer = car->_steerCmd;
memset(&car->ctrl, 0, sizeof(tCarCtrl)); memset(&car->ctrl, 0, sizeof(tCarCtrl));
if (skipcount > 0)
{
skipcount++;
if (skipcount >= SKIPLIMIT)
skipcount = 0;
car->_accelCmd = cmd_accel;
car->_brakeCmd = cmd_brake;
car->_steerCmd = cmd_steer;
car->_clutchCmd = cmd_clutch;
car->_gearCmd = cmd_gear;
return;
}
update(s); update(s);
//pit->setPitstop(true); //pit->setPitstop(true);
@ -1015,10 +1042,9 @@ float Driver::filterOverlap(float accel)
} }
for (i = 0; i < opponents->getNOpponents(); i++) { for (i = 0; i < opponents->getNOpponents(); i++) {
if ((opponent[i].getState() & OPP_LETPASS) && if (opponent[i].getState() & OPP_LETPASS)
fabs(car->_trkPos.toLeft - opponent[i].getCarPtr()->_trkPos.toLeft) > 5.0)
{ {
return accel*0.6f; return accel*0.4f;
} }
} }
return accel; return accel;
@ -3788,6 +3814,6 @@ float Driver::brakedist(float allowedspeed, float mu)
float d = (CA*mu + CW)/mass; float d = (CA*mu + CW)/mass;
float v1sqr = currentspeedsqr; float v1sqr = currentspeedsqr;
float v2sqr = allowedspeed*allowedspeed; float v2sqr = allowedspeed*allowedspeed;
return (-log((c + v2sqr*d)/(c + v1sqr*d))/(2.0f*d)); return (-log((c + v2sqr*d)/(c + v1sqr*d))/(2.0f*d)) + 1.0;
} }

View file

@ -288,6 +288,14 @@ class Driver {
// Track variables. // Track variables.
tTrack* track; tTrack* track;
int skipcount;
float cmd_accel;
float cmd_brake;
float cmd_steer;
int cmd_gear;
float cmd_clutch;
float cmd_light;
float (Driver::*GET_DRIVEN_WHEEL_SPEED)(); float (Driver::*GET_DRIVEN_WHEEL_SPEED)();
static Cardata *cardata; // Data about all cars shared by all instances. static Cardata *cardata; // Data about all cars shared by all instances.

View file

@ -44,7 +44,7 @@ Pit::Pit(tSituation *s, Driver *driver, float pitoffset)
pMID[2].x = pMID[3].x - pitinfo->len; pMID[2].x = pMID[3].x - pitinfo->len;
pMID[4].x = pMID[3].x + pitinfo->len; pMID[4].x = pMID[3].x + pitinfo->len;
pMID[0].x = pitinfo->pitEntry->lgfromstart + pitoffset; pMID[0].x = pitinfo->pitEntry->lgfromstart + pitoffset;
pMID[1].x = pitinfo->pitStart->lgfromstart; pMID[1].x = pitinfo->pitEntry->lgfromstart + pitinfo->pitEntry->length;
//pMID[5].x = pitinfo->pitEnd->lgfromstart + pitinfo->len/2.0f; //pMID[5].x = pitinfo->pitEnd->lgfromstart + pitinfo->len/2.0f;
//pMID[5].x = pMID[3].x + (pitinfo->nMaxPits - car->index) * pitinfo->len; //pMID[5].x = pMID[3].x + (pitinfo->nMaxPits - car->index) * pitinfo->len;
pMID[5].x = pitinfo->pitStart->lgfromstart + pitinfo->nMaxPits * pitinfo->len; pMID[5].x = pitinfo->pitStart->lgfromstart + pitinfo->nMaxPits * pitinfo->len;