From c291296afbf78e4c030066aafc65f87c293193f6 Mon Sep 17 00:00:00 2001 From: torcs-ng Date: Thu, 6 Aug 2015 08:30:37 +0000 Subject: [PATCH] - Update Shadow's driver git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6061 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: bcb29c34ffa1f386d6555e73779d75df206f8366 Former-commit-id: 57ff49d36e1a04a8f03bc20b67ccacb005f8299f --- src/drivers/shadow/src/CarModel.cpp | 12 +++++++++++- src/drivers/shadow/src/CarModel.h | 5 +++-- src/drivers/shadow/src/Driver.cpp | 3 +++ src/drivers/shadow/src/Driver.h | 2 ++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/drivers/shadow/src/CarModel.cpp b/src/drivers/shadow/src/CarModel.cpp index 190996f1b..a24ee58b6 100644 --- a/src/drivers/shadow/src/CarModel.cpp +++ b/src/drivers/shadow/src/CarModel.cpp @@ -35,6 +35,7 @@ CarModel::CarModel() DAMAGE(0), NEEDSINLONG(false), USEDACCEXIT(false), + SKILL(0), TYRE_MU(0), TYRE_MU_F(0), @@ -285,6 +286,8 @@ double CarModel::CalcBreaking(double k0, double kz0, double k1, double kz1, doub double acc = Ftanroad / M; + acc = BRAKESCALE * Ftanroad / (MASS * ( 3 + SKILL) / 4); + if (TDriver::UseBrakeLimit) { double Radius = 1.0 / fabs(Kz); @@ -300,7 +303,14 @@ double CarModel::CalcBreaking(double k0, double kz0, double k1, double kz1, doub break; } - return u; + double midspd = (u + spd1)/2; + + // Check brake + double brakedecel = BRAKESCALE * BRAKEFORCE / MASS; + double braketargetspd = sqrt(midspd * midspd + 2 * brakedecel * dist); + double resulttargetspd = MIN(u, braketargetspd); + + return MAX(resulttargetspd, spd1); } double CarModel::CalcAcceleration(double k0, double kz0, double k1, double kz1, double spd0, double dist, double kFriction, double RollAngle , double TiltAngle) const diff --git a/src/drivers/shadow/src/CarModel.h b/src/drivers/shadow/src/CarModel.h index b9bdfb159..99ed16b9e 100644 --- a/src/drivers/shadow/src/CarModel.h +++ b/src/drivers/shadow/src/CarModel.h @@ -43,8 +43,9 @@ public: double LENGTH; // Length of car (m) double FUEL; // mass of fuel in car. double DAMAGE; // damage of this car. - double NEEDSINLONG; - double USEDACCEXIT; + bool NEEDSINLONG; + bool USEDACCEXIT; + double SKILL; // skill car driver. double TYRE_MU; // mu value of tyres (min of those avail). double TYRE_MU_F; // mu value of front tyres. diff --git a/src/drivers/shadow/src/Driver.cpp b/src/drivers/shadow/src/Driver.cpp index 703f29b08..be077a7cd 100644 --- a/src/drivers/shadow/src/Driver.cpp +++ b/src/drivers/shadow/src/Driver.cpp @@ -511,6 +511,7 @@ void TDriver::InitTrack( tTrack* pTrack, void* pCarHandle, void** ppCarParmHandl 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); m_cm.USEDACCEXIT = GfParmGetNum(hCarParm, SECT_PRIV, PRV_USED_ACC, NULL, 0); + m_cm.BRAKESCALE = GfParmGetNum(hCarParm, SECT_PRIV, PRV_BRAKESCALE, NULL, 1.0); FACTORS.RemoveAll(); @@ -682,6 +683,8 @@ void TDriver::NewRace( tCarElt* pCar, tSituation* pS ) initWheelPos(); initBrake(); + m_cm.BRAKEFORCE = BrakeForce; + m_cm.FUEL = 0;//pCar->_fuel; m_cm.WIDTH = car->_dimension_y; diff --git a/src/drivers/shadow/src/Driver.h b/src/drivers/shadow/src/Driver.h index e0e5ca065..5a7449210 100644 --- a/src/drivers/shadow/src/Driver.h +++ b/src/drivers/shadow/src/Driver.h @@ -48,6 +48,8 @@ #define PRV_RAIN_MU "mu scale rain" #define PRV_ACCEL_DELTA "accel delta" #define PRV_ACCEL_DELTA_RAIN "accel delta rain" +#define PRV_BRAKESCALE "brake scale" +#define PRV_BRAKEFORCE "brake force" #define PRV_FLY_HEIGHT "fly height" #define PRV_FACTOR "factor" #define PRV_AERO_MOD "aero mod"