From 980107e00b83090626b43412df58ab87d29d8abc Mon Sep 17 00:00:00 2001 From: Valmo Trindade Date: Thu, 6 Aug 2026 15:00:52 -0300 Subject: [PATCH] Improved entity router cycle --- addons/client/XEH_PREP.hpp | 1 + addons/client/XEH_postInit.sqf | 2 + .../fnc_initCuratorRouterIndicators.sqf | 49 +++++++++++++++++++ .../server/functions/fnc_routerEntityAdd.sqf | 2 +- .../functions/fnc_routerEntityRemove.sqf | 2 +- 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 addons/client/functions/fnc_initCuratorRouterIndicators.sqf diff --git a/addons/client/XEH_PREP.hpp b/addons/client/XEH_PREP.hpp index 1d7b27b..af9d077 100644 --- a/addons/client/XEH_PREP.hpp +++ b/addons/client/XEH_PREP.hpp @@ -1,4 +1,5 @@ PREP(convertClientLocation); PREP(extractClientPosition); +PREP(initCuratorRouterIndicators); PREP(sendLaserRangeFinder); PREP(startUDPSocket); diff --git a/addons/client/XEH_postInit.sqf b/addons/client/XEH_postInit.sqf index 64e7a5b..8aab45a 100644 --- a/addons/client/XEH_postInit.sqf +++ b/addons/client/XEH_postInit.sqf @@ -7,3 +7,5 @@ _local_address = "armatak" callExtension ["local_ip", []] select 0; SETVAR(player,GVAR(localAddress),_local_address); SETVAR(player,GVAR(eudConnected),false); SETVAR(player,GVAR(lrfEnabled),false); + +call FUNC(initCuratorRouterIndicators); diff --git a/addons/client/functions/fnc_initCuratorRouterIndicators.sqf b/addons/client/functions/fnc_initCuratorRouterIndicators.sqf new file mode 100644 index 0000000..d5d435e --- /dev/null +++ b/addons/client/functions/fnc_initCuratorRouterIndicators.sqf @@ -0,0 +1,49 @@ +#include "..\script_component.hpp" +/* + * Author: Codex + * Draws a Zeus-only visual border over entities routed by the ArmaTAK CoT Router. + * + * Arguments: + * None + * + * Return Value: + * Draw3D event handler id + * + * Public: No + */ + +if (!hasInterface) exitWith {-1}; + +private _existingEh = missionNamespace getVariable [QGVAR(curatorRouterIndicatorEh), -1]; +if (_existingEh >= 0) exitWith {_existingEh}; + +private _eh = addMissionEventHandler ["Draw3D", { + if (isNull findDisplay 312) exitWith {}; + + private _curator = getAssignedCuratorLogic player; + if (isNull _curator) exitWith {}; + + private _routed = missionNamespace getVariable ["armatak_server_syncedUnits", []]; + if (_routed isEqualTo []) exitWith {}; + + private _editableObjects = curatorEditableObjects _curator; + private _texture = "\a3\ui_f\data\IGUI\Cfg\Cursors\selected_ca.paa"; + private _color = [0, 0.85, 1, 0.95]; + private _camera = curatorCamera; + + { + if (!isNull _x && {alive _x} && {_x in _editableObjects}) then { + private _pos = ASLToAGL (getPosASLVisual _x); + _pos set [2, (_pos select 2) + 0.12]; + + private _distance = _camera distance _x; + private _size = linearConversion [0, 2000, _distance, 0.8, 1.35, true]; + private _textSize = linearConversion [0, 2000, _distance, 0.032, 0.05, true]; + drawIcon3D [_texture, _color, _pos, _size, _size, 0, "TAK", 1, _textSize, "RobotoCondensed", "center"]; + }; + } forEach _routed; +}]; + +missionNamespace setVariable [QGVAR(curatorRouterIndicatorEh), _eh]; + +_eh diff --git a/addons/server/functions/fnc_routerEntityAdd.sqf b/addons/server/functions/fnc_routerEntityAdd.sqf index e4d375b..a2e6f4e 100644 --- a/addons/server/functions/fnc_routerEntityAdd.sqf +++ b/addons/server/functions/fnc_routerEntityAdd.sqf @@ -36,7 +36,7 @@ switch (false) do { GVAR(syncedUnits) pushBack _unit; - missionNamespace setVariable ["armatak_server_syncedUnits", GVAR(syncedUnits)]; + missionNamespace setVariable ["armatak_server_syncedUnits", GVAR(syncedUnits), true]; SETVAR(_unit,GVAR(isRouting),true); deleteVehicle _logic; diff --git a/addons/server/functions/fnc_routerEntityRemove.sqf b/addons/server/functions/fnc_routerEntityRemove.sqf index 40acc86..d73fea4 100644 --- a/addons/server/functions/fnc_routerEntityRemove.sqf +++ b/addons/server/functions/fnc_routerEntityRemove.sqf @@ -34,7 +34,7 @@ switch (false) do { }; } forEach GVAR(syncedUnits); - missionNamespace setVariable ["armatak_server_syncedUnits", GVAR(syncedUnits)]; + missionNamespace setVariable ["armatak_server_syncedUnits", GVAR(syncedUnits), true]; SETVAR(_unit,GVAR(isRouting),false); deleteVehicle _logic;