mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
b6dd7b941f
Fixes #2514 by only rendering individual unit icons when zoomed in and only rendering the units currently within the screen bounds. Behaves as expected, but whether or not it has a significant performance increase under scaled up testing conditions remains to be seen.
68 lines
1.9 KiB
Plaintext
68 lines
1.9 KiB
Plaintext
/*
|
|
* Author: Head, SilentSpike
|
|
* Handles rendering the spectator map icons
|
|
*
|
|
* Arguments:
|
|
* 0: Parameters <ANY>
|
|
* 1: PFH handle <NUMBER>
|
|
*
|
|
* Return Value:
|
|
* None <NIL>
|
|
*
|
|
* Example:
|
|
* [ace_spectator_fnc_handleIcons, 0] call CBA_fnc_addPerFrameHandler;
|
|
*
|
|
* Public: No
|
|
*/
|
|
|
|
#include "script_component.hpp"
|
|
|
|
params ["_map"];
|
|
private ["_center","_radius","_scaled","_drawVehicles","_leader","_color","_cachedVehicles","_unit","_icon","_txt"];
|
|
|
|
if (GVAR(camMode) == 0) then {
|
|
_map drawIcon ["\A3\UI_F\Data\GUI\Rsc\RscDisplayMissionEditor\iconcamera_ca.paa",[0,0,0,1],GVAR(freeCamera),20,20,GVAR(camPan)];
|
|
};
|
|
|
|
_center = _map ctrlMapScreenToWorld [0.5,0.5];
|
|
_radius = (_map ctrlMapScreenToWorld [safeZoneX,safeZoneY]) distance2D _center;
|
|
_scaled = (ctrlMapScale _map) > 0.2;
|
|
|
|
// Draw only group icons when scaled out
|
|
_drawVehicles = [];
|
|
{
|
|
_leader = leader _x;
|
|
if (_scaled) then {
|
|
_color = GETVAR(_x,GVAR(gColor),[ARR_4(0,0,0,0)]);
|
|
_map drawIcon ["\A3\ui_f\data\map\markers\nato\b_inf.paa", _color, _leader, 20, 20, 0, "", 0, 0];
|
|
} else {
|
|
if ((_leader distance2D _center) < _radius) then {
|
|
_drawVehicles append (units _x);
|
|
};
|
|
};
|
|
nil
|
|
} count GVAR(groupList);
|
|
|
|
// Draw units when group leader is within screen bounds
|
|
_cachedVehicles = [];
|
|
{
|
|
_unit = vehicle _x;
|
|
|
|
if !(_unit in _cachedVehicles) then {
|
|
_cachedVehicles pushBack _unit;
|
|
|
|
// Use previously cached info where possible
|
|
if (GETVAR(_unit,GVAR(uIcon),"") == "") then {
|
|
[_unit] call FUNC(cacheUnitInfo);
|
|
};
|
|
|
|
// Function has caching built in
|
|
_color = [side effectiveCommander _unit] call BIS_fnc_sideColor;
|
|
_icon = GETVAR(_unit,GVAR(uIcon),"");
|
|
_txt = ["", GETVAR(_x,GVAR(uName),"")] select (isPlayer _x);
|
|
|
|
_map drawIcon [_icon, _color, _unit, 19, 19, getDir _unit, _txt, 1, 0.04];
|
|
};
|
|
nil
|
|
} count (_drawVehicles arrayIntersect GVAR(unitList));
|