forked from speed-dreams/speed-dreams-code
- Update Shadow's driver
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6037 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 2c0640e3e8d8b49c60fd1d2737e90fa2502753a4 Former-commit-id: 7cabae81b5b25895baf86b72a7059a5eb5a50eac
This commit is contained in:
parent
4b8603b787
commit
30148cff87
2 changed files with 57 additions and 1 deletions
|
@ -35,6 +35,11 @@
|
|||
|
||||
#define STEER_SPD_IDX(x) (int(floor((x) / 5)))
|
||||
#define STEER_K_IDX(k) (MX(0, MN(int(20 + floor((k) * 500 + 0.5)), 40)))
|
||||
#define DOUBLE_NORM_PI_PI(x) \
|
||||
{ \
|
||||
while ((x) > PI) { (x) -= 2*PI; } \
|
||||
while ((x) < -PI) { (x) += 2*PI; } \
|
||||
}
|
||||
|
||||
//==========================================================================*
|
||||
// Statics
|
||||
|
@ -157,6 +162,12 @@ TDriver::TDriver(int Index, const int robot_type):
|
|||
m_TclSlip(1.6),
|
||||
m_TclFactor(1.0),
|
||||
|
||||
m_DriftAngle(0.0),
|
||||
m_AbsDriftAngle(0.0),
|
||||
m_LastAbsDriftAngle(0.0),
|
||||
m_CosDriftAngle2(1.0),
|
||||
m_DriftFactor(1.0),
|
||||
|
||||
m_ClutchMax(0.5),
|
||||
m_ClutchDelta(0.009),
|
||||
m_ClutchRange(0.82),
|
||||
|
@ -475,6 +486,9 @@ void TDriver::InitTrack( tTrack* pTrack, void* pCarHandle, void** ppCarParmHandl
|
|||
|
||||
m_cm.AERO = (int)GfParmGetNum(hCarParm, SECT_PRIV, PRV_AERO_MOD, 0, 0);
|
||||
m_cm.MU_SCALE = GfParmGetNum(hCarParm, SECT_PRIV, PRV_MU_SCALE, NULL, 0.9f);
|
||||
if (raceType[pS->_raceType] == "qualify")
|
||||
m_cm.MU_SCALE = m_cm.MU_SCALE + 0.02;
|
||||
|
||||
m_cm.KZ_SCALE = GfParmGetNum(hCarParm, SECT_PRIV, PRV_KZ_SCALE, NULL, 0.43f);
|
||||
m_cm.BUMP_FACTOR = GfParmGetNum(hCarParm, SECT_PRIV, PRV_BUMP_FACTOR, NULL, 1.0);
|
||||
m_cm.NEEDSINLONG = GfParmGetNum(hCarParm, SECT_PRIV, PRV_NEED_SIN, NULL, 0);
|
||||
|
@ -657,7 +671,7 @@ void TDriver::NewRace( tCarElt* pCar, tSituation* pS )
|
|||
m_cm.WIDTH = car->_dimension_y;
|
||||
|
||||
m_cm2 = m_cm;
|
||||
m_cm2.MU_SCALE = MN(1.0, m_cm.MU_SCALE);
|
||||
m_cm2.MU_SCALE = MN(1.5, m_cm.MU_SCALE);
|
||||
|
||||
LogSHADOW.debug( "SPDC N %d SPDC T %d\n", SPDC_NORMAL, SPDC_TRAFFIC );
|
||||
|
||||
|
@ -1478,6 +1492,11 @@ void TDriver::Drive( tSituation* s )
|
|||
|
||||
double steer = angle / car->_steerLock;
|
||||
|
||||
m_DriftAngle = atan2(car->_speed_Y, car->_speed_X) - car->_yaw;
|
||||
DOUBLE_NORM_PI_PI(m_DriftAngle);
|
||||
m_AbsDriftAngle = fabs(m_DriftAngle);
|
||||
m_CosDriftAngle2 = (float) cos(MAX(MIN(m_AbsDriftAngle * 2, PI),-PI));
|
||||
|
||||
// work out current car speed.
|
||||
double spd0 = hypot(car->_speed_x, car->_speed_y);
|
||||
|
||||
|
@ -1688,6 +1707,8 @@ void TDriver::Drive( tSituation* s )
|
|||
//brk = ApplyAbs(car, brk);
|
||||
steer = FlightControl(steer);
|
||||
|
||||
acc = filterDrifting(acc);
|
||||
|
||||
if (!HasTCL)
|
||||
acc = filterTCL(acc);
|
||||
//acc = filterTCL(acc);
|
||||
|
@ -1700,6 +1721,7 @@ void TDriver::Drive( tSituation* s )
|
|||
car->ctrl.brakeCmd = brk;
|
||||
m_LastBrake = brk;
|
||||
m_LastAccel = acc;
|
||||
m_LastAbsDriftAngle = m_AbsDriftAngle;
|
||||
|
||||
m_pitControl.Process( car );
|
||||
}
|
||||
|
@ -2750,6 +2772,33 @@ double TDriver::filterTCL(double Accel) // T
|
|||
return MIN(1.0, Accel);
|
||||
}
|
||||
|
||||
//==========================================================================*
|
||||
// Filter Drifting
|
||||
//--------------------------------------------------------------------------*
|
||||
double TDriver::filterDrifting(double Acc)
|
||||
{
|
||||
if(car->_speed_x < 5.0)
|
||||
return Acc;
|
||||
|
||||
double Drifting = m_AbsDriftAngle;
|
||||
double DriftFactor = m_DriftFactor;
|
||||
|
||||
if (m_Rain)
|
||||
{
|
||||
Drifting *= 1.5;
|
||||
DriftFactor *= 2;
|
||||
}
|
||||
|
||||
// Decrease accelleration while drifting
|
||||
double DriftAngle = MAX(MIN(Drifting * 1.75, PI - 0.01),-PI + 0.01);
|
||||
if (m_AbsDriftAngle > m_LastAbsDriftAngle)
|
||||
Acc /= MAX(1.0,(DriftFactor * 150 * ( 1 - cos(DriftAngle))));
|
||||
else
|
||||
Acc /= MAX(1.0,(DriftFactor * 50 * ( 1 - cos(DriftAngle))));
|
||||
|
||||
return MIN(1.0, Acc);
|
||||
}
|
||||
|
||||
//==========================================================================*
|
||||
// Learn brake at current speed
|
||||
//--------------------------------------------------------------------------*
|
||||
|
|
|
@ -291,6 +291,7 @@ private:
|
|||
float startAutomatic();
|
||||
double ApplyAbs( tCarElt* car, double brake );
|
||||
double filterBrake(double Brake);
|
||||
double filterDrifting(double Acc);
|
||||
void Meteorology();
|
||||
int GetWeather();
|
||||
bool CheckPitSharing();
|
||||
|
@ -373,6 +374,12 @@ private:
|
|||
double m_TclSlip; // Max TCL slip
|
||||
double m_TclFactor; // TCL scale
|
||||
|
||||
double m_DriftAngle; // Drifting angle
|
||||
double m_AbsDriftAngle; // fabs(Drifting angle)
|
||||
double m_LastAbsDriftAngle; // Historie
|
||||
double m_CosDriftAngle2;
|
||||
double m_DriftFactor; // Drifting acceleration factor
|
||||
|
||||
double m_ClutchMax;
|
||||
double m_ClutchDelta;
|
||||
double m_ClutchRange;
|
||||
|
|
Loading…
Reference in a new issue