From db682395bbb6322ebd72f857ead4fb1161ade39f Mon Sep 17 00:00:00 2001 From: Marcus Hutchings Date: Tue, 13 Sep 2022 07:54:55 +0100 Subject: [PATCH] Added customisable update rate for unit quad positions to reduce CPU load. --- rts/Sim/Misc/ModInfo.cpp | 2 ++ rts/Sim/Misc/ModInfo.h | 4 ++++ rts/Sim/MoveTypes/MoveType.cpp | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/rts/Sim/Misc/ModInfo.cpp b/rts/Sim/Misc/ModInfo.cpp index 82dd8ebf3b..f953ad65e2 100644 --- a/rts/Sim/Misc/ModInfo.cpp +++ b/rts/Sim/Misc/ModInfo.cpp @@ -35,6 +35,7 @@ void CModInfo::ResetState() allowHoverUnitStrafing = true; maxCollisionPushMultiplier = std::numeric_limits::infinity(); + unitQuadPositionUpdateRate = 3; } { constructionDecay = true; @@ -161,6 +162,7 @@ void CModInfo::Init(const std::string& modFileName) allowGroundUnitGravity = movementTbl.GetBool("allowGroundUnitGravity", allowGroundUnitGravity); allowHoverUnitStrafing = movementTbl.GetBool("allowHoverUnitStrafing", (pathFinderSystem == QTPFS_TYPE)); maxCollisionPushMultiplier = movementTbl.GetFloat("maxCollisionPushMultiplier", maxCollisionPushMultiplier); + unitQuadPositionUpdateRate = movementTbl.GetInt("unitQuadPositionUpdateRate", unitQuadPositionUpdateRate); } { diff --git a/rts/Sim/Misc/ModInfo.h b/rts/Sim/Misc/ModInfo.h index 9c3334831e..d58899a33e 100644 --- a/rts/Sim/Misc/ModInfo.h +++ b/rts/Sim/Misc/ModInfo.h @@ -55,6 +55,10 @@ class CModInfo // relative to a unit's maxspeed (default: inf) float maxCollisionPushMultiplier; + // rate in sim frames that a unit's position in the quad grid is updated (default: 3) + // lower the number will increase CPU load, but increase accuracy of collision detection + int unitQuadPositionUpdateRate; + // Build behaviour /// Should constructions without builders decay? bool constructionDecay; diff --git a/rts/Sim/MoveTypes/MoveType.cpp b/rts/Sim/MoveTypes/MoveType.cpp index 3e2eecce74..4aa75f6d79 100644 --- a/rts/Sim/MoveTypes/MoveType.cpp +++ b/rts/Sim/MoveTypes/MoveType.cpp @@ -5,6 +5,8 @@ #include "MoveType.h" #include "Map/Ground.h" +#include "Sim/Misc/GlobalSynced.h" +#include "Sim/Misc/ModInfo.h" #include "Sim/Misc/QuadField.h" #include "Sim/Units/Unit.h" #include "Sim/Units/UnitDef.h" @@ -72,6 +74,9 @@ AMoveType::AMoveType(CUnit* owner): void AMoveType::UpdateCollisionMap() { + if ((gs->frameNum + owner->id) % modInfo.unitQuadPositionUpdateRate) + return; + if (owner->pos != oldSlowUpdatePos) { const int newMapSquare = CGround::GetSquare(oldSlowUpdatePos = owner->pos);