USR_SC: More robot improvements
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@917 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 4ae52edca91aa08190a5fcb044bc9e00901c90d8 Former-commit-id: 7fa321db807a139b80fb3bb8b5e6d9a27c72e024
This commit is contained in:
parent
871149ca06
commit
bffc9f919d
3 changed files with 47 additions and 4 deletions
|
@ -2969,7 +2969,7 @@ bool Driver::isStuck()
|
||||||
// does the car's position indicate we're stuck?
|
// does the car's position indicate we're stuck?
|
||||||
bool position_stuck = (((fabs(angle) > MAX_UNSTUCK_ANGLE &&
|
bool position_stuck = (((fabs(angle) > MAX_UNSTUCK_ANGLE &&
|
||||||
((car->_gear == -1 && car->_speed_x < MAX_UNSTUCK_SPEED) ||
|
((car->_gear == -1 && car->_speed_x < MAX_UNSTUCK_SPEED) ||
|
||||||
(car->_gear > -1 && fabs(car->_speed_x) < MAX_UNSTUCK_SPEED)) &&
|
(car->_gear > -1 && fabs(car->_speed_x+car->_accel_x) < MAX_UNSTUCK_SPEED)) &&
|
||||||
(MIN(car->_trkPos.toLeft, car->_trkPos.toRight)) < MIN_UNSTUCK_DIST)));
|
(MIN(car->_trkPos.toLeft, car->_trkPos.toRight)) < MIN_UNSTUCK_DIST)));
|
||||||
int reversing_ok = 0, force_reverse = 0;
|
int reversing_ok = 0, force_reverse = 0;
|
||||||
if (car->_gear == -1 && fabs(angle) > 0.6)
|
if (car->_gear == -1 && fabs(angle) > 0.6)
|
||||||
|
@ -3093,7 +3093,7 @@ fprintf(stderr,"NOT STUCK: Stick with Forwards ps=%d fr=%d (%.3f <= %.3f)\n",pos
|
||||||
allow_stuck = 0;
|
allow_stuck = 0;
|
||||||
stuck_timer = simtime;
|
stuck_timer = simtime;
|
||||||
}
|
}
|
||||||
else if ((!allow_stuck && (simtime-stuck_timer > 3.0 || !stuckcheck || simtime - last_stuck_time > 4.0)))
|
else if ((!allow_stuck && simtime-stuck_timer > 3.0 && position_stuck && (!stuckcheck || simtime - last_stuck_time > 4.0)))
|
||||||
{
|
{
|
||||||
allow_stuck = 1;
|
allow_stuck = 1;
|
||||||
stuck_timer = simtime;
|
stuck_timer = simtime;
|
||||||
|
|
|
@ -88,6 +88,7 @@ class Driver {
|
||||||
int getCarefulBrake() { return raceline->getCarefulBrake(); }
|
int getCarefulBrake() { return raceline->getCarefulBrake(); }
|
||||||
double speedAngleChange() { return speedangle - prevspeedangle; }
|
double speedAngleChange() { return speedangle - prevspeedangle; }
|
||||||
void GetSteerPoint( double lookahead, vec2f *rt, double offset=-100.0, double time=-1.0 );
|
void GetSteerPoint( double lookahead, vec2f *rt, double offset=-100.0, double time=-1.0 );
|
||||||
|
float getWidth() { return mycardata->getWidthOnTrack(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Utility functions.
|
// Utility functions.
|
||||||
|
@ -106,7 +107,6 @@ class Driver {
|
||||||
float correctSteering( float avoidsteer, float racesteer );
|
float correctSteering( float avoidsteer, float racesteer );
|
||||||
double calcSteer( double targetAngle, int rl );
|
double calcSteer( double targetAngle, int rl );
|
||||||
void setMode( int newmode );
|
void setMode( int newmode );
|
||||||
float getWidth() { return mycardata->getWidthOnTrack(); }
|
|
||||||
void calcSpeed();
|
void calcSpeed();
|
||||||
float adjustOffset( float offset );
|
float adjustOffset( float offset );
|
||||||
bool canOvertake( Opponent *o, double *mincatchdist, bool outside, bool lenient );
|
bool canOvertake( Opponent *o, double *mincatchdist, bool outside, bool lenient );
|
||||||
|
|
|
@ -280,6 +280,49 @@ fprintf(stderr,">>> NOCOLL cd=%.3f >= %.3f ",cardist,SIDE_MARGIN - MAX(0.0, (dis
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
double speed = getSpeed();
|
||||||
|
double dspeed = driver->getSpeed();
|
||||||
|
double time_margin = MAX(4.0, (dspeed-speed) / 16);
|
||||||
|
double width = cardata->getWidthOnTrack();
|
||||||
|
double dwidth = driver->getWidth();
|
||||||
|
double ow = width;
|
||||||
|
double dw = dwidth;
|
||||||
|
double osa = ((car->_trkPos.toLeft - prevleft)*0.8) * (t_impact/s->deltaTime);
|
||||||
|
double dsa = ((driver->getNextLeft() - mycar->_trkPos.toLeft)*0.8) * (t_impact/s->deltaTime);
|
||||||
|
double oleft = car->_trkPos.toLeft + osa*0.8;
|
||||||
|
double dleft = mycar->_trkPos.toLeft + dsa*0.8;
|
||||||
|
tTrackSeg *cseg = car->_trkPos.seg;
|
||||||
|
tTrackSeg *seg = mycar->_trkPos.seg;
|
||||||
|
|
||||||
|
|
||||||
|
if (!collide && t_impact < time_margin/2)
|
||||||
|
{
|
||||||
|
// sanity check for cars that are about to plow full speed into the back of other cars
|
||||||
|
double margin = dwidth + 0.5;
|
||||||
|
double time = 0.6;
|
||||||
|
double mti = t_impact;
|
||||||
|
|
||||||
|
if (mti < time || (team == TEAM_FRIEND && mti < 3.0))
|
||||||
|
{
|
||||||
|
double addition = 0.25;//0.5;
|
||||||
|
if (team != TEAM_FRIEND && fabs(car->_trkPos.toMiddle) > fabs(mycar->_trkPos.toMiddle))
|
||||||
|
{
|
||||||
|
margin *= 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fabs(oleft - dleft) < ow/2 + dw/2 + addition ||
|
||||||
|
(mti < 0.8 &&
|
||||||
|
(((cseg->type != TR_STR && cseg->radius <= 120.0) || (seg->type != TR_STR && seg->radius <= 120.0)) &&
|
||||||
|
((oleft - ow/2 < margin && dleft - dw/4 < oleft + ow/2) ||
|
||||||
|
(oleft + ow/2 > cseg->width-margin && dleft + dw/4 > oleft - ow/2)))))
|
||||||
|
{
|
||||||
|
collide = 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef OPP_DEBUG
|
#ifdef OPP_DEBUG
|
||||||
fprintf(stderr,"\n");fflush(stderr);
|
fprintf(stderr,"\n");fflush(stderr);
|
||||||
#endif
|
#endif
|
||||||
|
@ -566,7 +609,7 @@ int Opponent::testCollision(Driver *driver, double impact, double sizefactor, ve
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (targ != NULL)
|
if (targ != NULL && t_impact < 1.0)
|
||||||
{
|
{
|
||||||
// locate front of car at steer target position
|
// locate front of car at steer target position
|
||||||
double frx = (d_new[FRNT_RGT].ax + d_new[FRNT_LFT].ax) / 2;
|
double frx = (d_new[FRNT_RGT].ax + d_new[FRNT_LFT].ax) / 2;
|
||||||
|
|
Loading…
Reference in a new issue