/* milsim_fnc_addMedicalOverlayPFH Author: IndigoFox Description: Affects players with medical permissions. Will see a 3D colored dot over nearby (5-10m) unconscious players who are not in a vehicle which indicates their current ACE Triage Card status. Designed to increase efficiency of CCPs. */ // Force setting if CBA doesn't work? if (isNil "milsim_client_medState3D_enabled") then { milsim_client_medState3D_enabled = true; }; if (isNil "milsim_client_medState3D_drawRange") then { milsim_client_medState3D_drawRange = 10; }; // List of units to draw icons for milsim_client_medState3D_drawTargets = []; // ACE Triage colors, for consistency across UIs and functions // #define TRIAGE_COLOR_NONE 0.5, 0.5, 0.5, 0.1 // #define TRIAGE_COLOR_MINIMAL 0, 0.5, 0, 0.9 // #define TRIAGE_COLOR_DELAYED 1, 0.84, 0, 0.9 // #define TRIAGE_COLOR_IMMEDIATE 1, 0, 0, 0.9 // #define TRIAGE_COLOR_DECEASED 0, 0, 0, 0.9 // ACE Triage colors, for consistency across UIs and functions milsim_client_medState3D_colors = [ [0, 0.5, 0, 0.9], // TRIAGE_COLOR_MINIMAL [1, 0.84, 0, 0.9], // TRIAGE_COLOR_DELAYED [1, 0, 0, 0.9], // TRIAGE_COLOR_IMMEDIATE [0, 0, 0, 0.9], // TRIAGE_COLOR_DECEASED [0.5, 0.5, 0.5, 0] // TRIAGE_COLOR_NONE ]; // Per-frame handler to draw icons // cleanup [milsim_client_medState3D_drawTargetsPfh] call CBA_fnc_removePerFrameHandler; // add pfh milsim_client_medState3D_pfh = [{ // if disabled, skip processing if (!milsim_client_medState3D_enabled) exitWith {false}; // if no targets, skip processing if (count milsim_client_medState3D_drawTargets == 0) exitWith {false}; if !([player] call ace_medical_treatment_fnc_isMedic) exitWith {false}; { // distance within 10 meters if (player distance _x > milsim_client_medState3D_drawRange) then {continue}; // check unit not null, not conscious, and not in a vehicle if ( !(_x getVariable ["ACE_isUnconscious", false]) || !isNull (objectParent _x) ) then {continue}; // color based on triage level private _color = milsim_client_medState3D_colors select ( (_x getVariable ["ace_medical_triageLevel", -1]) -1 ); // draw position, slightly above the prone unit private _drawPos = (visiblePosition _x) vectorAdd [0, 0, 0.5]; // draw icon drawIcon3D [ "\A3\ui_f\data\map\markers\military\dot_CA.paa", // icon texture _color, // color _drawPos, // position AGL 1, // width 1, // height 0 // angle // further params optional, omitted ]; } forEach milsim_client_medState3D_drawTargets; }, 0, []] call CBA_fnc_addPerFrameHandler; // subroutine to gather nearest 50 units every 5 seconds and store in milsim_client_medState3D_drawTargets // cleanup [milsim_client_medState3D_drawTargetsPfh] call CBA_fnc_removePerFrameHandler; // add pfh milsim_client_medState3D_drawTargetsPfh = [{ milsim_client_medState3D_drawTargets = ( (allUnits + allDeadMen) select { _x isKindOf "CAManBase" && player distance _x < 50 && !isNull _x && player isNotEqualTo _x } ); }, 5, false] call CBA_fnc_addPerFrameHandler;