diff --git a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp index 4058132e3db..ece6d9c8855 100644 --- a/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp +++ b/addons/medical_treatment/ACE_Medical_Treatment_Actions.hpp @@ -231,8 +231,11 @@ class GVAR(actions) { displayName = CSTRING(Actions_CheckPulse); displayNameProgress = CSTRING(Check_Pulse_Content); allowedSelections[] = {"All"}; - condition = QUOTE(GVAR(advancedDiagnose) != 0); + treatmentTime = QUOTE([ARR_2(2.5,15)] select GVAR(enableRealisticPulseChecking)); + condition = QUOTE(GVAR(advancedDiagnose) != 0 && {!GVAR(enableRealisticPulseChecking) || {(_medic getSlotItemName TYPE_WATCH) isKindOf [ARR_2('ItemWatch',configFile >> 'CfgWeapons')]}}); callbackSuccess = QFUNC(checkPulse); + callbackProgress = QFUNC(checkPulseProgress); + callbackFailure = QUOTE(QQGVAR(checkPulse) cutText [ARR_2('','PLAIN')]); animationMedicProne = ""; animationMedicSelfProne = ""; }; @@ -240,14 +243,21 @@ class GVAR(actions) { displayName = CSTRING(Actions_CheckBloodPressure); displayNameProgress = CSTRING(Check_Bloodpressure_Content); allowedSelections[] = {"LeftArm", "RightArm", "LeftLeg", "RightLeg"}; + treatmentTime = 15; + medicRequired = 1; callbackSuccess = QFUNC(checkBloodPressure); + callbackProgress = ""; + callbackFailure = ""; }; class CheckResponse: CheckPulse { displayName = CSTRING(Check_Response); displayNameProgress = CSTRING(Check_Response_Content); allowedSelections[] = {"Head"}; + treatmentTime = 2.5; allowSelfTreatment = 0; callbackSuccess = QFUNC(checkResponse); + callbackProgress = ""; + callbackFailure = ""; }; // - Misc ----------------------------------------------------------------- diff --git a/addons/medical_treatment/RscTitles.hpp b/addons/medical_treatment/RscTitles.hpp new file mode 100644 index 00000000000..7ee940f102f --- /dev/null +++ b/addons/medical_treatment/RscTitles.hpp @@ -0,0 +1,32 @@ +class RscWatch; +class RscPicture; + +class RscTitles { + class GVAR(checkPulse) { + idd = -1; + enableSimulation = 1; + onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(checkPulseDisplay),_this select 0)]); + duration = 60; + class ControlsBackground { + class TheVignette: RscPicture { + idc = 5000; + x = "safezoneX"; + y = "safezoneY"; + w = "safezoneW"; + h = "safezoneH"; + text = QPATHTOF(ui\checkPulse_ca.paa); + }; + }; + class Controls {}; + class Objects { + class TheWatch: RscWatch { + idc = 5001; + model = "\a3\Missions_F_Oldman\Systems\UI\Objects\WatchDummy.p3d"; + position[] = {0, 0, 0.15}; + inBack = 0; + scale = 2; + enableZoom = 0; + }; + }; + }; +}; diff --git a/addons/medical_treatment/XEH_PREP.hpp b/addons/medical_treatment/XEH_PREP.hpp index 709c97952f4..e70799a82c0 100644 --- a/addons/medical_treatment/XEH_PREP.hpp +++ b/addons/medical_treatment/XEH_PREP.hpp @@ -18,6 +18,7 @@ PREP(checkBloodPressure); PREP(checkBloodPressureLocal); PREP(checkPulse); PREP(checkPulseLocal); +PREP(checkPulseProgress); PREP(checkResponse); PREP(cprSuccess); PREP(cprFailure); diff --git a/addons/medical_treatment/config.cpp b/addons/medical_treatment/config.cpp index 3782645019d..6d4455d6aaf 100644 --- a/addons/medical_treatment/config.cpp +++ b/addons/medical_treatment/config.cpp @@ -27,9 +27,10 @@ class CfgPatches { #include "ACE_Medical_Facilities.hpp" #include "CfgEventHandlers.hpp" #include "CfgReplacementItems.hpp" +#include "CfgMagazines.hpp" #include "CfgVehicles.hpp" #include "CfgWeapons.hpp" #include "Cfg3DEN.hpp" -#include "CfgMagazines.hpp" +#include "RscTitles.hpp" #endif diff --git a/addons/medical_treatment/functions/fnc_checkPulse.sqf b/addons/medical_treatment/functions/fnc_checkPulse.sqf index 3f776ff7495..d362074bada 100644 --- a/addons/medical_treatment/functions/fnc_checkPulse.sqf +++ b/addons/medical_treatment/functions/fnc_checkPulse.sqf @@ -19,4 +19,6 @@ params ["_medic", "_patient", "_bodyPart"]; + QGVAR(checkPulse) cutText ["", "PLAIN"]; + [QGVAR(checkPulseLocal), [_medic, _patient, _bodyPart], _patient] call CBA_fnc_targetEvent; diff --git a/addons/medical_treatment/functions/fnc_checkPulseProgress.sqf b/addons/medical_treatment/functions/fnc_checkPulseProgress.sqf new file mode 100644 index 00000000000..c285d5768f1 --- /dev/null +++ b/addons/medical_treatment/functions/fnc_checkPulseProgress.sqf @@ -0,0 +1,53 @@ +#include "..\script_component.hpp" +/* + * Author: PabstMirror + * Handles the progress of pulse checking. + * + * Arguments: + * 0: Arguments + * - 0: Medic (not used) + * - 1: Patient + * + * Return Value: + * Continue pulse checking + * + * Example: + * [[player, cursorObject]] call ace_medical_treatment_fnc_checkPulseProgress + * + * Public: No + */ + +if (!GVAR(enableRealisticPulseChecking)) exitWith {true}; + +(_this select 0) params ["", "_patient"]; + +private _display = uiNamespace getVariable [QGVAR(checkPulseDisplay), displayNull]; + +if (isNull _display) then { + TRACE_1("creating display",_this); + QGVAR(checkPulse) cutRsc [QGVAR(checkPulse), "PLAIN"]; + _display setVariable [QGVAR(lastPulse), CBA_missionTime - 0.5]; +} else { + private _pulse = GET_HEART_RATE(_patient); + _lastPulse = _display getVariable [QGVAR(lastPulse), -1]; + + private _nextPulse = _lastPulse + (if (_pulse == 0) then {1e99} else { 60 / _pulse }); + if (CBA_missionTime > _nextPulse) then { _display setVariable [QGVAR(lastPulse), _nextPulse]; }; + private _fade = (linearConversion [-0.1, 0, CBA_missionTime - _nextPulse, 0, 0.85, true] max linearConversion [0.35, 0, CBA_missionTime - _lastPulse, 0, 0.75, true]) ^ 2; + + if (EGVAR(common,epilepsyFriendlyMode)) then { + _fade = _fade min 0.2; + }; + + private _ctrlVignette = _display displayCtrl 5000; + _ctrlVignette ctrlSetTextColor [0, 0, 0, _fade]; + + private _ctrlWatch = _display displayCtrl 5001; + _ctrlWatch ctrlSetPosition [safeZoneX + (safeZoneW * 0.5), (ctrlPosition _ctrlWatch) select 1, safeZoneY + (safeZoneH * 0.5)]; + _ctrlWatch ctrlCommit 0; + _ctrlWatch ctrlAnimateModel ["WatchSecond", linearConversion [0, 60, floor ((daytime * 3600) % 60), 0, 1]]; + _ctrlWatch ctrlAnimateModel ["WatchHour", (dayTime / 12) % 1]; + _ctrlWatch ctrlAnimateModel ["WatchMinute", dayTime % 1]; +}; + +true diff --git a/addons/medical_treatment/functions/fnc_cprProgress.sqf b/addons/medical_treatment/functions/fnc_cprProgress.sqf index d8b8dd9e3f8..6e0ef47afc5 100644 --- a/addons/medical_treatment/functions/fnc_cprProgress.sqf +++ b/addons/medical_treatment/functions/fnc_cprProgress.sqf @@ -5,8 +5,8 @@ * * Arguments: * 0: Arguments - * 0: Medic - * 1: Patient + * - 0: Medic + * - 1: Patient * * Return Value: * Continue CPR diff --git a/addons/medical_treatment/initSettings.inc.sqf b/addons/medical_treatment/initSettings.inc.sqf index d080965eb9e..4de7b432d8f 100644 --- a/addons/medical_treatment/initSettings.inc.sqf +++ b/addons/medical_treatment/initSettings.inc.sqf @@ -16,6 +16,15 @@ true ] call CBA_fnc_addSetting; +[ + QGVAR(enableRealisticPulseChecking), + "CHECKBOX", + [LSTRING(RealisticPulseChecking_DisplayName), LSTRING(RealisticPulseChecking_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory_Treatment)], + true, + true +] call CBA_fnc_addSetting; + [ QGVAR(advancedBandages), "LIST", diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 383048626ab..32aa3313351 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -116,6 +116,12 @@ Habilita el manejo de la medicación más avanzada y en profundidad. Tambien permite el uso de Adenosina. 더욱 더 확장된, 깊은 약물 치료를 활성화합니다. 또한 아데노신 기능을 활성화합니다. + + Realistic Pulse Checking + + + Enables realistic pulse checking, which requires a watch. + Advanced Bandages Erweiterte Bandagen diff --git a/addons/medical_treatment/ui/checkPulse_ca.paa b/addons/medical_treatment/ui/checkPulse_ca.paa new file mode 100644 index 00000000000..ba552a919fd Binary files /dev/null and b/addons/medical_treatment/ui/checkPulse_ca.paa differ