Skip to content

Commit a44db24

Browse files
authored
Fix #2510: setVehiclesLODDistance() & setPedsLodDistance() can't override player settings (#2670)
1 parent 94766cd commit a44db24

File tree

5 files changed

+36
-105
lines changed

5 files changed

+36
-105
lines changed

Client/core/CCore.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,8 +573,8 @@ void CCore::ApplyGameSettings()
573573
CVARS_GET("tyre_smoke_enabled", bVal);
574574
m_pMultiplayer->SetTyreSmokeEnabled(bVal);
575575
pGameSettings->UpdateFieldOfViewFromSettings();
576-
pGameSettings->ResetVehiclesLODDistance(false);
577-
pGameSettings->ResetPedsLODDistance(false);
576+
pGameSettings->ResetVehiclesLODDistance();
577+
pGameSettings->ResetPedsLODDistance();
578578
pGameSettings->ResetCoronaReflectionsEnabled();
579579
pController->SetVerticalAimSensitivityRawValue(CVARS_GET_VALUE<float>("vertical_aim_sensitivity"));
580580
CVARS_GET("mastervolume", fVal);

Client/game_sa/CSettingsSA.cpp

Lines changed: 28 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -563,74 +563,35 @@ void CSettingsSA::SetFieldOfViewVehicleMax(float fAngle, bool bFromScript)
563563
// Vehicles LOD draw distance
564564
//
565565
////////////////////////////////////////////////
566-
float ms_fClientMaxVehicleLODDistance = DEFAULT_VEHICLE_LOD_DISTANCE;
567-
float ms_fClientMaxTrainPlaneLODDistance = DEFAULT_VEHICLE_LOD_DISTANCE * TRAIN_LOD_DISTANCE_MULTIPLIER;
568-
float ms_fScriptMaxVehicleLODDistance = ms_fClientMaxVehicleLODDistance;
569-
float ms_fScriptMaxTrainPlaneLODDistance = ms_fClientMaxTrainPlaneLODDistance;
570566
bool ms_bMaxVehicleLODDistanceFromScript = false;
571567

572568
void CSettingsSA::SetVehiclesLODDistance(float fVehiclesLODDistance, float fTrainsPlanesLODDistance, bool bFromScript)
573569
{
574-
if (bFromScript)
575-
{
576-
ms_fScriptMaxVehicleLODDistance = fVehiclesLODDistance;
577-
ms_fScriptMaxTrainPlaneLODDistance = fTrainsPlanesLODDistance;
578-
ms_bMaxVehicleLODDistanceFromScript = bFromScript;
579-
}
580-
else
581-
{
582-
ms_fClientMaxVehicleLODDistance = fVehiclesLODDistance;
583-
ms_fClientMaxTrainPlaneLODDistance = fTrainsPlanesLODDistance;
584-
}
585-
586-
if (ms_bMaxVehicleLODDistanceFromScript)
587-
{
588-
ms_fVehicleLODDistance = Min(ms_fClientMaxVehicleLODDistance, ms_fScriptMaxVehicleLODDistance);
589-
ms_fTrainPlaneLODDistance = Min(ms_fClientMaxTrainPlaneLODDistance, ms_fScriptMaxTrainPlaneLODDistance);
590-
}
591-
else
592-
{
593-
ms_fVehicleLODDistance = Min(fVehiclesLODDistance, ms_fClientMaxVehicleLODDistance);
594-
ms_fTrainPlaneLODDistance = Min(fTrainsPlanesLODDistance, ms_fClientMaxTrainPlaneLODDistance);
595-
}
570+
ms_fVehicleLODDistance = fVehiclesLODDistance;
571+
ms_fTrainPlaneLODDistance = fTrainsPlanesLODDistance;
572+
ms_bMaxVehicleLODDistanceFromScript = bFromScript;
596573
}
597574

