usr_GP36 - committed updates/fixes to skilling and overtake behaviour
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@585 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 421bb00c3ac0f45b4cd0b0a0066c2f8b981e4101 Former-commit-id: 31e54c76e54b5af90ed26076775947c574eec2b0
This commit is contained in:
parent
13611f9d4e
commit
c39f6e9030
2 changed files with 21 additions and 17 deletions
|
@ -228,9 +228,13 @@ void Driver::initTrack(tTrack* t, void *carHandle, void **carParmHandle, tSituat
|
|||
snprintf(buffer, BUFSIZE, "config/raceman/extra/skill.xml");
|
||||
void *skillHandle = GfParmReadFile(buffer, GFPARM_RMODE_REREAD);
|
||||
if (skillHandle)
|
||||
global_skill = GfParmGetNum(skillHandle, "skill", "level", (char *) NULL, 0.0);
|
||||
{
|
||||
global_skill = GfParmGetNum(skillHandle, (char *)"skill", (char *)"level", (char *) NULL, 10.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
global_skill = 0.0f;
|
||||
}
|
||||
global_skill = MAX(0.0f, MIN(10.0f, global_skill));
|
||||
|
||||
float driver_skill = 0.0f;
|
||||
|
@ -375,7 +379,6 @@ void Driver::newRace(tCarElt* car, tSituation *s)
|
|||
raceline = new LRaceLine();
|
||||
raceline->NewRace( car, s );
|
||||
raceline->setSkill( skill );
|
||||
fprintf(stderr,"\n\n\n%s: SKILL = global %.2f, total %.2f, aggression %.2f\n\n",car->_name,global_skill,skill,driver_aggression);
|
||||
raceline->InitTrack(track, s);
|
||||
raceline->setCW( CW );
|
||||
|
||||
|
@ -1223,7 +1226,7 @@ double Driver::calcSteer( double targetAngle, int rl )
|
|||
double sa = MAX(-0.3, MIN(0.3, speedangle/3));
|
||||
//double anglediff = (sa - angle) * (0.3 + fabs(angle)/6);
|
||||
double anglediff = (speedangle - nextangle) * (0.1 + fabs(nextangle)/6);
|
||||
steer += (float) (anglediff*0.5);
|
||||
steer += (float) (anglediff*0.7);
|
||||
}
|
||||
|
||||
if (fabs(angle) > 1.2)
|
||||
|
@ -1702,13 +1705,14 @@ bool Driver::canOvertake( Opponent *o, double *mincatchdist, bool outside, bool
|
|||
double otry_factor = (lenient ? (0.2 + (1.0 - ((simtime-frontavoidtime)/7.0)) * 0.8) : 1.0);
|
||||
double overtakecaution = MAX(0.0, rldata->overtakecaution + (outside ? MIN(0.0, car->_accel_x/8) : 0.0)) - driver_aggression/2;
|
||||
double orInv=0.0, oAspeed=0.0;
|
||||
raceline->getOpponentInfo(o->getDistance(), &orInv, &oAspeed);
|
||||
raceline->getOpponentInfo(o->getDistance(), &oAspeed, &orInv);
|
||||
double rInv = MAX(fabs(rldata->rInverse), fabs(orInv));
|
||||
double distance = o->getDistance() * otry_factor * MAX(0.5, 1.0 - (ocar->_pos > car->_pos ? MIN(o->getDistance()/2, 3.0) : 0.0));
|
||||
double speed = MIN(rldata->avspeed, MIN(oAspeed, getSpeed() + MAX(0.0, (30.0 - distance) * MAX(0.1, 1.0 - rInv*70))));
|
||||
double speed = MIN(rldata->avspeed, MIN(oAspeed, getSpeed() + MAX(0.0, (30.0 - distance) * MAX(0.1, 1.0 - MAX(0.0, rInv-0.001)*80))));
|
||||
double ospeed = o->getSpeed();
|
||||
|
||||
double speeddiff = MAX((15.0-(rInv*1000*1.0+overtakecaution/2)) - distance, fabs(speed - ospeed) * (8 - MIN(5.5, rInv*300)));
|
||||
//double speeddiff = MAX((15.0-(rInv*1000*1.0+overtakecaution/2)) - distance, fabs(speed - ospeed) * (8 - MIN(5.5, rInv*300)));
|
||||
double speeddiff = speed - ospeed;
|
||||
if (outside)
|
||||
ospeed *= 1.0 + rInv*3;
|
||||
double catchdist = (double) MIN((speed*distance)/(speed-ospeed), distance*CATCH_FACTOR) * otry_factor;
|
||||
|
@ -1716,12 +1720,12 @@ bool Driver::canOvertake( Opponent *o, double *mincatchdist, bool outside, bool
|
|||
if (catchdist < *mincatchdist+0.1 && distance < MIN(speeddiff, catchdist/2 + 5.0))
|
||||
{
|
||||
if (DebugMsg & debug_overtake)
|
||||
fprintf(stderr,"%.1f %s: OVERTAKE! (cd %.1f<%.1f) (dist %.1f (%.1f) < (%.1f-%.1f)*X = %.1f caut=%.1f\n",otry_factor,ocar->_name,catchdist,*mincatchdist,distance,o->getDistance(),speed,ospeed,speeddiff,overtakecaution);
|
||||
fprintf(stderr,"%.1f %s: OVERTAKE! (cd %.1f<%.1f) (dist %.1f (%.1f) < (%.1f-%.1f)*X = %.1f caut=%.1f avspd=%.1f oAspd=%.1f\n",otry_factor,ocar->_name,catchdist,*mincatchdist,distance,o->getDistance(),speed,ospeed,speeddiff,overtakecaution,rldata->avspeed,oAspeed);
|
||||
*mincatchdist = catchdist;
|
||||
return true;
|
||||
}
|
||||
else if (DebugMsg & debug_overtake)
|
||||
fprintf(stderr,"%.1f %s: FAIL!!!!! (cd %.1f<%.1f) (dist %.1f < (%.1f-%.1f)*2 = %.1f caut=%.1f\n",otry_factor,ocar->_name,catchdist,*mincatchdist,distance,speed,ospeed,speeddiff,overtakecaution);
|
||||
fprintf(stderr,"%.1f %s: FAIL!!!!! (cd %.1f<%.1f) (dist %.1f (%.1f) < (%.1f-%.1f)*X = %.1f caut=%.1f avspd=%.1f oAspd=%.1f\n",otry_factor,ocar->_name,catchdist,*mincatchdist,distance,o->getDistance(),speed,ospeed,speeddiff,overtakecaution,rldata->avspeed,oAspeed);
|
||||
#else
|
||||
double distance = o->getDistance();
|
||||
double speed = MIN(rldata->avspeed, getSpeed() + MAX(0.0, (getSpeed()/3 - distance)/2));
|
||||
|
@ -2572,10 +2576,12 @@ fprintf(stderr,"CHECKSWITCH: Rgt - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",
|
|||
if (nextCRinverse > 0.0)
|
||||
radius = 0.0;
|
||||
if ((side == prefer_side ||
|
||||
ocatchleft < mcatchleft - 1.5 ||
|
||||
xdist > sdiff + ydist + MAX(0.0, angle*10)) &&
|
||||
ocatchleft < mcatchleft - 1.5) &&
|
||||
xdist > sdiff + ydist + MAX(0.0, angle*10) &&
|
||||
track->width - ocatchleft > (car->_dimension_y + 3.0 + radius + speedchange))
|
||||
{
|
||||
if (DebugMsg & debug_overtake)
|
||||
fprintf(stderr," 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;
|
||||
}
|
||||
break;
|
||||
|
@ -2587,8 +2593,8 @@ fprintf(stderr,"CHECKSWITCH: Lft - ti=%.2f dm=%.1f o=%.2f->%.2f m=%.2f->%.2f\n",
|
|||
if (nextCRinverse < 0.0)
|
||||
radius = 0.0;
|
||||
if ((side == prefer_side ||
|
||||
ocatchleft > mcatchleft + 1.5 ||
|
||||
xdist > sdiff + (-ydist) + MAX(0.0, -angle*10)) &&
|
||||
ocatchleft > mcatchleft + 1.5) &&
|
||||
xdist > sdiff + (-ydist) + MAX(0.0, -angle*10) &&
|
||||
ocatchleft > (car->_dimension_y + 3.0 + radius + speedchange))
|
||||
{
|
||||
side = TR_RGT;
|
||||
|
@ -2965,7 +2971,6 @@ void Driver::initCw()
|
|||
float cx = GfParmGetNum(car->_carHandle, SECT_AERODYNAMICS, PRM_CX, (char*) NULL, 0.0f);
|
||||
float frontarea = GfParmGetNum(car->_carHandle, SECT_AERODYNAMICS, PRM_FRNTAREA, (char*) NULL, 0.0f);
|
||||
CW = 0.645f*cx*frontarea;
|
||||
fprintf(stderr,"\n\nCW=%.5f\n",CW);fflush(stderr);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3188,7 +3193,6 @@ float Driver::filterTCL(float accel)
|
|||
accel1 = (float) MAX(0.0f, accel1 - (seg->surface->kFriction - wseg0->surface->kFriction));
|
||||
if (wseg1->surface->kFriction < seg->surface->kFriction)
|
||||
accel1 = (float) MAX(0.0f, accel1 - (seg->surface->kFriction - wseg1->surface->kFriction));
|
||||
fprintf(stderr,"friction %.3f accel=%.3f->%.3f\n",wseg0->surface->kFriction,accel,accel1);
|
||||
#endif
|
||||
|
||||
if (wseg0->surface->kRollRes > MAX(0.01, seg->surface->kRollRes*1.2))
|
||||
|
|
|
@ -342,7 +342,7 @@ void LRaceLine::AllocTrack( tTrack *ptrack )
|
|||
CornerSpeed = GfParmGetNum( carhandle, "private", "CornerSpeed", (char *)NULL, 15.0f );
|
||||
CornerSpeedX = GfParmGetNum( carhandle, "private", "CornerSpeedX", (char *)NULL, 0.0f );
|
||||
BaseCornerSpeed = GfParmGetNum( carhandle, "private", "BaseCornerSpeed", (char *)NULL, 0.0f );
|
||||
BaseCornerSpeedX = GfParmGetNum( carhandle, "private", "BaseCornerSpeedX", (char *)NULL, 1.0f ) * (0.8 + MIN(0.2, ((12.0-skill)/12) / 5));
|
||||
BaseCornerSpeedX = GfParmGetNum( carhandle, "private", "BaseCornerSpeedX", (char *)NULL, 1.0f ) * (0.8 + MIN(0.25, ((12.0-skill)/12) / 4));
|
||||
AvoidSpeedAdjust = GfParmGetNum( carhandle, "private", "AvoidSpeedAdjust", (char *)NULL, 0.0f );
|
||||
AvoidSpeedAdjustX = GfParmGetNum( carhandle, "private", "AvoidSpeedAdjustX", (char *)NULL, 1.0f );
|
||||
AvoidBrakeAdjust = GfParmGetNum( carhandle, "private", "AvoidBrakeAdjust", (char *)NULL, 0.0f );
|
||||
|
@ -1015,7 +1015,7 @@ void LRaceLine::AdjustRadius(int prev, int i, int next, double TargetRInverse, i
|
|||
double dRInverse = GetRInverse(prev, tx[rl][i] + dx, ty[rl][i] + dy, next, rl);
|
||||
double tcf = GetModD( tCurveFactor, i );
|
||||
double cf = (tcf != 0.0 ? tcf : CurveFactor);
|
||||
double intmargin = ((IntMargin+skill/7) + GetModD( tIntMargin, i )) - cf * 5;
|
||||
double intmargin = ((IntMargin) + GetModD( tIntMargin, i )) - cf * 5;
|
||||
double extmargin = ExtMargin + GetModD( tExtMargin, i );
|
||||
|
||||
if (dRInverse > 0.000000001)
|
||||
|
@ -2308,7 +2308,7 @@ void LRaceLine::GetPoint( double offset, vec2f *rt, double *mInverse )
|
|||
#endif
|
||||
|
||||
//double time = 0.63;
|
||||
double time = 0.02 * 20 * (1.0 + (car->_speed_x-20)/18);
|
||||
double time = 0.02 * 20 * (1.0 + MIN(15.0*(1.0+fabs(rInv*240)), MAX(0.0, (car->_speed_x-(40*(1.0-MIN(0.8, fabs(rInv*70)))))))/18);
|
||||
|
||||
if (rInv > 0.0 && off2lft > 0.0)
|
||||
time *= (1.0 + ((off2lft/track->width) * (off2lft/(track->width-3.0)) * fabs(rInv*60)));
|
||||
|
|
Loading…
Reference in a new issue