mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
224 lines
9.9 KiB
Plaintext
224 lines
9.9 KiB
Plaintext
/*
|
|
* Author: Glowbal
|
|
* Displays the patient information for given unit.
|
|
*
|
|
* Arguments:
|
|
* 0: The Unit <OBJECT>
|
|
* 1: Show <BOOL> <OPTIONAL>
|
|
*
|
|
* ReturnValue:
|
|
* nil
|
|
*
|
|
* Public: No
|
|
*/
|
|
|
|
#include "script_component.hpp"
|
|
|
|
// Exit for basic medical
|
|
if (GVAR(level) < 2) exitWith {};
|
|
private ["_target", "_show", "_selectionN", "_amountOfGeneric", "_bandagedwounds", "_logCtrl", "_part", "_partText", "_pointDamage", "_severity", "_total", "_totalIvVolume", "_triageStatus", "_type"];
|
|
_target = _this select 0;
|
|
_show = if (count _this > 1) then {_this select 1} else {true};
|
|
_selectionN = if (count _this > 2) then {_this select 2} else {0};
|
|
|
|
GVAR(currentSelectedSelectionN) = if (typeName _selectionN == "SCALAR") then {_selectionN} else {0};
|
|
GVAR(displayPatientInformationTarget) = if (_show) then {_target} else {ObjNull};
|
|
|
|
if (USE_WOUND_EVENT_SYNC) then {
|
|
[_target, ACE_player] call FUNC(requestWoundSync);
|
|
};
|
|
|
|
if (_show) then {
|
|
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutRsc [QGVAR(DisplayInformation),"PLAIN"];
|
|
|
|
[{
|
|
private ["_target", "_display", "_alphaLevel", "_damaged", "_availableSelections", "_openWounds", "_selectionBloodLoss", "_red", "_green", "_blue", "_alphaLevel", "_allInjuryTexts", "_lbCtrl", "_genericMessages"];
|
|
_target = (_this select 0) select 0;
|
|
_selectionN = (_this select 0) select 1;
|
|
|
|
if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith {
|
|
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
|
};
|
|
|
|
disableSerialization;
|
|
_display = uiNamespace getvariable QGVAR(DisplayInformation);
|
|
if (isnil "_display") exitwith {
|
|
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
|
};
|
|
|
|
_allInjuryTexts = [];
|
|
_genericMessages = [];
|
|
|
|
if (GVAR(level) >= 2) then {
|
|
_partText = ["STR_ACE_Interaction_Head", "STR_ACE_Interaction_Torso", "STR_ACE_Interaction_ArmLeft" ,"STR_ACE_Interaction_ArmRight" ,"STR_ACE_Interaction_LegLeft", "STR_ACE_Interaction_LegRight"] select _selectionN;
|
|
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
|
|
};
|
|
|
|
if (_target getvariable[QGVAR(isBleeding), false]) then {
|
|
_genericMessages pushback [localize "STR_ACE_Medical_Status_Bleeding", [1, 0.1, 0.1, 1]];
|
|
};
|
|
if (_target getvariable[QGVAR(hasLostBlood), 0] > 1) then {
|
|
_genericMessages pushback [localize "STR_ACE_Medical_Status_Lost_Blood", [1, 0.1, 0.1, 1]];
|
|
};
|
|
|
|
if (((_target getvariable [QGVAR(tourniquets), [0,0,0,0,0,0]]) select _selectionN) > 0) then {
|
|
_genericMessages pushback [localize "STR_ACE_Medical_Status_Tourniquet_Applied", [0.77, 0.51, 0.08, 1]];
|
|
};
|
|
if (_target getvariable[QGVAR(hasPain), false]) then {
|
|
_genericMessages pushback [localize "STR_ACE_Medical_Status_Pain", [1, 1, 1, 1]];
|
|
};
|
|
|
|
_totalIvVolume = 0;
|
|
{
|
|
private "_value";
|
|
_value = _target getvariable _x;
|
|
if !(isnil "_value") then {
|
|
_totalIvVolume = _totalIvVolume + (_target getvariable [_x, 0]);
|
|
};
|
|
}foreach GVAR(IVBags);
|
|
if (_totalIvVolume >= 1) then {
|
|
_genericMessages pushback [format[localize "STR_ACE_Medical_receivingIvVolume", floor _totalIvVolume], [1, 1, 1, 1]];
|
|
};
|
|
|
|
_damaged = [false, false, false, false, false, false];
|
|
_selectionBloodLoss = [0,0,0,0,0,0];
|
|
if (GVAR(level) >= 2) then {
|
|
_openWounds = _target getvariable [QGVAR(openWounds), []];
|
|
private "_amountOf";
|
|
{
|
|
_amountOf = _x select 3;
|
|
// Find how much this bodypart is bleeding
|
|
if (_amountOf > 0) then {
|
|
_damaged set[_x select 2, true];
|
|
_selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))];
|
|
|
|
if (_selectionN == (_x select 2)) then {
|
|
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
|
|
if (_amountOf >= 1) then {
|
|
// TODO localization
|
|
_allInjuryTexts pushback [format["%2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [1,1,1,1]];
|
|
} else {
|
|
// TODO localization
|
|
_allInjuryTexts pushback [format["Partial %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6], [1,1,1,1]];
|
|
};
|
|
};
|
|
};
|
|
}foreach _openWounds;
|
|
|
|
_bandagedwounds = _target getvariable [QGVAR(bandagedWounds), []];
|
|
{
|
|
_amountOf = _x select 3;
|
|
// Find how much this bodypart is bleeding
|
|
if !(_damaged select (_x select 2)) then {
|
|
_selectionBloodLoss set [(_x select 2), (_selectionBloodLoss select (_x select 2)) + (20 * ((_x select 4) * _amountOf))];
|
|
};
|
|
if (_selectionN == (_x select 2)) then {
|
|
// Collect the text to be displayed for this injury [ Select injury class type definition - select the classname DisplayName (6th), amount of injuries for this]
|
|
if (_amountOf > 0) then {
|
|
if (_amountOf >= 1) then {
|
|
// TODO localization
|
|
_allInjuryTexts pushback [format["[B] %2x %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6, _amountOf], [0.88,0.7,0.65,1]];
|
|
} else {
|
|
// TODO localization
|
|
_allInjuryTexts pushback [format["[B] Partial %1", (GVAR(AllWoundInjuryTypes) select (_x select 1)) select 6], [0.88,0.7,0.65,1]];
|
|
};
|
|
};
|
|
};
|
|
}foreach _bandagedwounds;
|
|
} else {
|
|
_damaged = [true, true, true, true, true, true];
|
|
{
|
|
_selectionBloodLoss set [_forEachIndex, _target getHitPointDamage _x];
|
|
|
|
if (_target getHitPointDamage _x > 0 && {_forEachIndex == _selectionN}) then {
|
|
_pointDamage = _target getHitPointDamage _x;
|
|
_severity = switch (true) do {
|
|
case (_pointDamage > 0.5): {localize "STR_ACE_Medical_HeavilyWounded"};
|
|
case (_pointDamage > 0.1): {localize "STR_ACE_Medical_LightlyWounded"};
|
|
default {localize "STR_ACE_Medical_VeryLightlyWounded"};
|
|
};
|
|
_part = localize ([
|
|
"STR_ACE_Medical_Head",
|
|
"STR_ACE_Medical_Torso",
|
|
"STR_ACE_Medical_LeftArm",
|
|
"STR_ACE_Medical_RightArm",
|
|
"STR_ACE_Medical_LeftLeg",
|
|
"STR_ACE_Medical_RightLeg"
|
|
] select _forEachIndex);
|
|
_allInjuryTexts pushBack [format ["%1 %2", _severity, toLower _part], [1,1,1,1]];
|
|
};
|
|
} forEach ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];
|
|
};
|
|
|
|
// Handle the body image coloring
|
|
|
|
_availableSelections = [50,51,52,53,54,55];
|
|
{
|
|
private ["_red", "_green", "_blue"];
|
|
_total = _x;
|
|
|
|
_red = 1;
|
|
_green = 1;
|
|
_blue = 1;
|
|
if (_total > 0) then {
|
|
if (_damaged select _forEachIndex) then {
|
|
_green = (0.9 - _total) max 0;
|
|
_blue = _green;
|
|
} else {
|
|
_green = (0.9 - _total) max 0;
|
|
_red = _green;
|
|
//_blue = _green;
|
|
};
|
|
};
|
|
(_display displayCtrl (_availableSelections select _foreachIndex)) ctrlSetTextColor [_red, _green, _blue, 1.0];
|
|
}foreach _selectionBloodLoss;
|
|
|
|
_lbCtrl = (_display displayCtrl 200);
|
|
lbClear _lbCtrl;
|
|
{
|
|
_lbCtrl lbAdd (_x select 0);
|
|
_lbCtrl lbSetColor [_foreachIndex, _x select 1];
|
|
}foreach _genericMessages;
|
|
|
|
_amountOfGeneric = count _genericMessages;
|
|
{
|
|
_lbCtrl lbAdd (_x select 0);
|
|
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _x select 1];
|
|
}foreach _allInjuryTexts;
|
|
if (count _allInjuryTexts == 0) then {
|
|
_lbCtrl lbAdd (localize "STR_ACE_Medical_NoInjuriesBodypart");
|
|
};
|
|
|
|
_logCtrl = (_display displayCtrl 302);
|
|
lbClear _logCtrl;
|
|
|
|
private ["_logs", "_message", "_moment", "_arguments", "_lbCtrl"];
|
|
_logs = _target getvariable [QGVAR(logFile_Activity), []];
|
|
{
|
|
// [_message,_moment,_type, _arguments]
|
|
_message = _x select 0;
|
|
_moment = _x select 1;
|
|
_arguments = _x select 3;
|
|
if (isLocalized _message) then {
|
|
_message = localize _message;
|
|
};
|
|
|
|
{
|
|
if (typeName _x == "STRING" && {isLocalized _x}) then {
|
|
_arguments set [_foreachIndex, localize _x];
|
|
};
|
|
}foreach _arguments;
|
|
_message = format([_message] + _arguments);
|
|
_logCtrl lbAdd format["%1 %2", _moment, _message];
|
|
}foreach _logs;
|
|
|
|
_triageStatus = [_target] call FUNC(getTriageStatus);
|
|
(_display displayCtrl 303) ctrlSetText (_triageStatus select 0);
|
|
(_display displayCtrl 303) ctrlSetBackgroundColor (_triageStatus select 2);
|
|
|
|
}, 0, [_target, GVAR(currentSelectedSelectionN)]] call CBA_fnc_addPerFrameHandler;
|
|
|
|
} else {
|
|
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
|
|
};
|