diff --git a/addons/medical_feedback/RscInGameUI.hpp b/addons/medical_feedback/RscInGameUI.hpp index 275117ca8ef..cc2712d8ab3 100644 --- a/addons/medical_feedback/RscInGameUI.hpp +++ b/addons/medical_feedback/RscInGameUI.hpp @@ -1,7 +1,12 @@ class RscPictureKeepAspect; class RscInGameUI { class RscStanceInfo { - controls[] += {QGVAR(bloodVolumeIndicator)}; + controls[] += { + QGVAR(bloodVolumeIndicator), + QGVAR(stateIndicator1), + QGVAR(stateIndicator2), + QGVAR(stateIndicator3) + }; class GVAR(bloodVolumeIndicator): RscPictureKeepAspect { onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(bloodVolumeIndicator),_this select 0)]); x = IGUI_GRID_STANCE_X; @@ -9,5 +14,21 @@ class RscInGameUI { w = IGUI_GRID_STANCE_WAbs / 4; h = IGUI_GRID_STANCE_HAbs / 4; }; + + class GVAR(stateIndicator1): RscPictureKeepAspect { + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(stateIndicator1), _this select 0)]); + x = IGUI_GRID_STANCE_X + IGUI_GRID_STANCE_WAbs * 3 / 4; + y = IGUI_GRID_STANCE_Y; + w = IGUI_GRID_STANCE_WAbs / 4; + h = IGUI_GRID_STANCE_HAbs / 4; + }; + class GVAR(stateIndicator2): GVAR(stateIndicator1) { + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(stateIndicator2), _this select 0)]); + y = IGUI_GRID_STANCE_Y + IGUI_GRID_STANCE_HAbs / 4; + }; + class GVAR(stateIndicator3): GVAR(stateIndicator1) { + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(stateIndicator3), _this select 0)]); + y = IGUI_GRID_STANCE_Y + IGUI_GRID_STANCE_HAbs * 2 / 4; + }; }; }; diff --git a/addons/medical_feedback/XEH_PREP.hpp b/addons/medical_feedback/XEH_PREP.hpp index e6c48d65069..85dcd64d430 100644 --- a/addons/medical_feedback/XEH_PREP.hpp +++ b/addons/medical_feedback/XEH_PREP.hpp @@ -5,6 +5,7 @@ PREP(effectHeartBeat); PREP(effectIncapacitated); PREP(effectPain); PREP(effectUnconscious); +PREP(handleHUDIndicators); PREP(handleEffects); PREP(initEffects); PREP(playInjuredSound); diff --git a/addons/medical_feedback/data/fracture.paa b/addons/medical_feedback/data/fracture.paa new file mode 100644 index 00000000000..b1a48138d79 Binary files /dev/null and b/addons/medical_feedback/data/fracture.paa differ diff --git a/addons/medical_feedback/data/splint.paa b/addons/medical_feedback/data/splint.paa new file mode 100644 index 00000000000..a82349885d4 Binary files /dev/null and b/addons/medical_feedback/data/splint.paa differ diff --git a/addons/medical_feedback/data/tourniquet.paa b/addons/medical_feedback/data/tourniquet.paa new file mode 100644 index 00000000000..59e0076ed26 Binary files /dev/null and b/addons/medical_feedback/data/tourniquet.paa differ diff --git a/addons/medical_feedback/functions/fnc_handleEffects.sqf b/addons/medical_feedback/functions/fnc_handleEffects.sqf index 77c8d9f1ae8..4f81ba46896 100644 --- a/addons/medical_feedback/functions/fnc_handleEffects.sqf +++ b/addons/medical_feedback/functions/fnc_handleEffects.sqf @@ -58,4 +58,9 @@ if ((!GVAR(heartBeatEffectRunning)) && {_heartRate != 0} && {(_heartRate > 160) [!_unconscious, _pain] call FUNC(effectPain); [!_unconscious, _bleedingStrength, _manualUpdate] call FUNC(effectBleeding); +// - Tourniquets, fractures and splints indication --------------------------------------- +if (GVAR(enableHUDIndicators)) then { + [] call FUNC(handleHUDIndicators); +}; + END_COUNTER(handleEffects); diff --git a/addons/medical_feedback/functions/fnc_handleHUDIndicators.sqf b/addons/medical_feedback/functions/fnc_handleHUDIndicators.sqf new file mode 100644 index 00000000000..5579c621101 --- /dev/null +++ b/addons/medical_feedback/functions/fnc_handleHUDIndicators.sqf @@ -0,0 +1,64 @@ +#include "script_component.hpp" +/* + * Author: 10Dozen + * Handles indication of the fractures, applied tourniquets and splints over Stance indicator. + * Draws an icon if there is at least 1 fracture/splint/tourniquet applied. + * + * Arguments: + * 0: Flag to drop all indicators (optional) + * + * Return Value: + * None + * + * Example: + * [false] call ace_medical_feedback_fnc_handleHUDIndicators + * + * Public: No + */ +params [["_dropAllIndicators", false]]; + +private _indicatorSlots = [ + uiNamespace getVariable [QGVAR(stateIndicator1), controlNull], + uiNamespace getVariable [QGVAR(stateIndicator2), controlNull], + uiNamespace getVariable [QGVAR(stateIndicator3), controlNull] +]; + +// --- Removes any indication and exit +if (_dropAllIndicators) exitWith { + { + _x ctrlSetText ""; + } forEach _indicatorSlots; +}; + +// --- Tourniquets +private _hasTourniquets = GET_TOURNIQUETS(ACE_player) findIf {_x > 0} > -1; +private _tourniquetIcon = ["", ICON_TOURNIQUET_PATH] select _hasTourniquets; + +// --- Fractures and Splints +private _fractureSettings = EGVAR(medical,fractures); +private _fractureIcon = ""; +private _splintIcon = ""; + +if (_fractureSettings > 0) then { + // --- Fractures enabled: check for fracture indication + private _hasFractures = GET_FRACTURES(ACE_player) findIf {_x > 0} > -1; + _fractureIcon = ["", ICON_FRACTURE_PATH] select _hasFractures; + + if (_fractureSettings > 1) then { + // --- Fractures can not be fully healed: check for splint indication + private _hasSplints = GET_FRACTURES(ACE_player) findIf {_x == -1} > -1; + _splintIcon = ["", ICON_SPLINT_PATH] select _hasSplints; + }; +}; + +// --- Get prioritized list of icons to apply +private _icons = [ + _fractureIcon, + _tourniquetIcon, + _splintIcon +] select {_x isNotEqualTo ""}; + +// --- Apply icons to indicator slots, if no icon for slot - remove slot's text +{ + _x ctrlSetText (_icons param [_forEachIndex, ""]); +} forEach _indicatorSlots; diff --git a/addons/medical_feedback/initSettings.sqf b/addons/medical_feedback/initSettings.sqf index 128f1f6b911..997a5f061b7 100644 --- a/addons/medical_feedback/initSettings.sqf +++ b/addons/medical_feedback/initSettings.sqf @@ -39,3 +39,18 @@ [true] call FUNC(initEffects); } ] call CBA_fnc_addSetting; + +[ + QGVAR(enableHUDIndicators), + "CHECKBOX", + [LSTRING(EnableHUDIndicators_DisplayName), LSTRING(EnableHUDIndicators_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + true, + false, + { + // --- Drop indication on disabling + if (!_this) exitWith { + [true] call FUNC(handleHUDIndicators); + }; + } +] call CBA_fnc_addSetting; diff --git a/addons/medical_feedback/script_component.hpp b/addons/medical_feedback/script_component.hpp index 54127b6619b..99167c08a79 100644 --- a/addons/medical_feedback/script_component.hpp +++ b/addons/medical_feedback/script_component.hpp @@ -55,3 +55,7 @@ #define ICON_BLOODVOLUME_COLOR_WHITE [1, 1, 1, 1] #define ICON_BLOODVOLUME_COLOR_ORANGE [1, 0.6, 0, 1] #define ICON_BLOODVOLUME_COLOR_RED [0.8, 0.2, 0, 1] + +#define ICON_TOURNIQUET_PATH QPATHTOF(data\tourniquet.paa) +#define ICON_SPLINT_PATH QPATHTOF(data\splint.paa) +#define ICON_FRACTURE_PATH QPATHTOF(data\fracture.paa) diff --git a/addons/medical_feedback/stringtable.xml b/addons/medical_feedback/stringtable.xml index f51f16cdcd4..d695f8f5a4a 100644 --- a/addons/medical_feedback/stringtable.xml +++ b/addons/medical_feedback/stringtable.xml @@ -189,6 +189,14 @@ 啟用傷者的尖叫聲 Yaralı birimler tarafından çığlık atmayı etkinleştir + + Enable Fracture/Tourniquet/Splint Indicators + Включить индикаторы переломов/жгутов/шин + + + Enables indicators for fractures and applied tourniquets and splints over the Stance Indicator. + Включает индикацию переломов, наложенных шин и жгутов поверх индикатора положения тела. +