From 8ac9ebcc7c5cf4a19903243fcc80ee0c50351274 Mon Sep 17 00:00:00 2001 From: torcs-ng Date: Sun, 25 Oct 2015 23:20:18 +0000 Subject: [PATCH] - update shadow's driver git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6192 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: 0c1c5699e197e649c89f2ca5bb0101c26c4808a9 Former-commit-id: df1356c81f246f622d12642ed102363061d3e16c --- src/drivers/shadow/src/CarModel.cpp | 31 ++++++++++++++---- src/drivers/shadow/src/CarModel.h | 5 +++ src/drivers/shadow/src/Driver.cpp | 50 +++++++++++++++++++++++++++++ src/drivers/shadow/src/Driver.h | 4 +++ 4 files changed, 84 insertions(+), 6 deletions(-) diff --git a/src/drivers/shadow/src/CarModel.cpp b/src/drivers/shadow/src/CarModel.cpp index a42d4fa5..f75d2db0 100644 --- a/src/drivers/shadow/src/CarModel.cpp +++ b/src/drivers/shadow/src/CarModel.cpp @@ -60,7 +60,12 @@ CarModel::CarModel() KZ_SCALE(0), BUMP_FACTOR(0), - WIDTH(2) + WIDTH(2), + HASTYC(false), + TYRECONDITIONFRONT(0), + TYRECONDITIONREAR(0), + TYRETREADDEPTHFRONT(0), + TYRETREADDEPTHREAR(0) { } @@ -126,13 +131,16 @@ double CarModel::CalcMaxSpeed(double k, double k1, double kz, double kFriction, double MuF = kFriction * TYRE_MU_F * MU_SCALE; double MuR = kFriction * TYRE_MU_R * MU_SCALE; - /*if (oDriver->oCarHasTYC) + + if (HASTYC) { - double TcF = oDriver->TyreConditionFront(); - double TcR = oDriver->TyreConditionRear(); - Mu = MIN(TcF*MuF,TcR*MuR) / oTmpCarParam->oSkill; + double TcF = TYRECONDITIONFRONT; + double TcR = TYRECONDITIONREAR; + MuF = TcF * MuF; + MuR = TcR * MuR; + Mu = MIN(MuF, MuR) / SKILL; } - else*/ + else Mu = MIN(MuF, MuR); // oTmpCarParam->oSkill; Den = (AbsCrv - ScaleBump * kz) - (CA_FW * MuF + CA_RW * MuR @@ -247,6 +255,17 @@ double CarModel::CalcBreaking(double k0, double kz0, double k1, double kz1, doub MU = (MU_F + MU_R) * 0.5; } + if (HASTYC) + { + double TcF = TYRECONDITIONFRONT; + double TcR = TYRECONDITIONREAR; + MU_F = TcF * MU_F; + MU_R = TcR * MU_R; + MU = MIN(MU_F, MU_R) / SKILL; + } + else + MU = MIN(MU_F, MU_R); // oTmpCarParam->oSkill; + double CD = CD_BODY * (1.0 + DAMAGE / 10000.0) + CD_WING; double Gdown = GRAVITY * cs * cs2; diff --git a/src/drivers/shadow/src/CarModel.h b/src/drivers/shadow/src/CarModel.h index 59c82f02..7f06ade0 100644 --- a/src/drivers/shadow/src/CarModel.h +++ b/src/drivers/shadow/src/CarModel.h @@ -69,6 +69,11 @@ public: double KZ_SCALE; // bump sensitivity. double BUMP_FACTOR; // bump sensitivity factor. double WIDTH; // width of car (m). + bool HASTYC; + double TYRECONDITIONFRONT; + double TYRECONDITIONREAR; + double TYRETREADDEPTHFRONT; + double TYRETREADDEPTHREAR; }; #endif diff --git a/src/drivers/shadow/src/Driver.cpp b/src/drivers/shadow/src/Driver.cpp index 66df98df..c593d72f 100644 --- a/src/drivers/shadow/src/Driver.cpp +++ b/src/drivers/shadow/src/Driver.cpp @@ -689,6 +689,17 @@ void TDriver::NewRace( tCarElt* pCar, tSituation* pS ) initWheelPos(); initBrake(); + if(HasTYC) + { + m_cm.HASTYC = true; + m_cm.TYRECONDITIONFRONT = TyreConditionFront(); + m_cm.TYRECONDITIONREAR = TyreConditionRear(); + m_cm.TYRETREADDEPTHFRONT = TyreTreadDepthFront(); + m_cm.TYRETREADDEPTHREAR = TyreTreadDepthRear(); + } + else + m_cm.HASTYC = false; + m_cm.BRAKEFORCE = BrakeForce; m_cm.FUEL = 0;//pCar->_fuel; @@ -1511,6 +1522,20 @@ void TDriver::Drive( tSituation* s ) { m_cm.FUEL = 5 * floor(carFuel / 5); m_cm.DAMAGE = car->_dammage; + + if(HasTYC) + { + m_cm.TYRECONDITIONFRONT = TyreConditionFront(); + m_cm.TYRECONDITIONREAR = TyreConditionRear(); + m_cm.TYRETREADDEPTHFRONT = TyreTreadDepthFront(); + m_cm.TYRETREADDEPTHREAR = TyreTreadDepthRear(); + + m_cm2.TYRECONDITIONFRONT = TyreConditionFront(); + m_cm2.TYRECONDITIONREAR = TyreConditionRear(); + m_cm2.TYRETREADDEPTHFRONT = TyreTreadDepthFront(); + m_cm2.TYRETREADDEPTHREAR = TyreTreadDepthRear(); + } + m_cm2.FUEL = m_cm.FUEL; m_cm2.DAMAGE = m_cm.DAMAGE; @@ -3478,3 +3503,28 @@ bool TDriver::CheckPitSharing() return false; } } + +double TDriver::TyreConditionFront() +{ + return MIN(car->_tyreCondition(0), car->_tyreCondition(1)); +} + +double TDriver::TyreConditionRear() +{ + return MIN(car->_tyreCondition(2), car->_tyreCondition(3)); +} + +double TDriver::TyreTreadDepthFront() +{ + double Right = (car->_tyreTreadDepth(0) - car->_tyreCritTreadDepth(0)); + double Left = (car->_tyreTreadDepth(1) - car->_tyreCritTreadDepth(1)); + return 100 * MIN(Right, Left); +} + +double TDriver::TyreTreadDepthRear() +{ + double Right = (car->_tyreTreadDepth(2) - car->_tyreCritTreadDepth(2)); + double Left = (car->_tyreTreadDepth(3) - car->_tyreCritTreadDepth(3)); + return 100 * MIN(Right, Left); +} + diff --git a/src/drivers/shadow/src/Driver.h b/src/drivers/shadow/src/Driver.h index a19f9ef1..82737cb9 100644 --- a/src/drivers/shadow/src/Driver.h +++ b/src/drivers/shadow/src/Driver.h @@ -273,6 +273,10 @@ public: void LearnBraking(double Pos); // Learn braking parameters void DetectFlight(); double FlightControl(double Steer); // Prepare landing + double TyreConditionFront(); + double TyreConditionRear(); + double TyreTreadDepthFront(); + double TyreTreadDepthRear(); bool m_UseFilterAccel; bool m_UseAccelOut;