From 29728352e265f85862c33fec5fcbc5bf1a76c184 Mon Sep 17 00:00:00 2001
From: johnb432 <58661205+johnb432@users.noreply.github.com>
Date: Wed, 5 Jun 2024 08:32:41 +0200
Subject: [PATCH] Rearm - Optimise getting magazine names (#10052)
* Optimise getting rearm magazine names
* Replace using regex and localize CSW entries
* Added comments about prefix
---
addons/csw/stringtable.xml | 17 +++++++
addons/rearm/XEH_postInit.sqf | 4 +-
.../rearm/functions/fnc_getMagazineName.sqf | 46 +++++++++----------
3 files changed, 42 insertions(+), 25 deletions(-)
diff --git a/addons/csw/stringtable.xml b/addons/csw/stringtable.xml
index 4aea2a24b4..7c241a8a51 100644
--- a/addons/csw/stringtable.xml
+++ b/addons/csw/stringtable.xml
@@ -1120,5 +1120,22 @@
[CSW] Сумка с СПГ-9М орудием
[CSW] SPG-9M 발사기 가방
+
+
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[班组\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+ ^\[CSW\]
+
diff --git a/addons/rearm/XEH_postInit.sqf b/addons/rearm/XEH_postInit.sqf
index f156fb71d6..0c79790ec0 100644
--- a/addons/rearm/XEH_postInit.sqf
+++ b/addons/rearm/XEH_postInit.sqf
@@ -2,8 +2,8 @@
GVAR(hardpointGroupsCache) = [] call CBA_fnc_createNamespace;
GVAR(configTypesAdded) = [];
-GVAR(magazineNameCache) = [] call CBA_fnc_createNamespace;
-GVAR(originalMagazineNames) = [];
+GVAR(magazineNameCache) = createHashMap;
+GVAR(usedMagazineNames) = createHashMap;
[QGVAR(initSupplyVehicle), {
TRACE_1("initSupplyVehicle EH",_this); // Warning: this can run before settings are init
diff --git a/addons/rearm/functions/fnc_getMagazineName.sqf b/addons/rearm/functions/fnc_getMagazineName.sqf
index 2ee4a988ed..e961831c8c 100644
--- a/addons/rearm/functions/fnc_getMagazineName.sqf
+++ b/addons/rearm/functions/fnc_getMagazineName.sqf
@@ -1,7 +1,7 @@
#include "..\script_component.hpp"
/*
- * Author: PabstMirror
- * Gets a non-ambigious display name for a magazine using displayNameShort (AP/HE)
+ * Author: PabstMirror, johnb43
+ * Gets a non-ambigious display name for a magazine using displayNameShort (AP/HE).
*
* Arguments:
* 0: Magazine Classname
@@ -10,7 +10,7 @@
* Display Name
*
* Example:
- * ["B_20mm_AP"] call ace_rearm_fnc_getMagazineName
+ * "60Rnd_20mm_AP_shells" call ace_rearm_fnc_getMagazineName
*
* Public: No
*/
@@ -18,31 +18,31 @@
params ["_className"];
TRACE_1("getMagazineName",_className);
-private _magName = GVAR(magazineNameCache) getVariable _className;
-if (isNil "_magName") then {
- private _displayName = getText(configFile >> "CfgMagazines" >> _className >> "displayName");
+GVAR(magazineNameCache) getOrDefaultCall [_className, {
+ private _cfgMagazines = configFile >> "CfgMagazines";
+ private _displayName = getText (_cfgMagazines >> _className >> "displayName");
+
if (_displayName == "") then {
_displayName = _className;
WARNING_1("Magazine is missing display name [%1]",_className);
};
- if ((_displayName select [0,6]) == "[CSW] ") then { _displayName = _displayName select [6]; };
+ // [CSW] prefix is localised
+ if (["ace_csw"] call EFUNC(common,isModLoaded)) then {
+ _displayName = trim (_displayName regexReplace [LELSTRING(csw,regex), ""]);
+ };
- GVAR(magazineNameCache) setVariable [_className, _displayName];
- GVAR(originalMagazineNames) pushBack _displayName;
+ // If the display name exists already, add displayNameShort to the existing entry
+ private _existingClassname = GVAR(usedMagazineNames) get _displayName;
+
+ if (!isNil "_existingClassname") then {
+ GVAR(magazineNameCache) set [_existingClassname, format ["%1: %2", _displayName, getText (_cfgMagazines >> _existingClassname >> "displayNameShort")]];
+
+ _displayName = format ["%1: %2", _displayName, getText (_cfgMagazines >> _className >> "displayNameShort")];
+ };
+
+ GVAR(usedMagazineNames) set [_displayName, _className];
TRACE_2("Adding to cache",_className,_displayName);
- // go through all existing cache entries and update if there now are duplicates
- {
- private _xMagName = GVAR(magazineNameCache) getVariable _x;
- if ((_xMagName == _displayName) && {({_xMagName == _x} count GVAR(originalMagazineNames)) > 1}) then {
- private _xMagName = format ["%1: %2", _displayName, getText(configFile >> "CfgMagazines" >> _x >> "displayNameShort")];
- GVAR(magazineNameCache) setVariable [_x, _xMagName];
- TRACE_2("Using unique name",_x,_xMagName);
- };
- } forEach (allVariables GVAR(magazineNameCache));
-
- _magName = GVAR(magazineNameCache) getVariable _className;
-};
-
-_magName
+ _displayName
+}, true] // return