Compare commits

..

11 Commits

5 changed files with 240 additions and 103 deletions

View File

@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project badly attempts [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [3.1.2] - 2024-01-04
### Added
- Add forgotten code file file for medical overlay
## [3.1.1] - 2024-01-04
### Changed
- Spelling Fixes
- Update class binding for vehicle flag interaction
## [3.1.0] - 2023-12-17 ## [3.1.0] - 2023-12-17
### Added ### Added

View File

@@ -32,6 +32,7 @@ class milsim
class bindEventHandlers { postInit = 1; }; class bindEventHandlers { postInit = 1; };
class bindVehicleActions { postInit = 1; }; class bindVehicleActions { postInit = 1; };
class addClientStatsPFH {}; class addClientStatsPFH {};
class addMedicalOverlayPFH { postInit = 1; }; // nees refactor
class calculateClientStats {}; class calculateClientStats {};
class initVehicleFlags { postInit = 1; }; class initVehicleFlags { postInit = 1; };
class bindEmptyGroupGarbageCleanup { postInit = 1; }; class bindEmptyGroupGarbageCleanup { postInit = 1; };

View File

@@ -0,0 +1,79 @@
// Enable/Disable the script
if (isNil "milsim_client_medState3D_enabled") then {
milsim_client_medState3D_enabled = true;
};
// List of units to draw icons for
milsim_client_medState3D_drawTargets = [];
// Range to draw icons for
milsim_client_medState3D_drawRange = 10;
// 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
milsim_client_medState3D_pfh = [
{
// if disabled, skip processing
if (!milsim_client_medState3D_enabled) exitWith {};
// if no targets, skip processing
if (count milsim_client_medState3D_drawTargets == 0) exitWith {};
if !([player] call ace_medical_treatment_fnc_isMedic) exitWith {};
{
// 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 (
isNull _x ||
!(_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;
[
"Man",
"InitPost",
{
params ["_unit"];
milsim_client_medState3D_drawTargets pushBack _unit;
},
true,
[],
true
] call CBA_fnc_addClassEventHandler;

View File

@@ -80,111 +80,146 @@ milsim_vehicleflag_options = [
]; ];
private _appliedParentClasses = [
"LandVehicle",
"Helicopter"
];
["AllVehicles", "InitPost", { private _modelsWithoutFlagProxies = [
private _flagActionID = "SetVehicleFlag"; "TF373_SOAR_MH47G_Base", // MH-47G Chinook
private _flagMasterAction = [ "RHS_MELB_base", // MELB AH-6M/MH-6M/H-6M Little Bird
_flagActionID, // id "USAF_C17", // C17 Globemaster III
"Set Vehicle Flag", // displayed title "USAF_C130J", // C130J Super Hercules
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon "USAF_AC130U", // AC130 Spooky II
{true}, // statement "ej_UH60M_base", // UH-60M Black Hawk + DAP variants
{true}, // condition "rhsusf_fmtv_base" // M1083A1P2 variants + SOV SOCOM variants
{ ];
params ["_target", "_player", "_params"];
private _flagActionID = _params#0; {
private _actions = []; private _parentClass = _x;
[_parentClass, "InitPost", {
private _flagActionID = "SetVehicleFlag";
private _flagMasterAction = [
_flagActionID, // id
"Set Vehicle Flag", // displayed title
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon
{true}, // statement
{ {
_x params ["_flagCategory", "_flagOptions"]; params ["_target", "_player", "_params"];
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions]; private _modelsWithoutFlagProxies = _params select 1;
private _flagCategoryOption = [ // check if hierarchy includes any of the models without flag proxies
_flagActionID + "_" + _flagCategory, // id private _excluded = false;
_flagCategory, // displayed title {
(_flagOptions#0#1) get "Texture", // flag icon if (_excluded) exitWith {false};
{true}, // statement _excluded = _target isKindOf _x;
{ } forEach _modelsWithoutFlagProxies;
params ["_target", "_player", "_params"]; if (_excluded) exitWith {false};
alive _target;
// true;
}, // condition // check if vehicle is alive
{ alive _target;
params ["_target", "_player", "_params"]; }, // condition
_params params ["_flagActionID", "_flagCategoryID", "_flagOptions"]; {
private _categoryOptions = []; params ["_target", "_player", "_params"];
private _flagActionID = _params#0;
private _actions = [];
{
_x params ["_flagCategory", "_flagOptions"];
// diag_log format ["NewFlagCategory: %1 %2", _flagCategory, _flagOptions];
private _flagCategoryOption = [
_flagActionID + "_" + _flagCategory, // id
_flagCategory, // displayed title
(_flagOptions#0#1) get "Texture", // flag icon
{true}, // statement
{ {
_x params ["_flagOptionID", "_flagOptionData"]; params ["_target", "_player", "_params"];
// diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData]; alive _target;
private _newFlagOption = [ // true;
_flagActionID + "_" + _flagCategory + "_" + _flagOptionID, // id }, // condition
_flagOptionData get "Title", // displayed title {
_flagOptionData get "Texture", // flag icon params ["_target", "_player", "_params"];
{ _params params ["_flagActionID", "_flagCategoryID", "_flagOptions"];
params ["_target", "_player", "_params"]; private _categoryOptions = [];
_target forceFlagTexture (_params select 2); {
}, // statement _x params ["_flagOptionID", "_flagOptionData"];
{ // diag_log format ["NewFlagOption: %1 %2", _flagOptionID, _flagOptionData];
params ["_target", "_player", "_params"]; private _newFlagOption = [
alive _target; _flagActionID + "_" + _flagCategory + "_" + _flagOptionID, // id
// true; _flagOptionData get "Title", // displayed title
}, // condition _flagOptionData get "Texture", // flag icon
nil, // child code {
[_flagActionID, _flagCategoryID, getMissionPath (_flagOptionData get "Texture")], // params params ["_target", "_player", "_params"];
nil, // position _target forceFlagTexture (_params select 2);
4, // distance }, // statement
[false, false, false, false, false] // other params {
] call ace_interact_menu_fnc_createAction; params ["_target", "_player", "_params"];
_categoryOptions pushBack [_newFlagOption, [], _target]; alive _target;
} forEach _flagOptions; // true;
_categoryOptions; }, // condition
}, // child code nil, // child code
[_flagActionID, _flagCategoryID, _flagOptions], // params [_flagActionID, _flagCategoryID, getMissionPath (_flagOptionData get "Texture")], // params
nil, // position nil, // position
4, // distance 4, // distance
[false, false, false, false, false], // other params [false, false, false, false, false] // other params
nil // modifier function code ] call ace_interact_menu_fnc_createAction;
] call ace_interact_menu_fnc_createAction; _categoryOptions pushBack [_newFlagOption, [], _target];
} forEach _flagOptions;
_categoryOptions;
}, // child code
[_flagActionID, _flagCategoryID, _flagOptions], // params
nil, // position
4, // distance
[false, false, false, false, false], // other params
nil // modifier function code
] call ace_interact_menu_fnc_createAction;
_actions pushBack [_flagCategoryOption, [], _target]; _actions pushBack [_flagCategoryOption, [], _target];
} forEach milsim_vehicleflag_options; } forEach milsim_vehicleflag_options;
_actions; _actions;
}, // child code }, // child code
[_flagActionID], // params [_flagActionID, _modelsWithoutFlagProxies], // params
nil, // position nil, // position
4, // distance 4, // distance
[false, false, false, false, false], // other params [false, false, false, false, false], // other params
nil // modifier function code nil // modifier function code
] call ace_interact_menu_fnc_createAction; ] call ace_interact_menu_fnc_createAction;
// add action to add flag // add action to add flag
[ [
(_this select 0), // object (_this select 0), // object
0, // action 0 or self-action 1 0, // action 0 or self-action 1
["ACE_MainActions"], // parent ["ACE_MainActions"], // parent
_flagMasterAction // action _flagMasterAction // action
] call ace_interact_menu_fnc_addActionToObject; ] call ace_interact_menu_fnc_addActionToObject;
// add action to remove flag // add action to remove flag
private _removeFlagAction = [ private _removeFlagAction = [
_flagActionID + "_removeflag", // id _flagActionID + "_removeflag", // id
"Remove Flag", // displayed title "Remove Flag", // displayed title
"\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon "\A3\ui_f\data\map\markers\flags\nato_ca.paa", // flag icon
{ {
params ["_target", "_player", "_params"]; params ["_target", "_player", "_params"];
_target forceFlagTexture ""; _target forceFlagTexture "";
}, // statement }, // statement
{true}, // condition {
nil // child code params ["_target", "_player", "_params"];
] call ace_interact_menu_fnc_createAction; alive _target && getForcedFlagTexture _target != "";
}, // condition
nil // child code
] call ace_interact_menu_fnc_createAction;
[ [
(_this select 0), // object (_this select 0), // object
0, // action 0 or self-action 1 0, // action 0 or self-action 1
["ACE_MainActions", _flagActionID], // parent ["ACE_MainActions", _flagActionID], // parent
_removeFlagAction // action _removeFlagAction // action
] call ace_interact_menu_fnc_addActionToObject; ] call ace_interact_menu_fnc_addActionToObject;
}, true, [], true] call CBA_fnc_addClassEventHandler; }, true, [], true] call CBA_fnc_addClassEventHandler;
} forEach _appliedParentClasses;
nil; nil;

View File

@@ -6,7 +6,7 @@
"milsim_sideChat", "milsim_sideChat",
"CHECKBOX", "CHECKBOX",
"Side Chat Text Enabled", "Side Chat Text Enabled",
["17th Battallion", "Side Chat"], ["17th Battalion", "Side Chat"],
false, false,
true, true,
{ {
@@ -25,7 +25,7 @@
"milsim_server_cps_enable", "milsim_server_cps_enable",
"CHECKBOX", "CHECKBOX",
"CPS Metrics Enabled", "CPS Metrics Enabled",
["17th Battallion", "Server Metrics"], ["17th Battalion", "Server Metrics"],
true, true,
true, true,
{ {
@@ -40,7 +40,7 @@
"milsim_server_cps_interval", "milsim_server_cps_interval",
"TIME", "TIME",
"Metrics Interval", "Metrics Interval",
["17th Battallion", "Server Metrics"], ["17th Battalion", "Server Metrics"],
[60,300,120], [60,300,120],
true, true,
{ {
@@ -71,7 +71,7 @@
"milsim_client_cps_enable", "milsim_client_cps_enable",
"CHECKBOX", "CHECKBOX",
"CPS Metrics Enabled", "CPS Metrics Enabled",
["17th Battallion", "Client Metrics"], ["17th Battalion", "Client Metrics"],
true, true,
true, true,
{ {
@@ -86,7 +86,7 @@
"milsim_client_cps_interval", "milsim_client_cps_interval",
"TIME", "TIME",
"CPS Metrics Interval", "CPS Metrics Interval",
["17th Battallion", "Client Metrics"], ["17th Battalion", "Client Metrics"],
[60,300,120], [60,300,120],
true, true,
{ {
@@ -104,6 +104,17 @@
} }
] call CBA_fnc_addSetting; ] call CBA_fnc_addSetting;
//---------------------
// Medical Overlay
//---------------------
[
"milsim_client_medState3D_enabled",
"CHECKBOX",
["Enable 3D Triage Card State", "Draws a colored dot over units within 10m indicating current ACE Triage State"],
"Medical",
true
] call CBA_fnc_addSetting;
diag_log text "[MILSIM] (settings) Custom CBA settings initialized"; diag_log text "[MILSIM] (settings) Custom CBA settings initialized";