598-
void CSettingsSA::ResetVehiclesLODDistance(bool bFromScript)
575+
void CSettingsSA::ResetVehiclesLODDistance(bool bForceDefault)
599576
{
600-
if (!bFromScript)
601-
{
602-
bool bHighDetailVehicles;
603-
g_pCore->GetCVars()->Get("high_detail_vehicles", bHighDetailVehicles);
577+
if (ms_bMaxVehicleLODDistanceFromScript && !bForceDefault)
578+
return;
604579

605-
if (bHighDetailVehicles)
606-
{
607-
ms_fClientMaxVehicleLODDistance = MAX_VEHICLE_LOD_DISTANCE;
608-
ms_fClientMaxTrainPlaneLODDistance = MAX_VEHICLE_LOD_DISTANCE;
609-
}
610-
else
611-
{
612-
ms_fClientMaxVehicleLODDistance = DEFAULT_VEHICLE_LOD_DISTANCE;
613-
ms_fClientMaxTrainPlaneLODDistance = DEFAULT_VEHICLE_LOD_DISTANCE * TRAIN_LOD_DISTANCE_MULTIPLIER;
614-
}
580+
bool bHighDetailVehicles;
581+
g_pCore->GetCVars()->Get("high_detail_vehicles", bHighDetailVehicles);
615582

616-
// Script still wants to override client setting, let's make sure we use latest max
617-
if (ms_bMaxVehicleLODDistanceFromScript)
618-
{
619-
ms_fVehicleLODDistance = Min(ms_fClientMaxVehicleLODDistance, ms_fScriptMaxVehicleLODDistance);
620-
ms_fTrainPlaneLODDistance = Min(ms_fClientMaxTrainPlaneLODDistance, ms_fScriptMaxTrainPlaneLODDistance);
621-
return;
622-
}
583+
if (bHighDetailVehicles)
584+
{
585+
ms_fVehicleLODDistance = MAX_VEHICLE_LOD_DISTANCE;
586+
ms_fTrainPlaneLODDistance = MAX_VEHICLE_LOD_DISTANCE;
587+
}
588+
else
589+
{
590+
ms_fVehicleLODDistance = DEFAULT_VEHICLE_LOD_DISTANCE;
591+
ms_fTrainPlaneLODDistance = DEFAULT_VEHICLE_LOD_DISTANCE * TRAIN_LOD_DISTANCE_MULTIPLIER;
623592
}
624593

625594
ms_bMaxVehicleLODDistanceFromScript = false;
626-
ms_fVehicleLODDistance = ms_fClientMaxVehicleLODDistance;
627-
ms_fTrainPlaneLODDistance = ms_fClientMaxTrainPlaneLODDistance;
628-
}
629-
630-
void CSettingsSA::ResetVehiclesLODDistanceFromScript()
631-
{
632-
ms_bMaxVehicleLODDistanceFromScript = false;
633-
ResetVehiclesLODDistance(false);
634595
}
635596

636597
void CSettingsSA::GetVehiclesLODDistance(float& fVehiclesLODDistance, float& fTrainsPlanesLODDistance)
@@ -644,54 +605,28 @@ void CSettingsSA::GetVehiclesLODDistance(float& fVehiclesLODDistance, float& fTr
644605
// Peds LOD draw distance
645606
//
646607
////////////////////////////////////////////////
647-
float ms_fClientMaxPedsLODDistance = DEFAULT_PEDS_LOD_DISTANCE;
648-
float ms_fScriptMaxPedsLODDistance = ms_fClientMaxPedsLODDistance;
649608
bool ms_bMaxPedsLODDistanceFromScript = false;
650609

651610
void CSettingsSA::SetPedsLODDistance(float fPedsLODDistance, bool bFromScript)
652611
{
653-
if (bFromScript)
654-
{
655-
ms_fScriptMaxPedsLODDistance = fPedsLODDistance;
656-
ms_bMaxPedsLODDistanceFromScript = bFromScript;
657-
}
658-
else
659-
ms_fClientMaxPedsLODDistance = fPedsLODDistance;
660-
661-
if (ms_bMaxPedsLODDistanceFromScript)
662-
ms_fPedsLODDistance = Min(ms_fClientMaxPedsLODDistance, ms_fScriptMaxPedsLODDistance);
663-
else
664-
ms_fPedsLODDistance = Min(fPedsLODDistance, ms_fClientMaxPedsLODDistance);
612+
ms_fPedsLODDistance = fPedsLODDistance;
613+
ms_bMaxPedsLODDistanceFromScript = bFromScript;
665614
}
666615

667-
void CSettingsSA::ResetPedsLODDistance(bool bFromScript)
616+
void CSettingsSA::ResetPedsLODDistance(bool bForceDefault)
668617
{
669-
if (!bFromScript)
670-
{
671-
bool bHighDetailPeds;
672-
g_pCore->GetCVars()->Get("high_detail_peds", bHighDetailPeds);
673-
674-
if (bHighDetailPeds)
675-
ms_fClientMaxPedsLODDistance = MAX_PEDS_LOD_DISTANCE;
676-
else
677-
ms_fClientMaxPedsLODDistance = DEFAULT_PEDS_LOD_DISTANCE;
618+
if (ms_bMaxPedsLODDistanceFromScript && !bForceDefault)
619+
return;
678620

679-
// Script still wants to override client setting, let's make sure we use latest max
680-
if (ms_bMaxPedsLODDistanceFromScript)
681-
{
682-
ms_fPedsLODDistance = Min(ms_fClientMaxPedsLODDistance, ms_fScriptMaxPedsLODDistance);
683-
return;
684-
}
685-
}
621+
bool bHighDetailPeds;
622+
g_pCore->GetCVars()->Get("high_detail_peds", bHighDetailPeds);
686623

687-
ms_bMaxPedsLODDistanceFromScript = false;
688-
ms_fPedsLODDistance = ms_fClientMaxPedsLODDistance;
689-
}
624+
if (bHighDetailPeds)
625+
ms_fPedsLODDistance = MAX_PEDS_LOD_DISTANCE;
626+
else
627+
ms_fPedsLODDistance = DEFAULT_PEDS_LOD_DISTANCE;
690628

691-
void CSettingsSA::ResetPedsLODDistanceFromScript()
692-
{
693629
ms_bMaxPedsLODDistanceFromScript = false;
694-
ResetPedsLODDistance(false);
695630
}
696631

697632
float CSettingsSA::GetPedsLODDistance()

Client/game_sa/CSettingsSA.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,7 @@ class CSettingsSA : public CGameSettings
160160
float GetFieldOfViewVehicleMax();
161161

162162
void SetVehiclesLODDistance(float fVehiclesLODDistance, float fTrainsPlanesLODDistance, bool bFromScript);
163-
void ResetVehiclesLODDistance(bool bFromScript);
164-
void ResetVehiclesLODDistanceFromScript();
163+
void ResetVehiclesLODDistance(bool bForceDefault = false);
165164
void GetVehiclesLODDistance(float& fVehiclesLODDistance, float& fTrainsPlanesLODDistance);
166165

167166
void ResetCoronaReflectionsEnabled();
@@ -170,8 +169,7 @@ class CSettingsSA : public CGameSettings
170169
void Save();
171170

172171
void SetPedsLODDistance(float fPedsLODDistance, bool bFromScript);
173-
void ResetPedsLODDistance(bool bFromScript);
174-
void ResetPedsLODDistanceFromScript();
172+
void ResetPedsLODDistance(bool bForceDefault = false);
175173
float GetPedsLODDistance();
176174

177175
static void StaticSetHooks();

Client/mods/deathmatch/logic/CClientGame.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5293,10 +5293,10 @@ void CClientGame::ResetMapInfo()
52935293
g_pMultiplayer->RestoreFogDistance();
52945294

52955295
// Vehicles LOD distance
5296-
g_pGame->GetSettings()->ResetVehiclesLODDistanceFromScript();
5296+
g_pGame->GetSettings()->ResetVehiclesLODDistance(true);
52975297

52985298
// Peds LOD distance
5299-
g_pGame->GetSettings()->ResetPedsLODDistanceFromScript();
5299+
g_pGame->GetSettings()->ResetPedsLODDistance(true);
53005300

53015301
// Corona rain reflections
53025302
g_pGame->GetSettings()->SetCoronaReflectionsControlledByScript(false);

Client/sdk/game/CSettings.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,11 @@ class CGameSettings
157157
virtual float GetFieldOfViewVehicleMax() = 0;
158158

159159
virtual void SetVehiclesLODDistance(float fVehiclesLODDistance, float fTrainsPlanesLODDistance, bool bFromScript) = 0;
160-
virtual void ResetVehiclesLODDistance(bool bFromScript) = 0;
161-
virtual void ResetVehiclesLODDistanceFromScript() = 0;
160+
virtual void ResetVehiclesLODDistance(bool bForceDefault = false) = 0;
162161
virtual void GetVehiclesLODDistance(float& fVehiclesLODDistance, float& fTrainsPlanesLODDistance) = 0;
163162

164163
virtual void SetPedsLODDistance(float fPedsLODDistance, bool bFromScript) = 0;
165-
virtual void ResetPedsLODDistance(bool bFromScript) = 0;
166-
virtual void ResetPedsLODDistanceFromScript() = 0;
164+
virtual void ResetPedsLODDistance(bool bForceDefault = false) = 0;
167165
virtual float GetPedsLODDistance() = 0;
168166

169167
virtual void ResetCoronaReflectionsEnabled() = 0;

0 commit comments

Comments
 (0)