2017-04-29 17:58:35 +00:00
/*
* Author: PabstMirror
* Dev function to watch all medical variables on a unit
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_fnc_dev_watchMedicalStats;
*
* Public: Yes
*/
#include "script_component.hpp"
["medical", {
// Hide when patient display is up because they might overlap
2018-05-08 13:45:24 +00:00
if (!isNull EGVAR(medical_gui,displayPatientInformationTarget)) exitWith {""};
2017-04-29 17:58:35 +00:00
private _unit = cursorTarget;
if (!(_unit isKindOf "CAManBase")) then {_unit = cursorObject};
2017-09-26 22:43:54 +00:00
if (!(_unit isKindOf "CAManBase")) then {_unit = ACE_player};
2018-05-22 16:21:24 +00:00
if ((_unit != ACE_player) && {IS_UNCONSCIOUS(ACE_player)}) then {_unit = ACE_player};
2017-04-29 17:58:35 +00:00
if (!(_unit isKindOf "CAManBase")) exitWith {"No Unit?"};
private _return = [];
// Header:
2017-09-26 22:43:54 +00:00
_return pushBack format ["<t size='1.2'><t color='#%1'>%2</t> [%3]", (["00FF00", "0000FF"] select (_unit == ACE_player)), [_unit] call EFUNC(common,getName), typeOf _unit];
2017-04-29 17:58:35 +00:00
_return pushBack "";
// State:
2018-05-08 09:16:12 +00:00
private _hasStableVitals = [_unit] call EFUNC(medical_status,hasStableVitals);
2018-07-16 21:25:54 +00:00
private _targetState = [_unit, EGVAR(medical,STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState;
2017-09-26 22:43:54 +00:00
if (!local _unit) then {_targetState = "NotLocal";};
private _color = switch (_targetState) do {case "Default": {"33FF33"}; case "Injured": {"FF3333"}; case "Unconscious": {"FF8833"}; case "CardiacArrest": {"FF33AA"}; default {"555555"}};
2018-05-22 16:21:24 +00:00
private _unconcFlag = if IS_UNCONSCIOUS(_unit) then {"[<t color='#FFFFFF'>U</t>]"} else {""};
2017-09-26 22:43:54 +00:00
_return pushBack format ["<t color='#%1'>State: %2</t> [StableVitals: %3] %4", _color, _targetState, _hasStableVitals, _unconcFlag];
2017-04-29 17:58:35 +00:00
// Blood:
2018-04-27 15:03:55 +00:00
private _bloodVolume = GET_BLOOD_VOLUME(_unit);
private _bloodLoss = GET_BLOOD_LOSS(_unit);
2017-04-29 17:58:35 +00:00
private _secondsToHeartstop = if (_bloodLoss != 0) then {format ["[<t color ='#FF9999'>Time Left:</t> %1 sec]", (((_bloodVolume - BLOOD_VOLUME_CLASS_4_HEMORRHAGE) max 0) / _bloodLoss) toFixed 1]} else {""};
_return pushBack format ["Blood: %1", _bloodVolume toFixed 3];
_return pushBack format [" - [Loss: %1] %2", _bloodLoss toFixed 5, _secondsToHeartstop];
// Heart:
2018-05-08 09:16:12 +00:00
private _cardiacOutput = [_unit] call EFUNC(medical_status,getCardiacOutput);
private _heartRate = GET_HEART_RATE(_unit);
2018-05-08 08:28:16 +00:00
GET_BLOOD_PRESSURE(_unit) params ["_bpLow", "_bpHigh"];
2017-04-29 17:58:35 +00:00
_return pushBack format ["CardiacOutput %1", _cardiacOutput toFixed 5];
_return pushBack format [" - [HR: %1] [BP: %2 / %3]", _heartRate toFixed 1, _bpLow toFixed 1, _bpHigh toFixed 1];
// Pain:
2018-05-11 14:28:25 +00:00
private _pain = GET_PAIN(_unit);
private _painSuppress = GET_PAIN_SUPPRESS(_unit);
2018-05-08 07:47:03 +00:00
private _painLevel = GET_PAIN_PERCEIVED(_unit);
2017-04-29 17:58:35 +00:00
_return pushBack format ["Effective Pain: %1", _painLevel toFixed 3];
_return pushBack format [" - [Pain: %1] [Suppress: %2]", _pain toFixed 3, _painSuppress toFixed 3];
// Damage:
private _damage = _unit getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
2018-07-15 14:24:04 +00:00
private _limping = if (_unit getVariable [QEGVAR(medical,isLimping), false]) then {"[<t color ='#FFCC22'> Limping </t>]"} else {""};
2017-04-29 17:58:35 +00:00
_return pushBack format ["Damage: [H: %1] [B: %2] %3", (_damage select 0) toFixed 2, (_damage select 1) toFixed 2, _limping];
2017-06-05 17:30:54 +00:00
_return pushBack format ["[LA:%1] [RA: %2] [LL:%3] [RL: %4]", (_damage select 2) toFixed 2, (_damage select 3) toFixed 2, (_damage select 4) toFixed 2, (_damage select 5) toFixed 2];
2017-04-29 17:58:35 +00:00
// Tourniquets:
_return pushBack "------- Tourniquets: -------";
private _tourniquets = _unit getVariable [QEGVAR(medical,tourniquets), [0,0,0,0,0,0]];
private _occludedMedications = _unit getVariable [QEGVAR(medical,occludedMedications), []];
{
private _tPartNum = _forEachIndex;
if (_x != 0) then {
_return pushBack format ["%1 [Time On: %2]", GVAR(SELECTIONS) select _tPartNum, (CBA_missionTime - _x) toFixed 1];
};
{
_x params ["", "_medClassname", "_medPartNum"];
if (_medPartNum == _tPartNum) then {
_return pushBack format [" - Occluded Med: %1", _medClassname];
};
} forEach _occludedMedications;
} forEach _tourniquets;
// Wounds:
_return pushBack "------- Wounds: -------";
private _wounds = _unit getVariable [QEGVAR(medical,openWounds), []];
{
_x params ["", "_xClassID", "_xBodyPartN", "_xAmountOf", "_xBleeding", "_xDamage", "_xCategory"];
_return pushBack format ["%1: [%2-%3] [x%4] [Bld: %5] [Dmg: %6]", GVAR(SELECTIONS) select _xBodyPartN, _xClassID, _xCategory, _xAmountOf toFixed 1, _xBleeding toFixed 4, _xDamage toFixed 2];
} forEach _wounds;
// IVs:
_return pushBack "------- IVs: -------";
private _ivBags = _unit getVariable [QEGVAR(medical,ivBags), []];
{
_x params ["_xVolumeAdded", "_xType", "_xBodyPartN"];
_return pushBack format ["%1: %2 [%3 ml]", GVAR(SELECTIONS) select _xBodyPartN, _xType, _xVolumeAdded];
} forEach _ivBags;
// Footer:
_return pushBack "</t>";
// Return:
_return joinString "<br/>"
}, [30]] call EFUNC(common,watchVariable);