From 58d9774717e953b8cde1e0271fed1aa037f41366 Mon Sep 17 00:00:00 2001 From: harunasan Date: Thu, 29 Feb 2024 06:00:13 +0000 Subject: [PATCH] USR: Reduced margin when passing, added "Aggression Mult" in private car setup (increases speed when on PATH_L or PATH_R) git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9349 30fe4595-0a0c-4342-8851-515496e4dcbd --- src/drivers/usr/src/Path.cpp | 4 +- src/drivers/usr/src/driver.cpp | 63 ++++++++++++++++++++------------ src/drivers/usr/src/driver.h | 1 + src/drivers/usr/src/opponent.cpp | 1 + 4 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/drivers/usr/src/Path.cpp b/src/drivers/usr/src/Path.cpp index be33e6bac..e706aca3e 100755 --- a/src/drivers/usr/src/Path.cpp +++ b/src/drivers/usr/src/Path.cpp @@ -260,11 +260,11 @@ double Path::constrainOffset(double t, PathSeg* l) if (mPathType == PATH_L) { - maxR = -1.0; + maxR = 0.2; } else if (mPathType == PATH_R) { - maxL = -1.0; + maxL = 0.2; } return Utils::clip(t, -maxL, maxR); diff --git a/src/drivers/usr/src/driver.cpp b/src/drivers/usr/src/driver.cpp index f6fc113bb..20ede6692 100755 --- a/src/drivers/usr/src/driver.cpp +++ b/src/drivers/usr/src/driver.cpp @@ -48,8 +48,8 @@ Driver::Driver(int index) : mRain(0), driver_aggression(1.0), mGarage(false), - mFrontCollMargin(6.0), - mOvtMargin(2.0) + mFrontCollMargin(6.0 - driver_aggression), + mOvtMargin(2.0 - driver_aggression) { // Names assigned in constructor for VS 2013 compatibility @@ -139,6 +139,18 @@ void Driver::InitTrack(tTrack* Track, void* carHandle, void** carParmHandle, tSi mClothFactor = param.getNum("private", "clothoidfactor"); mVMaxK = param.getNum("private", "vmaxk"); mVMaxKFactor = param.getNum("private", "vmaxkfactor"); + driver_aggromult = param.getNum("private", "Aggression Mult"); + + // Track and car-specific Aggression multiplier, + // to make certain car classes overtake more aggressively + if (driver_aggromult == NULL) + { + driver_aggromult = 0.0; + } + + //get "angry" with increasing time + double anger_limit; + anger_limit = 0; if (mVMaxK == 0.0) mVMaxK = 0.0018; @@ -768,7 +780,7 @@ double Driver::getBrake(double maxspeed) const brakepedal = 0.0; } - brakepedal *= driver_aggression; + //brakepedal *= driver_aggression; return brakepedal; } @@ -798,11 +810,11 @@ double Driver::getAccel(double maxspeed) if (m[LET_PASS]) { - accel *= 0.5; + accel *= 0.5 + (driver_aggression * 0.25); } else if (mOpps.mateFrontAside()) { - accel *= 0.7; + accel *= 0.7 + (driver_aggression * 0.25); } // LR tire friction unbalanced (grass on border) @@ -1010,7 +1022,7 @@ void Driver::updateLetPass() { if (mOpps.oppNear() != mOpps.oppLetPass()) { - if (fabs(mOpps.oppNear()->dist()) < 3.0) + if (fabs(mOpps.oppNear()->dist()) < 3.0 - driver_aggression) { m[LET_PASS] = false; @@ -1022,7 +1034,7 @@ void Driver::updateLetPass() // Check for bad conditions if (!m[LET_PASS]) { - if (m[DRIVING_FAST] || mCar.v() > mOpps.oppLetPass()->v() + 5.0) + if (m[DRIVING_FAST] || mCar.v() > mOpps.oppLetPass()->v() + 5.0 - driver_aggression) { return; } @@ -1063,7 +1075,7 @@ void Driver::setDrvPath(PathType path) double dist = mOpps.oppNear()->dist(); if ((dist < 100.0 && dist > 10) - || (dist <= 10 && dist >= 0.0 && fabs(mOpps.oppNear()->sideDist()) > 4.0) + || (dist <= 10 && dist >= 0.0 && fabs(mOpps.oppNear()->sideDist()) > 4.0 - driver_aggression) || (dist < 0.0)) { return; @@ -1176,10 +1188,10 @@ bool Driver::overtakeOpponent() double maxdist = std::min(50.0, mFrontCollMargin + 5.0 + mCar.v()); double dist = mOpps.oppNear()->dist(); if (dist < maxdist && dist > mOvtMargin / 2.0 - && (mOpps.oppNear()->borderDist() > -3.0 || (mOpps.oppNear()->borderDist() <= -3.0 && mOpps.oppNear()->v() > 25 && fabs(mOpps.oppNear()->sideDist()) < 5.0))) + && (mOpps.oppNear()->borderDist() > -3.0 || (mOpps.oppNear()->borderDist() <= -3.0 && mOpps.oppNear()->v() > 25 && fabs(mOpps.oppNear()->sideDist()) < 2.0))) { - if ((((m[CATCH] || (dist < mFrontCollMargin + 2.0 && mCar.accelFiltered() < 0.9 && mCar.v() > mOpps.oppNear()->v())) && (!mOpps.oppNear()->teamMate() || mOpps.oppNear()->backMarker())) - || (m[OVERTAKE] && dist < mFrontCollMargin + 10.0 && mCar.v() > mOpps.oppNear()->v() - 2.0) + if ((((m[CATCH] || (dist < mFrontCollMargin + 2.0 && mCar.accelFiltered() < 0.9 && mCar.v() > mOpps.oppNear()->v()))) + || (m[OVERTAKE] && dist < mFrontCollMargin + 8.0 && mCar.v() > mOpps.oppNear()->v() - 4.0 - (driver_aggression)) || (mOpps.oppNear()->v() < 20.0 && dist < mFrontCollMargin + 20.0)) && (!(!m[OVERTAKE] && m[DRIVING_FAST]))) { @@ -1193,14 +1205,14 @@ bool Driver::overtakeOpponent() m[OVERTAKE] = false; } // If aside always overtake - if (dist >= -mOvtMargin && dist <= mOvtMargin / 2.0 && mOpps.oppNear()->borderDist() > -3.0 - && (fabs(mOpps.oppNear()->sideDist()) < 4.0 || mDrvPath != PATH_O)) + if (dist >= -mOvtMargin && dist <= mOvtMargin / 2.0 && mOpps.oppNear()->borderDist() > -4.0 - (driver_aggression) + && (fabs(mOpps.oppNear()->sideDist()) < 4.0 + driver_aggression || mDrvPath != PATH_O)) { m[OVERTAKE] = true; } // If in front and on raceline stay there - if (dist < 0.0 && mDrvPath == PATH_O) + if (dist < -5.0 && mDrvPath == PATH_O) { m[OVERTAKE] = false; } @@ -1216,14 +1228,15 @@ void Driver::updateOvertakePath() } // Normal overtaking - if ((mOpps.oppNear()->dist() > mOvtMargin && mOpps.oppNear()->catchTime() > 0.5) - || (mOpps.oppNear()->dist() > 1.0 && mCar.v() < 10.0)) + if ((mOpps.oppNear()->dist() > mOvtMargin && mOpps.oppNear()->catchTime() > 1.0 - (driver_aggression * 0.1)) + || (mOpps.oppNear()->dist() > 1.0 && mCar.v() < 2.5 - (driver_aggression))) { // Stay on your side when there is enough space double righttomiddle = mPath[PATH_R].toMiddle(mOpps.oppNear()->fromStart()); double lefttomiddle = mPath[PATH_L].toMiddle(mOpps.oppNear()->fromStart()); - bool rightfree = fabs(righttomiddle - mOpps.oppNear()->toMiddle()) > 3.0; - bool leftfree = fabs(lefttomiddle - mOpps.oppNear()->toMiddle()) > 3.0; + bool rightfree = fabs(righttomiddle - mOpps.oppNear()->toMiddle()) > 4.0 + driver_aggression * 2; + bool leftfree = fabs(lefttomiddle - mOpps.oppNear()->toMiddle()) > 4.0 + driver_aggression * 2; + if (mOpps.oppNear()->leftOfMe()) { if (!(rightfree || leftfree)) @@ -1489,12 +1502,12 @@ void Driver::updateDrivingFast() } else { - factor = 0.9; + factor = 1.50; } if (mDrvPath == PATH_O) { - m[DRIVING_FAST] = mCar.v() > factor * pathSpeed(mOvertakePath); + m[DRIVING_FAST] = mCar.v() * (1 + (driver_aggression*0.1)) > factor * pathSpeed(mOvertakePath); } else { @@ -1516,17 +1529,17 @@ double Driver::frontCollFactor(Opponent* opp) { if ((m[OVERTAKE] || mCar.v() - opp->v() < 10.0) && !m[DRIVING_FAST]) { - factor = 0.5; + factor = 0.5 + (driver_aggression * 0.1); } if (mCar.v() - opp->v() > 10.0 && m[DRIVING_FAST]) { - factor = 1.5; + factor = 1.5 + (driver_aggression * 0.1); } if (fabs(opp->angle()) > 1.5 || fabs(opp->v()) < 2.0) { - factor = 2.0; + factor = 2.0 + (driver_aggression * 0.1); } if (mCar.v() < 2.0) @@ -1547,16 +1560,18 @@ void Driver::calcMaxspeed() if (mDrvPath != PATH_O) { mMaxspeed = pathSpeed(PATH_R) + 0.5 * (mLRTargetPortion + 1.0) * (pathSpeed(PATH_L) - pathSpeed(PATH_R)); + mMaxspeed *= 1 + ((driver_aggression) * driver_aggromult); } else { mMaxspeed = pathSpeed(mDrvPath); + //mMaxspeed *= 1 + (driver_aggression * 0.01); } // Special cases if (mPit.pitstop()) { - mMaxspeed = mPitEntrySpeed; // pre pit entry + mMaxspeed = mPitEntrySpeed * 0.75; // pre pit entry } if (fabs(mCar.angToTrack()) > 1.0) diff --git a/src/drivers/usr/src/driver.h b/src/drivers/usr/src/driver.h index 1f2aa4425..e9a715cef 100755 --- a/src/drivers/usr/src/driver.h +++ b/src/drivers/usr/src/driver.h @@ -187,6 +187,7 @@ private: // Configuration file constants double mFuelperMeter; + double driver_aggromult; int mPitDamage; double mPitGripFactor; double mPitEntryMargin; diff --git a/src/drivers/usr/src/opponent.cpp b/src/drivers/usr/src/opponent.cpp index 620bc39c4..87e9ddfd2 100755 --- a/src/drivers/usr/src/opponent.cpp +++ b/src/drivers/usr/src/opponent.cpp @@ -19,6 +19,7 @@ #include "Vec2.h" #include "Vec2d.h" #include "Utils.h" +#include "driver.h" #include