- added usr for mpa11 et mpa12

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

Former-commit-id: d0a4ef3656e8b4c90b54b11b6984189bd51aea3f
Former-commit-id: 8d45856e8005f6dde614aaeb499cf267f4a004a7
This commit is contained in:
torcs-ng 2015-07-27 21:02:37 +00:00
parent 1e31db3d2a
commit 3e28141da7
6 changed files with 2886 additions and 2830 deletions

View file

@ -36,7 +36,7 @@ SET(ROBOT_SOURCES
) )
# Official-only dandroid instances. # Official-only dandroid instances.
SET(ROBOT_CLONES dandroid_36GP) SET(ROBOT_CLONES dandroid_36GP dandroid_mpa12)
# The ubiquitous robot module and its clones. # The ubiquitous robot module and its clones.
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 2.0.0 SOVERSION 1.0.0 ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 2.0.0 SOVERSION 1.0.0

View file

@ -78,7 +78,8 @@ const char *sUndefined = "undefined";
#ifdef TARGET_SPEEDDREAMS #ifdef TARGET_SPEEDDREAMS
// Set robots's name and xml file pathname // Set robots's name and xml file pathname
static void setRobotName(const string name) { static void setRobotName(const string name)
{
char buffer[BUFSIZE]; char buffer[BUFSIZE];
snprintf(buffer, BUFSIZE, "drivers/%s/%s.xml", name.c_str(), name.c_str()); snprintf(buffer, BUFSIZE, "drivers/%s/%s.xml", name.c_str(), name.c_str());
nameBuffer = name; nameBuffer = name;

View file

@ -11,6 +11,8 @@ SET(ROBOT_INTERFACE LEGACY WELCOME
usr_ls1 usr_ls1
usr_ls2 usr_ls2
usr_mpa1 usr_mpa1
usr_mpa11
usr_mpa12
usr_36GP usr_36GP
usr_rs usr_rs
usr_lp1 usr_lp1
@ -38,7 +40,7 @@ SET(ROBOT_SOURCES
src/xmldefs.h) src/xmldefs.h)
# Official-only USR instances. # Official-only USR instances.
SET(ROBOT_CLONES usr_trb1 usr_sc usr_ls1 usr_ls2 usr_mpa1 usr_36GP usr_rs usr_lp1) SET(ROBOT_CLONES usr_trb1 usr_sc usr_ls1 usr_ls2 usr_mpa1 usr_mpa11 usr_mpa12 usr_36GP usr_rs usr_lp1)
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 3.0.0 SOVERSION 1.0.0 ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 3.0.0 SOVERSION 1.0.0
INTERFACE ${ROBOT_INTERFACE} INTERFACE ${ROBOT_INTERFACE}

View file

@ -63,6 +63,11 @@ Cardata *Driver::cardata = NULL;
static int current_light = RM_LIGHT_HEAD1 | RM_LIGHT_HEAD2; static int current_light = RM_LIGHT_HEAD1 | RM_LIGHT_HEAD2;
Driver::Driver(int index, const int robot_type) : Driver::Driver(int index, const int robot_type) :
HasABS(false),
HasESP(false),
HasTCL(false),
HasTYC(false),
NoTeamWaiting(0), NoTeamWaiting(0),
TeamWaitTime(0.0f), TeamWaitTime(0.0f),
truespeed(0.0f), truespeed(0.0f),
@ -91,11 +96,6 @@ Driver::Driver(int index, const int robot_type) :
allowcorrecting(0), allowcorrecting(0),
pitpos(0), pitpos(0),
HasABS(false),
HasESP(false),
HasTCL(false),
HasTYC(false),
prevspeedangle(0.0f), prevspeedangle(0.0f),
speedangle(0.0f), speedangle(0.0f),
angle(0.0f), angle(0.0f),
@ -188,10 +188,10 @@ Driver::Driver(int index, const int robot_type) :
brake_adjust_targ(1.0), brake_adjust_targ(1.0),
brake_adjust_perc(1.0), brake_adjust_perc(1.0),
fuelperlap(5.0f), fuelperlap(5.0f),
#ifdef SPEED_DREAMS #ifdef SPEED_DREAMS
teamIndex(0), teamIndex(0),
pitStopChecked(false), pitStopChecked(false),
#endif #endif
MAX_UNSTUCK_COUNT(0), MAX_UNSTUCK_COUNT(0),
INDEX(0), INDEX(0),
CARMASS(0.0f), CARMASS(0.0f),
@ -244,6 +244,14 @@ Driver::Driver(int index, const int robot_type) :
case USR_MPA1: case USR_MPA1:
robot_name = "usr_mpa1"; robot_name = "usr_mpa1";
break; break;
case USR_MPA11:
robot_name = "usr_mpa11";
break;
case USR_MPA12:
robot_name = "usr_mpa12";
break;
} }
} }
@ -1398,7 +1406,7 @@ void Driver::calcSkill()
// how long this skill mode to last for // how long this skill mode to last for
skill_adjust_limit = 5.0 + rand3 * 50.0; skill_adjust_limit = 5.0 + rand3 * 50.0;
skill_adjust_timer = simtime; skill_adjust_timer = simtime;
//fprintf(stderr,"SKILL: New Targets: Decel=%.3f Brake=%.3f Time=%.3f\n",decel_adjust_targ,brake_adjust_targ,skill_adjust_limit); //fprintf(stderr,"SKILL: New Targets: Decel=%.3f Brake=%.3f Time=%.3f\n",decel_adjust_targ,brake_adjust_targ,skill_adjust_limit);
} }
if (decel_adjust_perc < decel_adjust_targ) if (decel_adjust_perc < decel_adjust_targ)
@ -1789,7 +1797,7 @@ float Driver::correctSteering( float avoidsteer, float racesteer )
double climit = fabs(correctlimit * changelimit); double climit = fabs(correctlimit * changelimit);
if (DebugMsg & debug_steer) if (DebugMsg & debug_steer)
LogUSR.debug("CORRECT: cl=%.3f/%.3f=%.3f as=%.3f rs=%.3f NS=%.3f",correctlimit,changelimit,climit,avoidsteer,racesteer,lastNSasteer); LogUSR.debug("CORRECT: cl=%.3f/%.3f=%.3f as=%.3f rs=%.3f NS=%.3f",correctlimit,changelimit,climit,avoidsteer,racesteer,lastNSasteer);
if (/*mode == mode_correcting &&*/ simtime > 2.0f) if (/*mode == mode_correcting &&*/ simtime > 2.0f)
{ {
@ -1801,7 +1809,7 @@ if (DebugMsg & debug_steer)
if (fabs(steer-racesteer) <= car->_speed_x / 2000) if (fabs(steer-racesteer) <= car->_speed_x / 2000)
{ {
//steer = (float) MIN(racesteer, steer + correctlimit); //steer = (float) MIN(racesteer, steer + correctlimit);
if (DebugMsg & debug_steer) LogUSR.debug(" RA%.3f", racesteer); if (DebugMsg & debug_steer) LogUSR.debug(" RA%.3f", racesteer);
steer = racesteer; steer = racesteer;
lastNSasteer = (float)rldata->NSsteer; lastNSasteer = (float)rldata->NSsteer;
} }
@ -1809,7 +1817,7 @@ if (DebugMsg & debug_steer) LogUSR.debug(" RA%.3f", racesteer);
{ {
steer = (float) MIN(racesteer, MAX(steer + climit, racesteer - fabs(correctlimit) + climit)); steer = (float) MIN(racesteer, MAX(steer + climit, racesteer - fabs(correctlimit) + climit));
lastNSasteer = (float) MIN(rldata->NSsteer, MAX(lastNSasteer, rldata->NSsteer + climit)); lastNSasteer = (float) MIN(rldata->NSsteer, MAX(lastNSasteer, rldata->NSsteer + climit));
if (DebugMsg & debug_steer) LogUSR.debug(" MA%.3f", steer); if (DebugMsg & debug_steer) LogUSR.debug(" MA%.3f", steer);
} }
} }
else else
@ -1819,13 +1827,13 @@ if (DebugMsg & debug_steer) LogUSR.debug(" MA%.3f", steer);
//steer = (float) MAX(racesteer, steer-climit); //steer = (float) MAX(racesteer, steer-climit);
steer = racesteer; steer = racesteer;
lastNSasteer = (float)rldata->NSsteer; lastNSasteer = (float)rldata->NSsteer;
if (DebugMsg & debug_steer) LogUSR.debug(" RB%.3f", racesteer); if (DebugMsg & debug_steer) LogUSR.debug(" RB%.3f", racesteer);
} }
else else
{ {
steer = (float) MAX(racesteer, MIN(steer - fabs(climit), racesteer + fabs(correctlimit) + climit)); steer = (float) MAX(racesteer, MIN(steer - fabs(climit), racesteer + fabs(correctlimit) + climit));
lastNSasteer = (float) MAX(rldata->NSsteer, MIN(lastNSasteer, rldata->NSsteer + climit)); lastNSasteer = (float) MAX(rldata->NSsteer, MIN(lastNSasteer, rldata->NSsteer + climit));
if (DebugMsg & debug_steer) LogUSR.debug(" MB%.3f", steer); if (DebugMsg & debug_steer) LogUSR.debug(" MB%.3f", steer);
} }
} }
} }
@ -1858,12 +1866,12 @@ if (DebugMsg & debug_steer) LogUSR.debug(" MB%.3f", steer);
else else
//lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - (((155.0-speed)/10000) * correctspeed)); //lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - (((155.0-speed)/10000) * correctspeed));
lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - changelimit); lastNSasteer = (float) MAX(rldata->NSsteer, lastNSasteer - changelimit);
if (DebugMsg & debug_steer) LogUSR.debug(" I%.3f", steer); if (DebugMsg & debug_steer) LogUSR.debug(" I%.3f", steer);
} }
} }
if (DebugMsg & debug_steer) LogUSR.debug(" %.3f NS=%.3f\n", steer, lastNSasteer); if (DebugMsg & debug_steer) LogUSR.debug(" %.3f NS=%.3f\n", steer, lastNSasteer);
return steer; return steer;
} }
@ -2414,7 +2422,7 @@ float Driver::getOffset()
if ((opponent[i].getState() & OPP_SIDE)) if ((opponent[i].getState() & OPP_SIDE))
{ {
o = &opponent[i]; o = &opponent[i];
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE %s\n", car->_name, ocar->_name); LogUSR.debug("%s SIDE %s\n", car->_name, ocar->_name);
double sidedist = fabs(ocar->_trkPos.toLeft - car->_trkPos.toLeft); double sidedist = fabs(ocar->_trkPos.toLeft - car->_trkPos.toLeft);
@ -2449,7 +2457,7 @@ if (DebugMsg & debug_overtake)
//if (rldata->rInverse < 0.0) //if (rldata->rInverse < 0.0)
// myoffset -= rldata->rInverse * 500 * IncFactor; // myoffset -= rldata->rInverse * 500 * IncFactor;
avoidmovt = 1; avoidmovt = 1;
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE to Rgt %s, MOVING LEFT by %.3f, sm=%.3f sd=%.3f/%.3f sm-sd=%.3f mInv=%.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc*MAX(0.2f, MIN(1.5f, sdiff))),sidemargin,sidedist,sidedist2,sdiff,rldata->mInverse); LogUSR.debug("%s SIDE to Rgt %s, MOVING LEFT by %.3f, sm=%.3f sd=%.3f/%.3f sm-sd=%.3f mInv=%.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc*MAX(0.2f, MIN(1.5f, sdiff))),sidemargin,sidedist,sidedist2,sdiff,rldata->mInverse);
} else if (side <= 0.0) { } else if (side <= 0.0) {
double rinc = OVERTAKE_OFFSET_INC * (rgtinc * MAX(0.2, MIN(1.1, sdiff/4)) * 1.5); double rinc = OVERTAKE_OFFSET_INC * (rgtinc * MAX(0.2, MIN(1.1, sdiff/4)) * 1.5);
@ -2459,14 +2467,14 @@ if (DebugMsg & debug_overtake)
//if (rldata->rInverse > 0.0) //if (rldata->rInverse > 0.0)
// myoffset -= rldata->rInverse * 500 * IncFactor; // myoffset -= rldata->rInverse * 500 * IncFactor;
avoidmovt = 1; avoidmovt = 1;
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE to Lft %s, MOVING RIGHT by %.3f sm-sd=%.2f mo=%.3f\n",car->_name,ocar->_name,(OVERTAKE_OFFSET_INC*lftinc*MAX(1.0f, MIN(2.0f, sdiff))),sdiff,myoffset); LogUSR.debug("%s SIDE to Lft %s, MOVING RIGHT by %.3f sm-sd=%.2f mo=%.3f\n",car->_name,ocar->_name,(OVERTAKE_OFFSET_INC*lftinc*MAX(1.0f, MIN(2.0f, sdiff))),sdiff,myoffset);
} }
if (avoidmovt) if (avoidmovt)
sideratio = MIN(sidedist,sidedist2)/sidemargin; sideratio = MIN(sidedist,sidedist2)/sidemargin;
else if (DebugMsg & debug_overtake) else if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset); LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
} }
else if (sidedist > sidemargin+3.0) else if (sidedist > sidemargin+3.0)
{ {
@ -2478,7 +2486,7 @@ LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
car->_trkPos.toLeft < MIN(lane2left, 4.0 + fabs(nextCRinverse)*1000)) car->_trkPos.toLeft < MIN(lane2left, 4.0 + fabs(nextCRinverse)*1000))
{ {
myoffset -= (float) (OVERTAKE_OFFSET_INC*lftinc/4); myoffset -= (float) (OVERTAKE_OFFSET_INC*lftinc/4);
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE to Rgt %s, MOVING BACK TO RIGHT\n", car->_name, ocar->_name); LogUSR.debug("%s SIDE to Rgt %s, MOVING BACK TO RIGHT\n", car->_name, ocar->_name);
if (!avoidmode) if (!avoidmode)
avoidtime = MIN(simtime, avoidtime+deltaTime*0.5); avoidtime = MIN(simtime, avoidtime+deltaTime*0.5);
@ -2487,15 +2495,15 @@ if (DebugMsg & debug_overtake)
car->_trkPos.toRight < MIN(lane2right, 4.0 + fabs(nextCRinverse)*1000)) car->_trkPos.toRight < MIN(lane2right, 4.0 + fabs(nextCRinverse)*1000))
{ {
myoffset += (float) (OVERTAKE_OFFSET_INC*rgtinc/4); myoffset += (float) (OVERTAKE_OFFSET_INC*rgtinc/4);
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE to Lft %s, MOVING BACK TO LEFT\n", car->_name, ocar->_name); LogUSR.debug("%s SIDE to Lft %s, MOVING BACK TO LEFT\n", car->_name, ocar->_name);
if (!avoidmode) if (!avoidmode)
avoidtime = MIN(simtime, avoidtime+deltaTime*0.5); avoidtime = MIN(simtime, avoidtime+deltaTime*0.5);
} }
else if (DebugMsg & debug_overtake) else if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset); LogUSR.debug("%s SIDE %s, NO MOVE %.1f\n", car->_name, ocar->_name, myoffset);
} }
else if (DebugMsg & debug_overtake) else if (DebugMsg & debug_overtake)
LogUSR.debug("%s SIDE %s, NO MOVE AT ALL! %.1f\n", car->_name, ocar->_name, myoffset); LogUSR.debug("%s SIDE %s, NO MOVE AT ALL! %.1f\n", car->_name, ocar->_name, myoffset);
if (ocar->_trkPos.toLeft > car->_trkPos.toLeft) if (ocar->_trkPos.toLeft > car->_trkPos.toLeft)
@ -2593,11 +2601,11 @@ else if (DebugMsg & debug_overtake)
if (avoidingside != TR_STR) if (avoidingside != TR_STR)
{ {
int newside = checkSwitch(avoidingside, o, ocar); int newside = checkSwitch(avoidingside, o, ocar);
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug(" AVOIDING A %c\n", (avoidingside==TR_LFT?'L':'R')); LogUSR.debug(" AVOIDING A %c\n", (avoidingside==TR_LFT?'L':'R'));
if (newside != avoidingside) if (newside != avoidingside)
{ {
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug(" SWITCH 1 from %c to %c\n", (avoidingside==TR_LFT?'L':'R'),(newside==TR_LFT?'L':'R')); LogUSR.debug(" SWITCH 1 from %c to %c\n", (avoidingside==TR_LFT?'L':'R'),(newside==TR_LFT?'L':'R'));
avoidingside = newside; avoidingside = newside;
thismustmove = true; thismustmove = true;
@ -2641,20 +2649,20 @@ if (DebugMsg & debug_overtake)
if (rInverse > 0.0) if (rInverse > 0.0)
rinc += rInverse * 200 * IncFactor; rinc += rInverse * 200 * IncFactor;
myoffset -= (float) rinc; myoffset -= (float) rinc;
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s LFT %s, MOVING RIGHT %.3f/%.3f -> %.3f (rgtinc=%.2f (%.2f) rinc=%.2f)\n", car->_name, ocar->_name, (float) (OVERTAKE_OFFSET_INC*rgtinc),rinc,myoffset,rgtinc,lftinc,rinc); LogUSR.debug("%s LFT %s, MOVING RIGHT %.3f/%.3f -> %.3f (rgtinc=%.2f (%.2f) rinc=%.2f)\n", car->_name, ocar->_name, (float) (OVERTAKE_OFFSET_INC*rgtinc),rinc,myoffset,rgtinc,lftinc,rinc);
avoidmovt = 1; avoidmovt = 1;
} }
else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 && else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 &&
car->_trkPos.toRight < MIN(lane2right-1.0, 4.0 + fabs(nextCRinverse)*1000)) car->_trkPos.toRight < MIN(lane2right-1.0, 4.0 + fabs(nextCRinverse)*1000))
{ {
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s LFT %s, MOVING BACK TO LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc/2)); LogUSR.debug("%s LFT %s, MOVING BACK TO LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc/2));
myoffset += (float) (OVERTAKE_OFFSET_INC*lftinc)/2; myoffset += (float) (OVERTAKE_OFFSET_INC*lftinc)/2;
if (!avoidmode) if (!avoidmode)
avoidtime = MIN(simtime, avoidtime+deltaTime); avoidtime = MIN(simtime, avoidtime+deltaTime);
} }
else if (DebugMsg & debug_overtake) else if (DebugMsg & debug_overtake)
LogUSR.debug("%s LFT %s, HOLDING LINE\n",car->_name,ocar->_name); LogUSR.debug("%s LFT %s, HOLDING LINE\n",car->_name,ocar->_name);
} }
else // if (avoidingside == TR_RGT) else // if (avoidingside == TR_RGT)
@ -2665,7 +2673,7 @@ else if (DebugMsg & debug_overtake)
(o->getState() & OPP_COLL) || (o->getState() & OPP_COLL) ||
(prefer_side == TR_LFT && car->_trkPos.toLeft > MIN(lane2left, 3.0 + nextCRinverse*1000))) (prefer_side == TR_LFT && car->_trkPos.toLeft > MIN(lane2left, 3.0 + nextCRinverse*1000)))
{ {
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s RGT %s, MOVING LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc)); LogUSR.debug("%s RGT %s, MOVING LEFT %.3f\n",car->_name,ocar->_name,(float) (OVERTAKE_OFFSET_INC*lftinc));
double linc = OVERTAKE_OFFSET_INC * lftinc; double linc = OVERTAKE_OFFSET_INC * lftinc;
if (rInverse < 0.0) if (rInverse < 0.0)
@ -2676,13 +2684,13 @@ if (DebugMsg & debug_overtake)
else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 && else if (sidedist > car->_dimension_y + ocar->_dimension_y + 4.0 &&
car->_trkPos.toLeft < MIN(lane2left-1.0, 4.0 + fabs(nextCRinverse)*1000)) car->_trkPos.toLeft < MIN(lane2left-1.0, 4.0 + fabs(nextCRinverse)*1000))
{ {
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s RGT %s, MOVING BACK TO RIGHT %.3f\n", car->_name, ocar->_name,(float) (OVERTAKE_OFFSET_INC*rgtinc/2)); LogUSR.debug("%s RGT %s, MOVING BACK TO RIGHT %.3f\n", car->_name, ocar->_name,(float) (OVERTAKE_OFFSET_INC*rgtinc/2));
myoffset -= (float) (OVERTAKE_OFFSET_INC*rgtinc)/2; myoffset -= (float) (OVERTAKE_OFFSET_INC*rgtinc)/2;
if (!avoidmode) if (!avoidmode)
avoidtime = MIN(simtime, avoidtime+deltaTime); avoidtime = MIN(simtime, avoidtime+deltaTime);
} }
else if (DebugMsg & debug_overtake) else if (DebugMsg & debug_overtake)
LogUSR.debug("%s RGT %s, HOLDING LINE\n", car->_name, ocar->_name); LogUSR.debug("%s RGT %s, HOLDING LINE\n", car->_name, ocar->_name);
} }
@ -2736,7 +2744,7 @@ else if (DebugMsg & debug_overtake)
tCarElt *ocar = o->getCarPtr(); tCarElt *ocar = o->getCarPtr();
float side = car->_trkPos.toMiddle - ocar->_trkPos.toMiddle; float side = car->_trkPos.toMiddle - ocar->_trkPos.toMiddle;
float w = car->_trkPos.seg->width/WIDTHDIV-BORDER_OVERTAKE_MARGIN; float w = car->_trkPos.seg->width/WIDTHDIV-BORDER_OVERTAKE_MARGIN;
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s BEHIND %s (%d %d %d %d)\n", car->_name, ocar->_name,((o->getState() & OPP_LETPASS) && !o->isTeamMate()),(o->isTeamMate() && (car->_dammage - o->getDamage() > TEAM_DAMAGE_CHANGE_LEAD)),((o->getDistance() > -TEAM_REAR_DIST) && (o->getDistance() < -car->_dimension_x)),(car->race.laps == o->getCarPtr()->race.laps)); LogUSR.debug("%s BEHIND %s (%d %d %d %d)\n", car->_name, ocar->_name,((o->getState() & OPP_LETPASS) && !o->isTeamMate()),(o->isTeamMate() && (car->_dammage - o->getDamage() > TEAM_DAMAGE_CHANGE_LEAD)),((o->getDistance() > -TEAM_REAR_DIST) && (o->getDistance() < -car->_dimension_x)),(car->race.laps == o->getCarPtr()->race.laps));
if (side > 0.0f) { if (side > 0.0f) {
if (myoffset < w) { if (myoffset < w) {
@ -2764,8 +2772,8 @@ if (DebugMsg & debug_overtake)
} }
myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset))); myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset)));
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("%s BEHIND %s (%g)\n", car->_name, ocar->_name, myoffset); LogUSR.debug("%s BEHIND %s (%g)\n", car->_name, ocar->_name, myoffset);
} }
} }
@ -2802,8 +2810,8 @@ end_getoffset:
if (mode == mode_avoiding && !avoidmovt) if (mode == mode_avoiding && !avoidmovt)
avoidtime = MIN(simtime, avoidtime+deltaTime*1.5); avoidtime = MIN(simtime, avoidtime+deltaTime*1.5);
// minoffset = MAX(minoffset, MIN(1.5, rldata->offset)); // minoffset = MAX(minoffset, MIN(1.5, rldata->offset));
// maxoffset = MIN(maxoffset, MAX(track->width - 1.5, rldata->offset)); // maxoffset = MIN(maxoffset, MAX(track->width - 1.5, rldata->offset));
{ {
double mo = myoffset; double mo = myoffset;
myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset))); myoffset = (float) (MAX(minoffset, MIN(maxoffset, myoffset)));
@ -2846,7 +2854,7 @@ int Driver::checkSwitch( int side, Opponent *o, tCarElt *ocar )
switch (side) switch (side)
{ {
case TR_RGT: case TR_RGT:
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("CHECKSWITCH: Rgt - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft); LogUSR.debug("CHECKSWITCH: Rgt - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft);
if (nextCRinverse > 0.0) if (nextCRinverse > 0.0)
radius = 0.0; radius = 0.0;
@ -2856,7 +2864,7 @@ if (DebugMsg & debug_overtake)
xdist > sdiff + ydist + MAX(0.0, angle*10) && xdist > sdiff + ydist + MAX(0.0, angle*10) &&
track->width - ocatchleft > (car->_dimension_y + 3.0 + radius + speedchange)) track->width - ocatchleft > (car->_dimension_y + 3.0 + radius + speedchange))
{ {
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug(" Switch to his right (side=lft) - %d %d %d %d\n",(side==prefer_side),(ocatchleft<mcatchleft-1.5),(xdist>sdiff+ydist+MAX(0.0, angle*10)),(track->width-ocatchleft>(car->_dimension_y+3+radius+speedchange))); LogUSR.debug(" Switch to his right (side=lft) - %d %d %d %d\n",(side==prefer_side),(ocatchleft<mcatchleft-1.5),(xdist>sdiff+ydist+MAX(0.0, angle*10)),(track->width-ocatchleft>(car->_dimension_y+3+radius+speedchange)));
side = TR_LFT; side = TR_LFT;
} }
@ -2864,8 +2872,8 @@ if (DebugMsg & debug_overtake)
case TR_LFT: case TR_LFT:
default: default:
if (DebugMsg & debug_overtake) if (DebugMsg & debug_overtake)
LogUSR.debug("CHECKSWITCH: Lft - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft); LogUSR.debug("CHECKSWITCH: Lft - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",t_impact,deltamult,ocar->_trkPos.toLeft,ocatchleft,car->_trkPos.toLeft,mcatchleft);
if (nextCRinverse < 0.0) if (nextCRinverse < 0.0)
radius = 0.0; radius = 0.0;
if ((side == prefer_side || if ((side == prefer_side ||
@ -3462,7 +3470,7 @@ float Driver::filterBPit(float brake)
pit->setPitstop(false); pit->setPitstop(false);
return 0.0f; return 0.0f;
} else { } else {
// if (brakedist(0.0f, mu) > dist) { // if (brakedist(0.0f, mu) > dist) {
if (brakedist(0.0f, 0.5f*mu) > dist) { if (brakedist(0.0f, 0.5f*mu) > dist) {
return 2.0f; return 2.0f;
} else if (s > pit->getNPitLoc(pitpos)) { } else if (s > pit->getNPitLoc(pitpos)) {
@ -3514,8 +3522,8 @@ float Driver::filterBColl(float brake)
else else
collision = thiscollision; collision = thiscollision;
thisbrake = (float)MAX(thisbrake, (0.3f + (5.0 - collision)/4) * brakeratio); thisbrake = (float)MAX(thisbrake, (0.3f + (5.0 - collision)/4) * brakeratio);
if (DebugMsg & debug_brake) if (DebugMsg & debug_brake)
fprintf(stderr,"%s - %s BRAKE: ti=%.3f\n",car->_name,opponent[i].getCarPtr()->_name,opponent[i].getTimeImpact()); fprintf(stderr,"%s - %s BRAKE: ti=%.3f\n",car->_name,opponent[i].getCarPtr()->_name,opponent[i].getTimeImpact());
} }
} }
} }

View file

@ -53,7 +53,7 @@ class SimpleStrategy;
enum { TEAM_FRIEND=1, TEAM_FOE }; enum { TEAM_FRIEND=1, TEAM_FOE };
enum { avoidleft=1, avoidright=2, avoidside=4, avoidsideclosing=8, avoidback=16 }; enum { avoidleft=1, avoidright=2, avoidside=4, avoidsideclosing=8, avoidback=16 };
enum { debug_steer=1, debug_overtake=2, debug_brake=4 }; enum { debug_steer=1, debug_overtake=2, debug_brake=4 };
enum { USR_TRB1=1, USR_SC, USR_LS1, USR_LS2, USR_36GP, USR_RS, USR_LP1, USR_MPA1 }; enum { USR_TRB1=1, USR_SC, USR_LS1, USR_LS2, USR_36GP, USR_RS, USR_LP1, USR_MPA1, USR_MPA11, USR_MPA12 };
class Driver { class Driver {
public: public:

View file

@ -139,37 +139,6 @@ void* getFileHandle()
// Carset specific init functions // Carset specific init functions
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Schismatic init for usr_trb1
void SetupUSR_trb1()
{
// Add usr_trb1 specific initialization here
robot_type = USR_TRB1;
};
// Schismatic init for usr_ls2
void SetupUSR_ls2()
{
// Add usr_ls2 specific initialization here
robot_type = USR_LS2;
};
// Schismatic init for usr_sc
void SetupUSR_sc()
{
// Add usr_sc specific initialization here
robot_type = USR_SC;
};
// Schismatic init for usr_ls1
void SetupUSR_ls1()
{
// Add usr_ls1 specific initialization here
robot_type = USR_LS1;
};
// Schismatic init for usr_36GP // Schismatic init for usr_36GP
void SetupUSR_36GP() void SetupUSR_36GP()
{ {
@ -177,13 +146,6 @@ void SetupUSR_36GP()
robot_type = USR_36GP; robot_type = USR_36GP;
}; };
// Schismatic init for usr_rs
void SetupUSR_rs()
{
// Add usr_RS specific initialization here
robot_type = USR_RS;
};
// Schismatic init for usr_lp1 // Schismatic init for usr_lp1
void SetupUSR_lp1() void SetupUSR_lp1()
{ {
@ -191,6 +153,20 @@ void SetupUSR_lp1()
robot_type = USR_LP1; robot_type = USR_LP1;
}; };
// Schismatic init for usr_ls1
void SetupUSR_ls1()
{
// Add usr_ls1 specific initialization here
robot_type = USR_LS1;
};
// Schismatic init for usr_ls2
void SetupUSR_ls2()
{
// Add usr_ls2 specific initialization here
robot_type = USR_LS2;
};
// Schismatic init for usr_mpa1 // Schismatic init for usr_mpa1
void SetupUSR_mpa1() void SetupUSR_mpa1()
{ {
@ -198,6 +174,41 @@ void SetupUSR_mpa1()
robot_type = USR_MPA1; robot_type = USR_MPA1;
}; };
// Schismatic init for usr_mpa11
void SetupUSR_mpa11()
{
// Add usr_mpa1 specific initialization here
robot_type = USR_MPA11;
};
// Schismatic init for usr_mpa12
void SetupUSR_mpa12()
{
// Add usr_mpa1 specific initialization here
robot_type = USR_MPA12;
};
// Schismatic init for usr_rs
void SetupUSR_rs()
{
// Add usr_RS specific initialization here
robot_type = USR_RS;
};
// Schismatic init for usr_sc
void SetupUSR_sc()
{
// Add usr_sc specific initialization here
robot_type = USR_SC;
};
// Schismatic init for usr_trb1
void SetupUSR_trb1()
{
// Add usr_trb1 specific initialization here
robot_type = USR_TRB1;
};
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Carset specific entry points (functions) // Carset specific entry points (functions)
@ -276,6 +287,36 @@ extern "C" int usr_mpa1(tModInfo *ModInfo)
return ret; return ret;
} }
// Schismatic entry point for usr_mpa1
extern "C" int usr_mpa11(tModInfo *ModInfo)
{
int ret = -1;
setRobotName("usr_mpa11");
robot_type = USR_MPA11;
void *robot_settings = getFileHandle();
if (robot_settings)
{
ret = usr(ModInfo);
}
return ret;
}
// Schismatic entry point for usr_mpa1
extern "C" int usr_mpa12(tModInfo *ModInfo)
{
int ret = -1;
setRobotName("usr_mpa12");
robot_type = USR_MPA12;
void *robot_settings = getFileHandle();
if (robot_settings)
{
ret = usr(ModInfo);
}
return ret;
}
// Schismatic entry point for usr_36GP // Schismatic entry point for usr_36GP
extern "C" int usr_36GP(tModInfo *ModInfo) extern "C" int usr_36GP(tModInfo *ModInfo)
{ {
@ -418,6 +459,10 @@ extern "C" int moduleWelcome(const tModWelcomeIn* welcomeIn,
SetupUSR_lp1(); SetupUSR_lp1();
else if (strncmp(robot_name,"usr_mpa1", strlen("usr_mpa1")) == 0) else if (strncmp(robot_name,"usr_mpa1", strlen("usr_mpa1")) == 0)
SetupUSR_mpa1(); SetupUSR_mpa1();
else if (strncmp(robot_name,"usr_mpa11", strlen("usr_mpa11")) == 0)
SetupUSR_mpa11();
else if (strncmp(robot_name,"usr_mpa12", strlen("usr_mpa12")) == 0)
SetupUSR_mpa12();
// Set max nb of interfaces to return. // Set max nb of interfaces to return.