From 492dcc4291e28033c7a4908560473087bac5b169 Mon Sep 17 00:00:00 2001 From: Saurtron Date: Tue, 17 Dec 2024 16:48:20 +0100 Subject: [PATCH 1/3] Make SelectedUnitsHandler be a bit smarter about deciding when it needs to update. --- rts/Game/SelectedUnitsHandler.cpp | 37 +++++++++++++++++++------------ 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/rts/Game/SelectedUnitsHandler.cpp b/rts/Game/SelectedUnitsHandler.cpp index 473da42b76..b9a9a44b3d 100644 --- a/rts/Game/SelectedUnitsHandler.cpp +++ b/rts/Game/SelectedUnitsHandler.cpp @@ -400,37 +400,44 @@ void CSelectedUnitsHandler::AddUnit(CUnit* unit) if (unit->noSelect) return; - if (selectedUnits.insert(unit->id).second) + if (selectedUnits.insert(unit->id).second) { AddDeathDependence(unit, DEPENDENCE_SELECTED); - selectionChanged = true; - possibleCommandsChanged = true; + selectionChanged = true; + possibleCommandsChanged = true; - const CGroup* g = unit->GetGroup(); + const CGroup* g = unit->GetGroup(); - if (g == nullptr || g->id != selectedGroup) - selectedGroup = -1; + if (g == nullptr || g->id != selectedGroup) + selectedGroup = -1; - unit->isSelected = true; + unit->isSelected = true; + } } void CSelectedUnitsHandler::RemoveUnit(CUnit* unit) { RECOIL_DETAILED_TRACY_ZONE; - if (selectedUnits.erase(unit->id)) + if (selectedUnits.erase(unit->id)) { DeleteDeathDependence(unit, DEPENDENCE_SELECTED); - selectionChanged = true; - possibleCommandsChanged = true; - selectedGroup = -1; - unit->isSelected = false; + selectionChanged = true; + possibleCommandsChanged = true; + selectedGroup = -1; + unit->isSelected = false; + } } void CSelectedUnitsHandler::ClearSelected() { RECOIL_DETAILED_TRACY_ZONE; + + if (selectedUnits.empty()) { + return; + } + for (const int unitID: selectedUnits) { CUnit* u = unitHandler.GetUnit(unitID); @@ -482,8 +489,10 @@ void CSelectedUnitsHandler::SelectGroup(int num) } } - selectionChanged = true; - possibleCommandsChanged = true; + if (selectedUnits.size()) { + selectionChanged = true; + possibleCommandsChanged = true; + } } From 4bf2833d30ec22e688b334a55bf9091aac1fef3a Mon Sep 17 00:00:00 2001 From: saurtron Date: Tue, 17 Dec 2024 20:00:29 +0100 Subject: [PATCH 2/3] better use !empty() than size() Co-authored-by: sprunk --- rts/Game/SelectedUnitsHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rts/Game/SelectedUnitsHandler.cpp b/rts/Game/SelectedUnitsHandler.cpp index b9a9a44b3d..9f19c188dd 100644 --- a/rts/Game/SelectedUnitsHandler.cpp +++ b/rts/Game/SelectedUnitsHandler.cpp @@ -489,7 +489,7 @@ void CSelectedUnitsHandler::SelectGroup(int num) } } - if (selectedUnits.size()) { + if (!selectedUnits.empty()) { selectionChanged = true; possibleCommandsChanged = true; } From 9c221891548a7a2b22f869b895ae503bd2c1fdb2 Mon Sep 17 00:00:00 2001 From: Saurtron Date: Thu, 26 Dec 2024 10:52:33 +0100 Subject: [PATCH 3/3] Assert unit is not selected after CSelectedUnitsHandler::RemoveUnit. --- rts/Game/SelectedUnitsHandler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/rts/Game/SelectedUnitsHandler.cpp b/rts/Game/SelectedUnitsHandler.cpp index 9f19c188dd..27bf708643 100644 --- a/rts/Game/SelectedUnitsHandler.cpp +++ b/rts/Game/SelectedUnitsHandler.cpp @@ -427,6 +427,7 @@ void CSelectedUnitsHandler::RemoveUnit(CUnit* unit) selectedGroup = -1; unit->isSelected = false; } + assert(!unit->isSelected); }