From 9eb9bae939c8c69f4323754481aa27df273e833b Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 29 Jan 2026 20:39:43 +0100 Subject: [PATCH 1/3] Use hashmaps --- addons/interaction/XEH_preInit.sqf | 2 +- .../functions/fnc_initAnimActions.sqf | 2 +- addons/viewports/XEH_preInit.sqf | 2 ++ addons/viewports/dev/debugPoints.sqf | 22 +++++++++---------- .../viewports/functions/fnc_getViewports.sqf | 18 ++++++--------- 5 files changed, 22 insertions(+), 24 deletions(-) diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index ec73b62b1b9..30b980d899c 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -16,7 +16,7 @@ DFUNC(repair_Statement) = { // moved from config because of build problems }; if (hasInterface) then { - GVAR(initializedAnimClasses) = []; + GVAR(initializedAnimClasses) = createHashMap; GVAR(replaceTerrainModels) = createHashMapFromArray call (uiNamespace getVariable QGVAR(cacheReplaceTerrainModels)); }; diff --git a/addons/interaction/functions/fnc_initAnimActions.sqf b/addons/interaction/functions/fnc_initAnimActions.sqf index e47f80008b8..ed2d5eecd49 100644 --- a/addons/interaction/functions/fnc_initAnimActions.sqf +++ b/addons/interaction/functions/fnc_initAnimActions.sqf @@ -21,7 +21,7 @@ private _class = typeOf _object; if (_class in GVAR(initializedAnimClasses)) exitWith {}; -GVAR(initializedAnimClasses) pushBack _class; +GVAR(initializedAnimClasses) set [_class, nil]; private _statement = { params ["_target", "_player", "_params"]; diff --git a/addons/viewports/XEH_preInit.sqf b/addons/viewports/XEH_preInit.sqf index ec82c949b18..d1ebf7fa8e7 100644 --- a/addons/viewports/XEH_preInit.sqf +++ b/addons/viewports/XEH_preInit.sqf @@ -8,6 +8,8 @@ PREP_RECOMPILE_END; #include "initSettings.inc.sqf" +GVAR(viewports) = createHashMap; + #ifdef POINT_CONFIG_DEBUG call compileScript [QPATHTOF(dev\debugPoints.sqf)]; #endif diff --git a/addons/viewports/dev/debugPoints.sqf b/addons/viewports/dev/debugPoints.sqf index 2ffc81f512a..fbe1faa8752 100644 --- a/addons/viewports/dev/debugPoints.sqf +++ b/addons/viewports/dev/debugPoints.sqf @@ -41,7 +41,7 @@ if ((supportInfo "u:diag_mergeConfigFile") isNotEqualTo []) then { call compile 'diag_mergeConfigFile ["P:\z\ace\addons\viewports\config.cpp"]'; }; - { _x setVariable [QGVAR(viewports), nil] } forEach vehicles; + GVAR(viewports) = createHashMap; GVAR(3denIndex) = 0; GVAR(3denViewports) = []; true @@ -111,19 +111,19 @@ // this runs in both threeden and in-game addMissionEventHandler ["Draw3D", { - private _vehicle = vehicle player; - private _viewports = _vehicle getVariable [QGVAR(viewports), []]; - - if (is3DEN) then { - _vehicle = (get3DENSelected "object") param [0, objNull]; - if (isNull _vehicle) exitWith {}; - _viewports = [_vehicle] call FUNC(getViewports); - if (GVAR(3denViewports) isNotEqualTo []) then { - _viewports = GVAR(3denViewports); - }; + private _vehicle = if (is3DEN) then { + (get3DENSelected "object") param [0, objNull] + } else { + vehicle player }; + if (isNull _vehicle) exitWith {}; + private _viewports = if (is3DEN && {GVAR(3denViewports) isNotEqualTo []}) then { + GVAR(3denViewports) + } else { + _vehicle call FUNC(getViewports) + }; drawIcon3D ["#(argb,8,8,3)color(1,1,1,1)", [1,1,0,1], _vehicle modelToWorldVisual [0,0,0], 0.1, 0.1, 0, "", 1, 0.02, "TahomaB"]; if (alive player) then { // not using ace_player so this works in 3den diff --git a/addons/viewports/functions/fnc_getViewports.sqf b/addons/viewports/functions/fnc_getViewports.sqf index 744b9731514..f7e81c1c008 100644 --- a/addons/viewports/functions/fnc_getViewports.sqf +++ b/addons/viewports/functions/fnc_getViewports.sqf @@ -4,10 +4,10 @@ * Gets viewports for a vehicle from config. Caches results to a setVar on the vic. * * Arguments: - * 0: vehicle + * 0: Vehicle * * Return Value: - * ARRAY + * Viewport information - ARRAY * * Example: * [vehicle player] call ace_viewports_fnc_getViewports @@ -17,10 +17,8 @@ params ["_vehicle"]; -private _viewports = _vehicle getVariable [QGVAR(viewports), nil]; - -if (isNil "_viewports") then { - _viewports = (configProperties [(configOf _vehicle) >> "ace_viewports", "isClass _x", true]) apply { +GVAR(viewports) getOrDefaultCall [typeOf _vehicle, { + private _viewports = (configProperties [configOf _vehicle >> QUOTE(ADDON), "isClass _x", true]) apply { // name [STRING] is just used for debug private _name = configName _x; // type [STRING] - Optional @@ -51,7 +49,7 @@ if (isNil "_viewports") then { } else { _vehicle selectionPosition [_camLocation, "Memory"]; }; - _screenLocation =_camLocArray vectorAdd [0,0,-0.175] + _screenLocation = _camLocArray vectorAdd [0,0,-0.175] }; _screenLocation = _vehicle selectionPosition [_screenLocation, "Memory"]; }; @@ -68,7 +66,5 @@ if (isNil "_viewports") then { [_name, _type, _camLocation, _camAttach, _screenLocation, _maxDistance, _compartments, _roles] }; TRACE_3("getViewports",_vehicle,typeOf _vehicle,count _viewports); - _vehicle setVariable [QGVAR(viewports), _viewports]; -}; - -_viewports + _viewports +}, true] // return From c6b24333d215b9d5d4a2d9b31c52eb7d44ee390a Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 29 Jan 2026 20:40:46 +0100 Subject: [PATCH 2/3] Update fnc_getViewports.sqf --- addons/viewports/functions/fnc_getViewports.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/viewports/functions/fnc_getViewports.sqf b/addons/viewports/functions/fnc_getViewports.sqf index f7e81c1c008..0be691fb9fc 100644 --- a/addons/viewports/functions/fnc_getViewports.sqf +++ b/addons/viewports/functions/fnc_getViewports.sqf @@ -7,7 +7,7 @@ * 0: Vehicle * * Return Value: - * Viewport information - ARRAY + * Viewport information * * Example: * [vehicle player] call ace_viewports_fnc_getViewports From d1f8072e0de2c3bbcb3118e5ef9265afd7912b03 Mon Sep 17 00:00:00 2001 From: johnb432 <58661205+johnb432@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:34:14 -0800 Subject: [PATCH 3/3] Update addons/viewports/functions/fnc_getViewports.sqf Co-authored-by: PabstMirror --- addons/viewports/functions/fnc_getViewports.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/viewports/functions/fnc_getViewports.sqf b/addons/viewports/functions/fnc_getViewports.sqf index 0be691fb9fc..a6b1742d506 100644 --- a/addons/viewports/functions/fnc_getViewports.sqf +++ b/addons/viewports/functions/fnc_getViewports.sqf @@ -1,7 +1,7 @@ #include "..\script_component.hpp" /* * Author: PabstMirror - * Gets viewports for a vehicle from config. Caches results to a setVar on the vic. + * Gets viewports for a vehicle from config. Caches results to a hashmap. * * Arguments: * 0: Vehicle