Rewrite Medical GUI (#6831)

* Add a macro for the bloodloss scaling factor

* Adjust bloodloss threshold for red icon

* Remove bloodloss color scaling factor

The issue is actually the other way round, the factor of 20 would
instantly make bodyparts red on taking a wound.

* Implemet 10 color steps provided by ShackTac

This replaces the old method of colouring the interaction menu icons
and body image selections with a new method that has 10 distinct color
steps (matching across the icons and the body image).

* Use macros for constants

* Implement blue damage colouring

This re-adds visualisation for colouring based on damage. The case where
a limb has a tourniquet will hopefully be handled by an overlayed icon.

* Tidy up file structure

* Move patient information display to medical_ui

* Make common colour conversion code into functions

* Add tourniquet icon overlay to body image

* Fix mispelling I forgot to commit

* Update icon paths to new white cross icon

* Clean mess after rebase

* Add new medical menu gui

* Add updating injury list and body image

* Add updating treatment category buttons

* Update onMenuClose function

* Delete unused functions

* Add action buttons and triage card to menu

* Move medical menu PFH to separate function

* Move setTriageStatus to treatment

* Add triage select dropdown

* Add toggle button action

* Fix mouse moving randomly when opening

* Add logs list update and remove unused functions

* Hide tourniquet icons by default

* Remove CfgInGameUI (already in feedback)

* Update patient info display

* Update triage card display

* Add settings to control interact menu actions

* Cleanup files/paths

* Move triage status update to common function

* Add icons for interact menu actions

* Modify icon color for interact menu actions

* Update canOpenMenu for new setting

* Hide pain information for unconscious

* Stringtable cleanup

* Use switch for pain text

* Change minor triage status to minimal

* Fix injury list to use new stringtable entry names

* Fix medical actions check when disabled

* Skip distance check in same vehicle

* More cleanup

* Fix CI error

* Requested changes

* Fix INJURIES string

* Fix include after comment block

* Fix missing ;

Co-Authored-By: mharis001 <34453221+mharis001@users.noreply.github.com>
This commit is contained in:
mharis001 2019-03-24 18:17:48 -04:00 committed by GitHub
parent f23927d84a
commit 8d2bba4b35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
115 changed files with 1933 additions and 2600 deletions

View File

@ -48,6 +48,12 @@
// To be replaced by a proper blood pressure calculation
#define BLOOD_LOSS_KNOCK_OUT_THRESHOLD 0.5 // 50% of cardiac output
// Used to color interaction icons and body image selections
#define BLOOD_LOSS_RED_THRESHOLD 0.5
#define BLOOD_LOSS_TOTAL_COLORS 10
#define DAMAGE_BLUE_THRESHOLD 0.8
#define DAMAGE_TOTAL_COLORS 10
// --- pain
#define PAIN_UNCONSCIOUS 0.5
@ -84,6 +90,19 @@
#define DEFAULT_TOURNIQUET_VALUES [0,0,0,0,0,0]
// Triage colors, for consistency across UIs and functions
#define TRIAGE_COLOR_NONE 0, 0, 0, 0.9
#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
#define TRIAGE_TEXT_COLOR_NONE 1, 1, 1, 1
#define TRIAGE_TEXT_COLOR_MINIMAL 1, 1, 1, 1
#define TRIAGE_TEXT_COLOR_DELAYED 0, 0, 0, 1
#define TRIAGE_TEXT_COLOR_IMMEDIATE 1, 1, 1, 1
#define TRIAGE_TEXT_COLOR_DECEASED 1, 1, 1, 1
// - Unit Variables ----------------------------------------------------
// These variables get stored in object space and used across components
// Defined here for easy consistency with GETVAR/SETVAR (also a list for reference)

View File

@ -1,23 +0,0 @@
class ACE_Settings {
class GVAR(allow) {
movedToSQF = 1;
};
class GVAR(useMenu) {
movedToSQF = 1;
};
class GVAR(openAfterTreatment) {
movedToSQF = 1;
};
class GVAR(maxRange) {
movedToSQF = 1;
};
class EGVAR(medical,menuTypeStyle) {
movedToSQF = 1;
};
class GVAR(painVisualization) {
movedToSQF = 1;
};
class GVAR(showPainInMenu) {
movedToSQF = 1;
};
};

View File

@ -1,109 +1,63 @@
class CfgVehicles {
class ACE_Module;
class ACE_moduleMedicalMenuSettings: ACE_Module {
scope = 1;
displayName = CSTRING(module_DisplayName);
icon = "";
category = "ACE_medical";
function = QUOTE(DFUNC(module));
functionPriority = 1;
isGlobal = 1;
isSingular = 1;
isTriggerActivated = 0;
author = ECSTRING(common,ACETeam);
class Arguments {
class allow {
displayName = CSTRING(allow);
description = CSTRING(allow_Descr);
typeName = "NUMBER";
class values {
class disable {
name = ECSTRING(common,Disabled);
value = 0;
};
class enable {
name = ECSTRING(common,Enabled);
value = 1;
default = 1;
};
class VehiclesOnly {
name = ECSTRING(common,VehiclesOnly);
value = 2;
};
};
};
};
class ModuleDescription {
description = CSTRING(module_Desc);
sync[] = {};
};
};
class Man;
class CAManBase: Man {
class ACE_SelfActions {
class Medical {
displayName = CSTRING(Actions_Medical);
runOnHover = 1;
class ACE_Medical {
displayName = CSTRING(Medical);
condition = QGVAR(enableSelfActions);
exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_3(_target,1,0)] call FUNC(displayPatientInformation));
condition = "true";
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
statement = QUOTE([ARR_2(_target,0)] call FUNC(displayPatientInformation));
runOnHover = 1;
icon = QPATHTOF(ui\cross.paa);
#define ACTION_CONDITION condition = "true";
#include "InteractionBodyParts.hpp"
#undef ACTION_CONDITION
};
class ACE_Medical_Menu {
displayName = CSTRING(OpenMenu);
runOnHover = 0;
displayName = CSTRING(MedicalMenu);
condition = QUOTE([ARR_2(_player,_target)] call FUNC(canOpenMenu));
exceptions[] = {"isNotInside", "isNotSwimming"};
condition = QUOTE([ARR_2(ACE_player,_target)] call FUNC(canOpenMenu));
statement = QUOTE([_target] call DFUNC(openMenu));
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
statement = QUOTE(_target call FUNC(openMenu));
icon = QPATHTOF(ui\cross.paa);
};
};
class ACE_Actions {
#define ACTION_CONDITION condition = QUOTE((EGVAR(medical,menuTypeStyle) == 0));
#define ACTION_CONDITION condition = QUOTE(GVAR(enableActions) == 0);
#include "InteractionBodyParts.hpp"
#undef ACTION_CONDITION
// Create a consolidates medical menu for treatment while boarded
class ACE_MainActions {
class ACE_Medical_Menu {
displayName = CSTRING(OpenMenu);
runOnHover = 0;
exceptions[] = {"isNotInside", "isNotSwimming"};
displayName = CSTRING(MedicalMenu);
condition = QUOTE([ARR_2(ACE_player,_target)] call FUNC(canOpenMenu));
statement = QUOTE([_target] call DFUNC(openMenu));
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
exceptions[] = {"isNotInside", "isNotSwimming"};
statement = QUOTE(_target call FUNC(openMenu));
icon = QPATHTOF(ui\cross.paa);
};
class ACE_Medical_Radial {
displayName = CSTRING(Actions_Medical);
runOnHover = 1;
displayName = CSTRING(Medical);
condition = QUOTE((GVAR(enableActions) == 1 || {GVAR(enableActions) != 2 && {vehicle _target != _target && {vehicle _target == vehicle _player}}}));
exceptions[] = {"isNotInside", "isNotSitting"};
statement = QUOTE([ARR_3(_target,1,0)] call FUNC(displayPatientInformation));
condition = QUOTE(((vehicle _target != _target && vehicle _target == vehicle _player) || {EGVAR(medical,menuTypeStyle) == 1}));
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
statement = QUOTE([ARR_2(_target,0)] call FUNC(displayPatientInformation));
runOnHover = 1;
icon = QPATHTOF(ui\cross.paa);
#define ACTION_CONDITION condition = "true";
#include "InteractionBodyParts.hpp"
#undef ACTION_CONDITION
};
class ACE_Medical_loadPatient {
class ACE_LoadPatient {
displayName = CSTRING(LoadPatient);
condition = "(_target getVariable ['ACE_isUnconscious', false]) && {alive _target} && {vehicle _target == _target}";
statement = QUOTE([ARR_2(_player, _target)] call EFUNC(medical_treatment,actionLoadUnit));
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
condition = QUOTE(_target getVariable [ARR_2('ACE_isUnconscious',false)] && {alive _target} && {vehicle _target == _target});
exceptions[] = {"isNotDragging", "isNotCarrying"};
statement = QUOTE([ARR_2(_player, _target)] call EFUNC(medical_treatment,actionLoadUnit));
icon = QPATHTOF(ui\cross.paa);
insertChildren = QUOTE(call DEFUNC(medical_treatment,addLoadPatientActions));
};
class ACE_Medical_UnLoadPatient {
class ACE_UnloadPatient {
displayName = CSTRING(UnloadPatient);
condition = "(_target getVariable ['ACE_isUnconscious', false]) && {vehicle _target != _target} && {vehicle _player == _player}";
statement = QUOTE([ARR_2(_player, _target)] call EFUNC(medical_treatment,actionUnloadUnit));
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
condition = QUOTE(_target getVariable [ARR_2('ACE_isUnconscious',false)] && {vehicle _target != _target} && {vehicle _player == _player});
exceptions[] = {"isNotDragging", "isNotCarrying", "isNotInside"};
statement = QUOTE([ARR_2(_player, _target)] call EFUNC(medical_treatment,actionUnloadUnit));
icon = QPATHTOF(ui\cross.paa);
};
};
};

View File

@ -1,60 +1,67 @@
class ACE_Head {
displayName = ECSTRING(interaction,Head);
distance = MEDICAL_ACTION_DISTANCE;
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
icon = QPATHTOF(ui\cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
ACTION_CONDITION
statement = QUOTE([ARR_3(_target,1,0)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,0,_this select 3)] call FUNC(modifyAction));
statement = QUOTE([ARR_2(_target,0)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_3(_target,0,_this select 3)] call FUNC(modifyAction));
runOnHover = 1;
};
class ACE_Torso {
displayName = ECSTRING(interaction,Torso);
distance = MEDICAL_ACTION_DISTANCE;
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
icon = QPATHTOF(ui\cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
ACTION_CONDITION
statement = QUOTE([ARR_3(_target,1,1)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,1,_this select 3)] call FUNC(modifyAction));
statement = QUOTE([ARR_2(_target,1)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_3(_target,1,_this select 3)] call FUNC(modifyAction));
runOnHover = 1;
class TriageCard {
displayName = ECSTRING(medical_treatment,Actions_TriageCard);
exceptions[] = {"isNotInside", "isNotSitting"};
condition = "true";
statement = QUOTE(_target call FUNC(displayTriageCard));
icon = QPATHTOF(ui\triage_card.paa);
};
};
class ACE_ArmLeft {
displayName = ECSTRING(interaction,ArmLeft);
distance = MEDICAL_ACTION_DISTANCE;
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
icon = QPATHTOF(ui\cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
ACTION_CONDITION
statement = QUOTE([ARR_3(_target,1,2)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,2,_this select 3)] call FUNC(modifyAction));
statement = QUOTE([ARR_2(_target,2)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_3(_target,2,_this select 3)] call FUNC(modifyAction));
runOnHover = 1;
};
class ACE_ArmRight {
displayName = ECSTRING(interaction,ArmRight);
distance = MEDICAL_ACTION_DISTANCE;
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
icon = QPATHTOF(ui\cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
ACTION_CONDITION
statement = QUOTE([ARR_3(_target,1,3)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,3,_this select 3)] call FUNC(modifyAction));
statement = QUOTE([ARR_2(_target,3)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_3(_target,3,_this select 3)] call FUNC(modifyAction));
runOnHover = 1;
};
class ACE_LegLeft {
displayName = ECSTRING(interaction,LegLeft);
distance = MEDICAL_ACTION_DISTANCE;
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
icon = QPATHTOF(ui\cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
ACTION_CONDITION
statement = QUOTE([ARR_3(_target,1,4)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,4,_this select 3)] call FUNC(modifyAction));
statement = QUOTE([ARR_2(_target,4)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_3(_target,4,_this select 3)] call FUNC(modifyAction));
runOnHover = 1;
};
class ACE_LegRight {
displayName = ECSTRING(interaction,LegRight);
distance = MEDICAL_ACTION_DISTANCE;
icon = QPATHTOF(ui\ui\icons\medical_cross.paa);
icon = QPATHTOF(ui\cross.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
ACTION_CONDITION
statement = QUOTE([ARR_3(_target,1,5)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_4(_target,_player,5,_this select 3)] call FUNC(modifyAction));
statement = QUOTE([ARR_2(_target,5)] call FUNC(displayPatientInformation));
modifierFunction = QUOTE([ARR_3(_target,5,_this select 3)] call FUNC(modifyAction));
runOnHover = 1;
};

View File

@ -1,12 +1,11 @@
ace_medical_menu
ace_medical_gui
===============
Provides the CSE medical menu for the advanced medical system.
Also responsible for adding all interaction menu actions.
Implements the interaction menu actions, medical menu, information display, and triage card.
## Maintainers
The people responsible for merging changes to this component or answering potential questions.
- [Glowbal](https://github.com/Glowbal)
- [mharis001](https://github.com/mharis001)

View File

@ -1,20 +1,22 @@
PREP(addTreatmentActions);
PREP(bloodLossToRGBA);
PREP(canOpenMenu);
PREP(collectActions);
PREP(collectActions3D);
PREP(damageToRGBA);
PREP(displayPatientInformation);
PREP(displayTriageCard);
PREP(getTreatmentOptions);
PREP(handleUI_DisplayOptions);
PREP(handleUI_dropDownTriageCard);
PREP(handleToggle);
PREP(handleTriageSelect);
PREP(menuPFH);
PREP(modifyAction);
PREP(module);
PREP(onMenuClose);
PREP(onMenuOpen);
PREP(openMenu);
PREP(setTriageStatus);
PREP(updateActivityLog);
PREP(toggleTriageSelect);
PREP(updateActions);
PREP(updateBodyImage);
PREP(updateIcons);
PREP(updateInformationLists);
PREP(updateQuickViewLog);
PREP(updateUIInfo);
PREP(updateCategories);
PREP(updateInjuryList);
PREP(updateLogList);
PREP(updateTriageCard);
PREP(updateTriageStatus);

View File

@ -2,26 +2,38 @@
if (!hasInterface) exitWith {};
GVAR(MenuPFHID) = -1;
GVAR(target) = objNull;
GVAR(previousTarget) = objNull;
GVAR(selectedBodyPart) = 0;
GVAR(selectedCategory) = "triage";
GVAR(lastOpenedOn) = -1;
GVAR(pendingReopen) = false;
[] call FUNC(collectActions3D);
GVAR(menuPFH) = -1;
[] call FUNC(addTreatmentActions);
[] call FUNC(collectActions);
["ace_treatmentSucceded", {
if (GVAR(openAfterTreatment) && {GVAR(pendingReopen)}) then {
GVAR(pendingReopen) = false;
[{
[GVAR(INTERACTION_TARGET)] call FUNC(openMenu);
}, []] call CBA_fnc_execNextFrame;
[FUNC(openMenu), GVAR(target)] call CBA_fnc_execNextFrame;
};
}] call CBA_fnc_addEventHandler;
["ACE3 Common", QGVAR(displayMenuKeyPressed), localize LSTRING(DisplayMenuKey), {
["ACE3 Common", QGVAR(openMedicalMenuKey), localize LSTRING(OpenMedicalMenu), {
// Get target (cursorTarget and cursorObject), if not valid then target is ACE_player
TRACE_3("Open menu key",cursorTarget,cursorObject,ACE_player);
private _target = cursorTarget;
if (!((_target isKindOf "CAManBase") && {[ACE_player, _target] call FUNC(canOpenMenu)})) then {_target = ACE_player};
if !(_target isKindOf "CAManBase" && {[ACE_player, _target] call FUNC(canOpenMenu)}) then {
_target = cursorObject;
if !(_target isKindOf "CAManBase" && {[ACE_player, _target] call FUNC(canOpenMenu)}) then {
_target = ACE_player;
};
};
// Conditions: canInteract
// Check conditions: canInteract and canOpenMenu
if !([ACE_player, _target, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false};
if !([ACE_player, _target] call FUNC(canOpenMenu)) exitWith {false};
@ -29,12 +41,15 @@ GVAR(pendingReopen) = false;
[_target] call FUNC(openMenu);
false
}, {
// Close menu if enough time passed from opening
if (CBA_missionTime - GVAR(lastOpenedOn) > 0.5) exitWith {
[objNull] call FUNC(openMenu);
};
false
}, [35, [false, false, false]], false, 0] call CBA_fnc_addKeybind;
}, [DIK_H, [false, false, false]], false, 0] call CBA_fnc_addKeybind;
// Close patient information when interact menu is closed
["ace_interactMenuClosed", {[objNull, 0] call FUNC(displayPatientInformation);}] call CBA_fnc_addEventHandler;
// Close patient information display when interaction menu is closed
["ace_interactMenuClosed", {
QGVAR(RscPatientInfo) cutFadeOut 0.3;
}] call CBA_fnc_addEventHandler;

View File

@ -8,11 +8,4 @@ PREP_RECOMPILE_END;
#include "initSettings.sqf"
GVAR(INTERACTION_TARGET) = objNull;
GVAR(actionsOther) = [];
GVAR(actionsSelf) = [];
GVAR(selectedBodyPart) = 0;
call FUNC(collectActions);
ADDON = true;

View File

@ -6,18 +6,14 @@ class CfgPatches {
units[] = {};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_medical_treatment", "ace_interact_menu"};
requiredAddons[] = {"ace_medical_treatment", "ace_interaction"};
author = ECSTRING(common,ACETeam);
authors[] = {"Glowbal"};
authors[] = {"Glowbal", "mharis001"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};
#include "CfgEventHandlers.hpp"
#include "ui\menu.hpp"
#include "ACE_Settings.hpp"
#include "CfgVehicles.hpp"
#include "ui\ui\RscTitles.hpp"
#include "ui\ui\CfgInGameUI.hpp"
#include "ui\ui\triagecard.hpp"
#include "gui.hpp"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,65 @@
#include "script_component.hpp"
/*
* Author: BaerMitUmlaut, mharis001
* Creates actions for treatments from config and adds them to the interaction menu.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_gui_fnc_addInteractActions
*
* Public: No
*/
private _actionsConfig = configFile >> QEGVAR(medical_treatment,actions);
private _actionPaths = ["ACE_Head", "ACE_Torso", "ACE_ArmLeft", "ACE_ArmRight", "ACE_LegLeft", "ACE_LegRight"];
private _fnc_statement = {
params ["_target", "_player", "_args"];
_args params ["_bodyPart", "_treatmentName"];
[_player, _target, _bodyPart, _treatmentName] call EFUNC(medical_treatment,treatment);
};
private _fnc_condition = {
params ["_target", "_player", "_args"];
_args params ["_bodyPart", "_treatmentName"];
[_player, _target, _bodyPart, _treatmentName] call EFUNC(medical_treatment,canTreatCached);
};
{
private _configName = configName _x;
private _actionName = format [QGVAR(_%1), _configName];
private _displayName = getText (_x >> "displayName");
private _icon = getText (_x >> "icon");
private _allowedBodyParts = getArray (_x >> "allowedSelections") apply {toLower _x};
if (_allowedBodyParts isEqualTo ["all"]) then {
_allowedBodyParts = ALL_BODY_PARTS apply {toLower _x};
};
{
private _bodyPart = _x;
private _actionPath = _actionPaths select (ALL_BODY_PARTS find toLower _bodyPart);
private _action = [
_actionName,
_displayName,
_icon,
_fnc_statement,
_fnc_condition,
{},
[_bodyPart, _configName],
{[0, 0, 0]},
2,
[false, true, false, false, false]
] call EFUNC(interact_menu,createAction);
["CAManBase", 0, [_actionPath], _action, true] call EFUNC(interact_menu,addActionToClass);
["CAManBase", 0, ["ACE_MainActions", "ACE_Medical_Radial", _actionPath], _action, true] call EFUNC(interact_menu,addActionToClass);
["CAManBase", 1, ["ACE_SelfActions", "ACE_Medical", _actionPath], _action, true] call EFUNC(interact_menu,addActionToClass);
} forEach _allowedBodyParts;
} forEach configProperties [_actionsConfig, "isClass _x"];

View File

@ -0,0 +1,36 @@
#include "script_component.hpp"
/*
* Author: ShackTac, SilentSpike
* Converts a blood loss value into a representative RGBA colour.
* Blood loss colouring follows a "white, yellow, red" colour scale with 10 steps, Bezier interpolation and Correct lightness gradient.
* See: https://gka.github.io/palettes
*
* Arguments:
* 0: The blood loss value (range [0,1]) <NUMBER>
*
* Return Value:
* Representative RGBA colour <ARRAY>
*
* Example:
* [0.4] call ACE_medical_gui_fnc_bloodLossToRGBA
*
* Public: No
*/
params ["_bloodLoss"];
private _frBL = 0 max (_bloodLoss / BLOOD_LOSS_RED_THRESHOLD) min 1;
private _colorInt = ceil (_frBL * (BLOOD_LOSS_TOTAL_COLORS - 1));
[
[1.00, 1.00, 1.00, 1], // #ffffff
[1.00, 0.95, 0.63, 1], // #fff1a1
[1.00, 0.88, 0.46, 1], // #ffe075
[1.00, 0.80, 0.33, 1], // #ffcb55
[1.00, 0.72, 0.24, 1], // #ffb73c
[1.00, 0.63, 0.15, 1], // #ffa127
[1.00, 0.53, 0.08, 1], // #ff8815
[1.00, 0.43, 0.02, 1], // #ff6d05
[1.00, 0.29, 0.00, 1], // #ff4b00
[1.00, 0.00, 0.00, 1] // #ff0000
] select _colorInt;

View File

@ -1,25 +1,24 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Check if ACE_player can Open the medical menu
* Author: Glowbal, mharis001
* Checks if the player can open the Medical Menu for the target.
*
* Arguments:
* 0: Caller <OBJECT>
* 0: Player <OBJECT>
* 1: Target <OBJECT>
*
* Return Value:
* Can open <BOOL>
*
* Example:
* [player, cursorTarget] call ace_medical_menu_fnc_canOpenMenu
* [player, cursorTarget] call ace_medical_gui_fnc_canOpenMenu
*
* Public: No
*/
params ["_caller", "_target"];
params ["_player", "_target"];
(alive _caller)
alive _player
&& {!isNull _target}
&& {((_caller distance _target) < GVAR(maxRange)) || {(vehicle _caller) == (vehicle _target)}} //for now, ignore range when in same vehicle
&& {(GVAR(allow) == 1) || {(GVAR(allow) == 2) && {(vehicle _caller != _caller) || {vehicle _target != _target}}}}
&& {(GVAR(useMenu) == 1) || {(GVAR(useMenu) == 2) && {(vehicle _caller != _caller) || {vehicle _target != _target}}}}
&& {_player distance _target < GVAR(maxDistance) || {vehicle _player == vehicle _target}}
&& {GVAR(enableMedicalMenu) == 1 || {GVAR(enableMedicalMenu) == 2 && {vehicle _player != _player || {vehicle _target != _target}}}}

View File

@ -1,7 +1,8 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Collect treatment actions from medical config
* Author: Glowbal, mharis001
* Collect treatment actions for medical menu from config.
* Adds dragging actions if it exists.
*
* Arguments:
* None
@ -10,7 +11,7 @@
* None
*
* Example:
* [] call ace_medical_menu_fnc_collectActions
* [] call ace_medical_gui_fnc_collectAction
*
* Public: No
*/
@ -18,33 +19,32 @@
GVAR(actions) = [];
{
if (isClass _x) then {
private _displayName = getText (_x >> "displayName");
private _category = getText (_x >> "category");
private _condition = format [QUOTE([ARR_4(ACE_player, GVAR(INTERACTION_TARGET), %2 select GVAR(selectedBodyPart), '%1')] call DEFUNC(medical_treatment,canTreatCached)), configName _x, ALL_BODY_PARTS];
private _statement = format [QUOTE([ARR_4(ACE_player, GVAR(INTERACTION_TARGET), %2 select GVAR(selectedBodyPart), '%1')] call DEFUNC(medical_treatment,treatment)), configName _x, ALL_BODY_PARTS];
GVAR(actions) pushBack [_displayName, _category, compile _condition, compile _statement];
};
nil
} count ("true" configClasses (configFile >> QEGVAR(medical_treatment,actions)));
private _configName = configName _x;
private _displayName = getText (_x >> "displayName");
private _category = getText (_x >> "category");
private _condition = compile format [QUOTE([ARR_4(ACE_player, GVAR(target), %1 select GVAR(selectedBodyPart), '%2')] call DEFUNC(medical_treatment,canTreatCached)), ALL_BODY_PARTS, _configName];
private _statement = compile format [QUOTE([ARR_4(ACE_player, GVAR(target), %1 select GVAR(selectedBodyPart), '%2')] call DEFUNC(medical_treatment,treatment)), ALL_BODY_PARTS, _configName];
GVAR(actions) pushBack [_displayName, _category, _condition, _statement];
} forEach configProperties [configFile >> QEGVAR(medical_treatment,actions), "isClass _x"];
//Manually add the drag actions, if dragging exists.
if ("ace_dragging" call EFUNC(common,isModLoaded)) then {
private _condition = {
(ACE_player != GVAR(INTERACTION_TARGET)) && {[ACE_player, GVAR(INTERACTION_TARGET)] call EFUNC(dragging,canDrag)}
};
private _statement = {
GVAR(pendingReopen) = false; //No medical_treatmentSuccess event after drag, so don't want this true
[ACE_player, GVAR(INTERACTION_TARGET)] call EFUNC(dragging,startDrag);
};
GVAR(actions) pushBack [localize ELSTRING(dragging,Drag), "drag", _condition, _statement];
GVAR(actions) pushBack [
localize ELSTRING(dragging,Drag), "drag",
{ACE_player != GVAR(target) && {[ACE_player, GVAR(target)] call EFUNC(dragging,canDrag)}},
{
GVAR(pendingReopen) = false;
[ACE_player, GVAR(target)] call EFUNC(dragging,startDrag);
}
];
_condition = {
(ACE_player != GVAR(INTERACTION_TARGET)) && {[ACE_player, GVAR(INTERACTION_TARGET)] call EFUNC(dragging,canCarry)}
};
_statement = {
GVAR(pendingReopen) = false; //No medical_treatmentSuccess event after drag, so don't want this true
[ACE_player, GVAR(INTERACTION_TARGET)] call EFUNC(dragging,startCarry);
};
GVAR(actions) pushBack [localize ELSTRING(dragging,Carry), "drag", _condition, _statement];
GVAR(actions) pushBack [
localize ELSTRING(dragging,Carry), "drag",
{ACE_player != GVAR(target) && {[ACE_player, GVAR(target)] call EFUNC(dragging,canCarry)}},
{
GVAR(pendingReopen) = false;
[ACE_player, GVAR(target)] call EFUNC(dragging,startCarry);
}
];
};

View File

@ -1,66 +0,0 @@
#include "script_component.hpp"
/*
* Author: BaerMitUmlaut
* Creates actions for the given treatments and adds them to the interaction menu.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_menu_fnc_collectActions3D
*
* Public: No
*/
private _actionsConfig = configFile >> QEGVAR(medical_treatment,actions);
private _actionPaths = ["ACE_Head", "ACE_Torso", "ACE_ArmLeft", "ACE_ArmRight", "ACE_LegLeft", "ACE_LegRight"];
private _actionPathTexts = [
localize ELSTRING(interaction,Head), localize ELSTRING(interaction,Torso),
localize ELSTRING(interaction,ArmLeft), localize ELSTRING(interaction,ArmRight),
localize ELSTRING(interaction,LegLeft), localize ELSTRING(interaction,LegRight)
];
private _actionPathPositions = ["spine3", "pilot", "LeftForeArm", "RightForeArm", "LKnee", "RKnee"];
// - Create treatment actions -------------------------------------------------
{
private _config = _x;
private _actionName = QUOTE(ADDON) + "_" + configName _config;
private _displayName = getText (_config >> "displayName");
private _icon = switch (getText (_config >> "category")) do {
case "bandage": {QPATHTOF(ui\ui\icons\bandage.paa)};
case "medication": {QPATHTOF(ui\ui\icons\autoInjector.paa)};
// Currently category advanced which includes body bag :/
// case "iv": {QPATHTOF(ui\ui\icons\iv.paa)};
default {""};
};
private _allowedBodyParts = getArray (_config >> "allowedSelections") apply {toLower _x};
if (_allowedBodyParts isEqualTo ["all"]) then {
_allowedBodyParts = ALL_BODY_PARTS apply {toLower _x};
};
{
private _bodyPart = _x;
private _actionPath = _actionPaths select (ALL_BODY_PARTS find toLower _bodyPart);
private _statement = {
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
[_player, _target, _this select 2 select 0, _this select 2 select 1] call EFUNC(medical_treatment,treatment)
};
private _condition = {
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
[_player, _target, _this select 2 select 0, _this select 2 select 1] call EFUNC(medical_treatment,canTreatCached)
};
private _action = [
_actionName, _displayName, _icon, _statement, _condition, {}, [_bodyPart, configName _config], [0, 0, 0], 2, [false, true, false, false, false]
] call EFUNC(interact_menu,createAction);
["CAManBase", 0, [_actionPath], _action, true] call EFUNC(interact_menu,addActionToClass);
["CAManBase", 0, ["ACE_MainActions", "ACE_Medical_Radial", _actionPath], _action, true] call EFUNC(interact_menu,addActionToClass);
["CAManBase", 1, ["ACE_SelfActions", "Medical", _actionPath], _action, true] call EFUNC(interact_menu,addActionToClass);
} forEach _allowedBodyParts;
} forEach configProperties [_actionsConfig, "isClass _x"];

View File

@ -0,0 +1,36 @@
#include "script_component.hpp"
/*
* Author: ShackTac, SilentSpike
* Converts a damage value into a representative RGBA colour.
* Damage colouring follows a "white, cyan, blue" colour scale with 10 steps, Bezier interpolation and Correct lightness gradient.
* See: https://gka.github.io/palettes
*
* Arguments:
* 0: The damage value (range [0,1]) <NUMBER>
*
* Return Value:
* Representative RGBA colour <ARRAY>
*
* Example:
* [0.4] call ACE_medical_gui_fnc_damageToRGBA
*
* Public: No
*/
params ["_damage"];
private _frD = 0 max (_damage / DAMAGE_BLUE_THRESHOLD) min 1;
private _colorInt = ceil (_frD * (DAMAGE_TOTAL_COLORS - 1));
[
[1.00, 1.00, 1.00, 1], // #ffffff
[0.75, 0.95, 1.00, 1], // #bff2ff
[0.63, 0.87, 1.00, 1], // #a0ddff
[0.54, 0.77, 1.00, 1], // #8ac4ff
[0.48, 0.67, 1.00, 1], // #7aacff
[0.42, 0.57, 1.00, 1], // #6c91ff
[0.37, 0.47, 1.00, 1], // #5e77ff
[0.31, 0.35, 1.00, 1], // #4e5aff
[0.22, 0.23, 1.00, 1], // #383bff
[0.00, 0.00, 1.00, 1] // #0000ff
] select _colorInt

View File

@ -1,244 +1,65 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Displays the patient information for given unit.
* Author: Glowbal, mharis001
* Opens the patient information display for given target.
*
* Arguments:
* 0: The Unit <OBJECT>
* 1: Show <NUMBER> (default: 0)
* 2: Selection <NUMBER> (default: 0)
* 0: Target <OBJECT>
* 1: Body part <NUMBER>
*
* Return Value:
* None
*
* Example:
* [bob, true, 2] call ACE_medical_fnc_displayPatientInformation
* [_target, 0] call ace_medical_gui_fnc_displayPatientInformation
*
* Public: No
*/
#define MAX_DISTANCE 10
params ["_target", ["_show", 0], ["_selectionN", 0]];
#define MAX_DISTANCE 4
GVAR(currentSelectedSelectionN) = [0, _selectionN] select (IS_SCALAR(_selectionN));
GVAR(displayPatientInformationTarget) = [ObjNull, _target] select _show;
params ["_target", "_selectionN"];
if (_show == 1) then {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutRsc [QGVAR(DisplayInformation),"PLAIN"];
private _display = uiNamespace getVariable [QGVAR(RscPatientInfo), displayNull];
if (isNull _display) then {
QGVAR(RscPatientInfo) cutRsc [QGVAR(RscPatientInfo), "PLAIN", -1, false];
_display = uiNamespace getVariable [QGVAR(RscPatientInfo), displayNull];
[{
params ["_args", "_idPFH"];
_args params ["_target", "_selectionN"];
params ["_display", "_pfhID"];
if (GVAR(displayPatientInformationTarget) != _target || GVAR(currentSelectedSelectionN) != _selectionN) exitwith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
if ((ACE_player distance _target > MAX_DISTANCE) && {vehicle _target != vehicle ACE_player}) exitWith {
("ACE_MedicalRscDisplayInformation" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
[_idPFH] call CBA_fnc_removePerFrameHandler;
[QEGVAR(common,displayTextStructured), [[ELSTRING(medical,DistanceToFar), [_target] call EFUNC(common,getName)], 1.75, ACE_player], [ACE_player]] call CBA_fnc_targetEvent;
if (isNull _display) exitWith {
[_pfhID] call CBA_fnc_removePerFrameHandler;
};
disableSerialization;
private _display = uiNamespace getVariable QGVAR(DisplayInformation);
if (isnil "_display") exitwith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
private _target = _display getVariable [QGVAR(target), objNull];
private _selectionN = _display getVariable [QGVAR(selectionN), 0];
// Close display if target moved too far away (ignore if in same vehicle)
if (ACE_player distance _target > MAX_DISTANCE && {vehicle _target != vehicle ACE_player}) exitWith {
[_pfhID] call CBA_fnc_removePerFrameHandler;
QGVAR(RscPatientInfo) cutFadeOut 0.3;
[[ELSTRING(medical,DistanceToFar), _target call EFUNC(common,getName)], 2] call EFUNC(common,displayTextStructured);
};
private _allInjuryTexts = [];
private _genericMessages = [];
// Update body image
private _ctrlBodyImage = _display displayCtrl IDC_BODY_GROUP;
[_ctrlBodyImage, _target] call FUNC(updateBodyImage);
private _partText = [ELSTRING(medical_gui,Head), ELSTRING(medical_gui,Torso), ELSTRING(medical_gui,Arm_L), ELSTRING(medical_gui,Arm_R), ELSTRING(medical_gui,Leg_L), ELSTRING(medical_gui,Leg_R)] select _selectionN;
_genericMessages pushback [localize _partText, [1, 1, 1, 1]];
// Update injury list
private _ctrlInjuries = _display displayCtrl IDC_INJURIES;
[_ctrlInjuries, _target, _selectionN] call FUNC(updateInjuryList);
if IS_BLEEDING(_target) then {
_genericMessages pushback [LLSTRING(Status_Bleeding), [1, 0.1, 0.1, 1]];
};
// Update activity log
private _ctrlActivityLog = _display displayCtrl IDC_ACTIVITY;
private _activityLog = _target getVariable [QEGVAR(medical,logFile_activity_view), []];
[_ctrlActivityLog, _activityLog] call FUNC(updateLogList);
// Give a qualitative description of the blood volume lost
switch (GET_HEMORRHAGE(_target)) do {
case 1: {
_genericMessages pushBack [LLSTRING(Lost_Blood1), [1, 0.1, 0.1, 1]];
};
case 2: {
_genericMessages pushBack [LLSTRING(Lost_Blood2), [1, 0.1, 0.1, 1]];
};
case 3: {
_genericMessages pushBack [LLSTRING(Lost_Blood3), [1, 0.1, 0.1, 1]];
};
case 4: {
_genericMessages pushBack [LLSTRING(Lost_Blood4), [1, 0.1, 0.1, 1]];
};
};
if (HAS_TOURNIQUET_APPLIED_ON(_target,_selectionN)) then {
_genericMessages pushback [localize ELSTRING(medical_treatment,Status_Tourniquet_Applied), [0.77, 0.51, 0.08, 1]];
};
if (GVAR(showPainInMenu) && {[ACE_player, GVAR(painVisualization)] call EFUNC(medical_treatment,isMedic)}) then {
private _painLevel = GET_PAIN_PERCEIVED(_target);
if (_painLevel > 0) then {
private _painText = localize ELSTRING(medical_treatment,Status_Pain);
if (_painLevel < 0.1) then {
_painText = localize ELSTRING(medical_treatment,Status_MildPain);
} else {
if (_painLevel > 0.5) then {
_painText = localize ELSTRING(medical_treatment,Status_SeverePain);
};
};
_genericMessages pushback [_painText, [1, 1, 1, 1]];
};
};
private _totalIvVolume = 0;
{
_x params ["_xVolumeAdded"];
_totalIvVolume = _totalIvVolume + _xVolumeAdded;
} foreach (_target getVariable [QEGVAR(medical,ivBags), []]);
if (_totalIvVolume >= 1) then {
_genericMessages pushback [format[localize ELSTRING(medical_treatment,receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
};
private _selectionTourniquet = GET_TOURNIQUETS(_target);
private _selectionBloodLoss = [0, 0, 0, 0, 0, 0];
private _selectionDamage = _target getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
private _allInjuryTexts = [];
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "_bleeding", "_damage", "_category"];
_selectionBloodLoss set [_bodyPartN, (_selectionBloodLoss select _bodyPartN) + (20 * (_bleeding * _amountOf))];
if (_selectionN == _bodyPartN) 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 {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format["%2x %1", _woundDescription, ceil _amountOf], [1,1,1,1]];
} else {
_allInjuryTexts pushBack [format["Partial %1", _woundDescription], [1,1,1,1]];
};
} else {
if (!EGVAR(medical_treatment,advancedBandages) || {!EGVAR(medical_treatment,woundReopening)}) then {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format ["[B] %2x %1", _woundDescription, ceil _amountOf], [0.7,0.7,0.7,1]];
} else {
_allInjuryTexts pushBack [format ["[B] Partial %1", _woundDescription], [0.7,0.7,0.7,1]];
};
};
};
};
} forEach (_target getVariable [QEGVAR(medical,openWounds), []]);
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "_bleeding", "_damage", "_category"];
if (_selectionN == _bodyPartN) 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 {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format ["[B] %2x %1", _woundDescription, ceil _amountOf], [0.88,0.7,0.65,1]];
} else {
_allInjuryTexts pushBack [format ["[B] Partial %1", _woundDescription], [0.88,0.7,0.65,1]];
};
};
};
} forEach (_target getVariable [QEGVAR(medical,bandagedWounds), []]);
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "_bleeding", "_damage", "_category"];
if (_selectionN == _bodyPartN) 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 {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format ["[S] %2x %1", _woundDescription, ceil _amountOf], [0.7,0.7,0.7,1]];
} else {
_allInjuryTexts pushBack [format ["[S] Partial %1", _woundDescription], [0.7,0.7,0.7,1]];
};
};
};
} forEach (_target getVariable [QEGVAR(medical,stitchedWounds), []]);
// Handle the body image coloring
private _availableSelections = [50, 51, 52, 53, 54, 55];
{
private _red = 1;
private _green = 1;
private _blue = 1;
private _torniquet = _selectionTourniquet select _forEachIndex;
if (_torniquet > 0) then {
_red = 0;
_green = 0;
_blue = 0.8;
} else {
private _bloodLoss = _selectionBloodLoss select _forEachIndex;
if (_bloodLoss > 0) then {
_green = 0 max (0.8 - _bloodLoss);
_blue = _green;
} else {
private _damage = _selectionDamage select _forEachIndex;
if (_damage > 0.1) then {
_blue = 0 max (1 - _damage);
_green = 0.5 max (1 - _damage / 2);
};
};
};
(_display displayCtrl _x) ctrlSetTextColor [_red, _green, _blue, 1.0];
} forEach _availableSelections;
private _lbCtrl = (_display displayCtrl 200);
lbClear _lbCtrl;
{
_x params ["_add", "_color"];
_lbCtrl lbAdd _add;
_lbCtrl lbSetColor [_foreachIndex, _color];
} foreach _genericMessages;
private _amountOfGeneric = count _genericMessages;
{
_x params ["_add", "_color"];
_lbCtrl lbAdd _add;
_lbCtrl lbSetColor [_foreachIndex + _amountOfGeneric, _color];
} foreach _allInjuryTexts;
if (count _allInjuryTexts == 0) then {
_lbCtrl lbAdd (localize ELSTRING(medical_treatment,NoInjuriesBodypart));
};
private _logCtrl = (_display displayCtrl 302);
lbClear _logCtrl;
private _logs = _target getVariable [QGVAR(logFile_Activity), []];
{
_x params ["_message", "_moment", "_type", "_arguments"];
if (isLocalized _message) then {
_message = localize _message;
};
{
if (_x isEqualType "" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x];
};
} foreach _arguments;
_message = format([_message] + _arguments);
_logCtrl lbAdd format["%1 %2", _moment, _message];
} foreach _logs;
private _triageStatus = [_target] call EFUNC(medical_treatment,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"];
// Update triage status
[_display, _target] call FUNC(updateTriageStatus);
}, 0, _display] call CBA_fnc_addPerFrameHandler;
};
_display setVariable [QGVAR(target), _target];
_display setVariable [QGVAR(selectionN), _selectionN];

View File

@ -1,77 +1,43 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Display triage card for a unit
* Author: Glowbal, mharis001
* Displays the triage card for the target.
*
* Arguments:
* 0: The unit <OBJECT>
* 1: Show <BOOL> (default: true)
* 0: Target <OBJECT>
*
* Return Value:
* None
*
* Example:
* [bob, true] call ace_medical_fnc_displayTriageCard
* [_target] call ace_medical_gui_fnc_displayTriageCard
*
* Public: Yes
* Public: No
*/
params ["_target", ["_show", true]];
params ["_target"];
GVAR(TriageCardTarget) = [objNull, _target] select _show;
createDialog QGVAR(RscTriageCard);
private _display = uiNamespace getVariable [QGVAR(RscTriageCard), displayNull];
if (_show) then {
//("ACE_MedicalTriageCard" call BIS_fnc_rscLayer) cutRsc [QGVAR(triageCard),"PLAIN"];
createDialog QGVAR(triageCard);
// Set global target variable for triage buttons
GVAR(target) = _target;
[{
params ["_args", "_idPFH"];
_args params ["_target"];
if (GVAR(TriageCardTarget) != _target) exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
// Initially hide the triage select buttons
[_display] call FUNC(toggleTriageSelect);
private _display = uiNamespace getVariable QGVAR(triageCard);
if (isNil "_display") exitWith {
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
[{
params ["_args", "_pfhID"];
_args params ["_display", "_target"];
private _triageCardTexts = [];
if (isNull _display) exitWith {
[_pfhID] call CBA_fnc_removePerFrameHandler;
};
// TODO fill the lb with the appropiate information for the patient
private _lbCtrl = (_display displayCtrl 200);
lbClear _lbCtrl;
// Update triage card
private _ctrlTriageCard = _display displayCtrl IDC_TRIAGE_CARD;
[_ctrlTriageCard, _target] call FUNC(updateTriageCard);
private _log = _target getVariable [QGVAR(triageCard), []];
{
_x params ["_item", "_amount"];
private _message = _item;
if (isClass(configFile >> "CfgWeapons" >> _item)) then {
_message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName");
} else {
if (isLocalized _message) then {
_message = localize _message;
};
};
_triageCardTexts pushBack format["%1x - %2", _amount, _message];
} forEach _log;
if (_triageCardTexts isEqualTo []) then {
_lbCtrl lbAdd (localize ELSTRING(medical_treatment,TriageCard_NoEntry));
};
{
_lbCtrl lbAdd _x;
} forEach _triageCardTexts;
private _triageStatus = [_target] call EFUNC(medical_treatment,getTriageStatus);
_triageStatus params ["_text", "", "_color"];
(_display displayCtrl 2000) ctrlSetText _text;
(_display displayCtrl 2000) ctrlSetBackgroundColor _color;
}, 0, [_target]] call CBA_fnc_addPerFrameHandler;
} else {
//("ACE_MedicalTriageCard" call BIS_fnc_rscLayer) cutText ["","PLAIN"];
closeDialog 7010;
};
// Update triage status
[_display, _target] call FUNC(updateTriageStatus);
}, 0, [_display, _target]] call CBA_fnc_addPerFrameHandler;

View File

@ -1,34 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Grab available treatment options for given category
*
* Arguments:
* 0: The medic <OBJECT>
* 1: The patient <OBJECT>
* 2: Category name <STRING>
*
* Return Value:
* Available actions <ARRAY>
*
* Example:
* [ACE_player, poor_dude, "some category"] call ace_medical_menu_fnc_getTreatmentOptions
*
* Public: No
*/
params ["_player", "_target", "_name"];
if (!([ACE_player, _target, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith))) exitWith {[]};
private _collectedActions = [];
private _bodyPart = ALL_SELECTIONS select GVAR(selectedBodyPart);
{
_x params ["", "_currentCategory", "_currentCondition"];
if (_name == _currentCategory && {call _currentCondition}) then {
_collectedActions pushBack _x;
};
nil
} count GVAR(actions);
_collectedActions;

View File

@ -0,0 +1,35 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Handles toggling of Medical Menu between the player and previous target.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_gui_fnc_handleToggle
*
* Public: No
*/
// Find new target to switch to
private _target = if (
GVAR(target) == ACE_player
&& {[ACE_player, GVAR(previousTarget)] call EFUNC(common,canInteractWith)}
&& {[ACE_player, GVAR(previousTarget)] call FUNC(canOpenMenu)}
) then {
GVAR(previousTarget);
} else {
ACE_player;
};
// Exit if new target is same as old
if (GVAR(target) == _target) exitWith {};
GVAR(previousTarget) = GVAR(target);
// Close and reopen dialog for new target
closeDialog 0;
[FUNC(openMenu), _target, 0.1] call CBA_fnc_waitAndExecute;

View File

@ -0,0 +1,23 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Handles clicking the triage select buttons.
*
* Arguments:
* 0: Display <DISPLAY>
* 1: Target <OBJECT>
* 2: Triage status <NUMBER>
*
* Return Value:
* None
*
* Example:
* [DISPLAY, _target, 0] call ace_medical_gui_fnc_handleTriageSelect
*
* Public: No
*/
params ["_display", "_target", "_triageLevel"];
[_display] call FUNC(toggleTriageSelect);
[_target, _triageLevel] call EFUNC(medical_treatment,setTriageStatus);

View File

@ -1,109 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Display the available treatment options in category
*
* Arguments:
* 0: Category name <STRING>
*
* Return Value:
* None
*
* Example:
* ["some category"] call ace_medical_menu_fnc_handleUI_DisplayOptions
*
* Public: No
*/
#define START_IDC 20
#define END_IDC 27
#define AMOUNT_OF_ENTRIES (count _entries)
if (!hasInterface) exitWith{};
params ["_name"];
disableSerialization;
private _display = uiNamespace getVariable QGVAR(medicalMenu);
if (isNil "_display") exitWith {}; // no valid dialog present
if (_name isEqualTo "toggle") exitWith {
private _newTarget = ACE_player;
//If we are on the player, and only if our old target is still valid, switch to it:
if ((GVAR(INTERACTION_TARGET) == ACE_player) &&
{[ACE_player, GVAR(INTERACTION_TARGET_PREVIOUS), ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)} &&
{[ACE_player, GVAR(INTERACTION_TARGET_PREVIOUS)] call FUNC(canOpenMenu)}) then {
_newTarget = GVAR(INTERACTION_TARGET_PREVIOUS);
};
GVAR(INTERACTION_TARGET_PREVIOUS) = GVAR(INTERACTION_TARGET);
closeDialog 0;
[{
[_this select 0] call FUNC(openMenu);
}, [_newTarget], 0.1] call CBA_fnc_waitAndExecute;
};
// Clean the dropdown options list from all actions
for [{_x = START_IDC}, {_x <= END_IDC}, {_x = _x + 1}] do {
private _ctrl = (_display displayCtrl (_x));
_ctrl ctrlSetText "";
_ctrl ctrlShow false;
_ctrl ctrlSetEventHandler ["ButtonClick",""];
_ctrl ctrlSetTooltip "";
_ctrl ctrlCommit 0;
};
GVAR(LatestDisplayOptionMenu) = _name;
// The triage card has no options available
lbClear 212;
if (_name isEqualTo "triage") exitWith {
ctrlEnable [212, true];
private _log = GVAR(INTERACTION_TARGET) getVariable [QEGVAR(medical,triageCard), []];
private _triageCardTexts = [];
{
_x params ["_item", "_amount", "_time"];
private _message = _item;
if (isClass(configFile >> "CfgWeapons" >> _item)) then {
_message = getText(configFile >> "CfgWeapons" >> _item >> "DisplayName");
} else {
if (isLocalized _message) then {
_message = localize _message;
};
};
_triageCardTexts pushBack format["%1x - %2 (%3m)", _amount, _message, round((CBA_missionTime - _time) / 60)];
nil;
} count _log;
if (count _triageCardTexts == 0) exitWith {
lbAdd [212,(localize ELSTRING(medical_treatment,TriageCard_NoEntry))];
};
{
lbAdd [212,_x];
nil;
}count _triageCardTexts;
};
ctrlEnable [212, false];
private _entries = [ACE_player, GVAR(INTERACTION_TARGET), _name] call FUNC(getTreatmentOptions);
{
//player sidechat format["TRIGGERED: %1",_x];
if (_forEachIndex > END_IDC) exitWith {};
private _ctrl = (_display displayCtrl (START_IDC + _forEachIndex));
if (!(_forEachIndex > AMOUNT_OF_ENTRIES)) then {
_ctrl ctrlSetText (_x select 0);
private _code = format ["ace_medical_gui_pendingReopen = true; call %1;", (_x select 3)];
_ctrl ctrlSetEventHandler ["ButtonClick", _code];
_ctrl ctrlSetTooltip (_x select 0); // TODO implement
_ctrl ctrlShow true;
} else {
_ctrl ctrlSetText "";
_ctrl ctrlSetEventHandler ["ButtonClick", ""];
};
_ctrl ctrlCommit 0;
} forEach _entries;

View File

@ -1,33 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Handle the triage card display
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_menu_fnc_handleUI_dropDownTriageCard
*
* Public: No
*/
disableSerialization;
private _display = uiNamespace getVariable QGVAR(medicalMenu);
private _pos = [0, 0, 0, 0];
private _currentPos = ctrlPosition (_display displayCtrl 2002);
_currentPos params ["_currentPosX", "_currentPosY"];
if (_currentPosX == 0 && _currentPosY == 0) then {
_pos = ctrlPosition (_display displayCtrl 2001);
};
for "_idc" from 2002 to 2006 step 1 do {
_pos set [1, (_pos select 1) + (_pos select 3)];
private _ctrl = _display displayCtrl _idc;
_ctrl ctrlSetPosition _pos;
_ctrl ctrlCommit 0;
};

View File

@ -0,0 +1,55 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Handles updating the Medical Menu UI for the current target.
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_gui_fnc_menuPFH
*
* Public: No
*/
// Check if menu should stay open for target
if !([ACE_player, GVAR(target), ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith) && {[ACE_player, GVAR(target)] call FUNC(canOpenMenu)}) then {
closeDialog 0;
// Show hint if distance condition failed
if (ACE_player distance GVAR(target) > GVAR(maxDistance)) then {
[[ELSTRING(medical,DistanceToFar), GVAR(target) call EFUNC(common,getName)], 2] call EFUNC(common,displayTextStructured);
};
};
// Get the Medical Menu display
private _display = uiNamespace getVariable [QGVAR(menuDisplay), displayNull];
if (isNull _display) exitWith {};
// Update treatment category buttons
[_display] call FUNC(updateCategories);
// Update treatment actions for current category
[_display] call FUNC(updateActions);
// Update injury list
private _ctrlInjuries = _display displayCtrl IDC_INJURIES;
[_ctrlInjuries, GVAR(target), GVAR(selectedBodyPart)] call FUNC(updateInjuryList);
// Update body image
private _ctrlBodyImage = _display displayCtrl IDC_BODY_GROUP;
[_ctrlBodyImage, GVAR(target)] call FUNC(updateBodyImage);
// Update activity and quick view logs
private _ctrlActivityLog = _display displayCtrl IDC_ACTIVITY;
private _activityLog = GVAR(target) getVariable [QEGVAR(medical,logFile_activity_view), []];
[_ctrlActivityLog, _activityLog] call FUNC(updateLogList);
private _ctrlQuickView = _display displayCtrl IDC_QUICKVIEW;
private _quickView = GVAR(target) getVariable [QEGVAR(medical,logFile_quick_view), []];
[_ctrlQuickView, _quickView] call FUNC(updateLogList);
// Update triage status
[_display, GVAR(target)] call FUNC(updateTriageStatus);

View File

@ -1,22 +1,25 @@
#include "script_component.hpp"
/*
* Author: esteldunedain
* Modify the visuals of a medical action point.
* On Basic medical: modify the icon color based on damage on that body part.
* Author: esteldunedain, SilentSpike, mharis001
* Modifies the medical action icons to show blood loss and tourniquets.
*
* Arguments:
* 0: The Patient Unit <OBJECT>
* 1: The Diagnosing Unit <OBJECT>
* 2: Body part index <NUMBER>
* 3: The action to modify <OBJECT>
* 0: Unit <OBJECT>
* 1: Body part index <NUMBER>
* 2: Action data <ARRAY>
*
* ReturnValue:
* Return Value:
* None
*
* Example:
* [_target, 0, _actionData] call ace_medical_gui_fnc_modifyAction
*
* Public: No
*/
params ["_target", "_player", "_partIndex", "_actionData"];
#define COLOR_SCALE ["#ffffff", "#fff1a1", "#ffe075", "#ffcb55", "#ffb73c", "#ffa127", "#ff8815", "#ff6d05", "#ff4b00", "#ff0000"]
params ["_target", "_partIndex", "_actionData"];
private _bloodLossOnBodyPart = 0;
@ -25,32 +28,15 @@ private _bloodLossOnBodyPart = 0;
_x params ["", "", "_bodyPartN", "_amountOf", "_bleeding"];
if (_bodyPartN == _partIndex) then {
_bloodLossOnBodyPart = _bloodLossOnBodyPart + (20 * _amountOf * _bleeding);
_bloodLossOnBodyPart = _bloodLossOnBodyPart + (_amountOf * _bleeding);
};
} forEach (_target getvariable [QEGVAR(medical,openWounds), []]);
private _hasTourniquet = HAS_TOURNIQUET_APPLIED_ON(_target,_partIndex);
private _frBL = 0 max (_bloodLossOnBodyPart / BLOOD_LOSS_RED_THRESHOLD) min 1;
private _colorInt = ceil (_frBL * (BLOOD_LOSS_TOTAL_COLORS - 1)); // ceil because any bleeding more than zero shouldn't be white
switch (true) do {
case (_bloodLossOnBodyPart >= 0.15): {
if (_hasTourniquet) then {
_actionData set [2, QPATHTOF(ui\ui\icons\medical_crossRed_t.paa)];
} else {
_actionData set [2, QPATHTOF(ui\ui\icons\medical_crossRed.paa)];
};
};
case (_bloodLossOnBodyPart > 0): {
if (_hasTourniquet) then {
_actionData set [2, QPATHTOF(ui\ui\icons\medical_crossYellow_t.paa)];
} else {
_actionData set [2, QPATHTOF(ui\ui\icons\medical_crossYellow.paa)];
};
};
default {
if (_hasTourniquet) then {
_actionData set [2, QPATHTOF(ui\ui\icons\medical_cross_t.paa)];
};
};
if (HAS_TOURNIQUET_APPLIED_ON(_target,_partIndex)) then {
_actionData set [2, format [QPATHTOF(ui\cross_t_%1.paa), _colorInt]];
} else {
_actionData set [2, [QPATHTOF(ui\cross.paa), COLOR_SCALE select _colorInt]];
};

View File

@ -1,24 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Module for adjusting the medical menu settings
*
* Arguments:
* 0: The module logic <LOGIC>
* 1: units <ARRAY>
* 2: activated <BOOL>
*
* Return Value:
* None <NIL>
*
* Example:
* [LOGIC, [bob, kevin], true] call ACE_medical_menu_fnc_module
*
* Public: No
*/
params ["_logic", "", "_activated"];
if !(_activated) exitWith {};
[_logic, QGVAR(allow), "allow"] call EFUNC(common,readSettingFromModule);

View File

@ -1,7 +1,7 @@
#include "script_component.hpp"
/*
* Author: joko // Jonas
* Handle medical menu closed
* Handles closing the Medical Menu. Called from onUnload event.
*
* Arguments:
* None
@ -10,13 +10,13 @@
* None
*
* Example:
* call ace_medical_menu_fnc_onMenuClosed
* [] call ace_medical_gui_fnc_onMenuClose
*
* Public: No
*/
if (EGVAR(interact_menu,menuBackground)==1) then {[QGVAR(id), false] call EFUNC(common,blurScreen);};
if (EGVAR(interact_menu,menuBackground)==2) then {(uiNamespace getVariable [QEGVAR(interact_menu,menuBackground), displayNull]) closeDisplay 0;};
if (EGVAR(interact_menu,menuBackground) == 1) then {[QGVAR(id), false] call EFUNC(common,blurScreen)};
if (EGVAR(interact_menu,menuBackground) == 2) then {(uiNamespace getVariable [QEGVAR(interact_menu,menuBackground), displayNull]) closeDisplay 0};
[GVAR(MenuPFHID)] call CBA_fnc_removePerFrameHandler;
GVAR(MenuPFHID) = -1;
GVAR(menuPFH) call CBA_fnc_removePerFrameHandler;
GVAR(menuPFH) = -1;

View File

@ -1,7 +1,7 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Handle medical menu opened
* Author: Glowbal, mharis001
* Handles opening the Medical Menu. Called from onLoad event.
*
* Arguments:
* 0: Medical Menu display <DISPLAY>
@ -10,79 +10,35 @@
* None
*
* Example:
* [medical_menu] call ace_medical_menu_fnc_onMenuOpen
* [DISPLAY] call ace_medical_gui_fnc_onMenuOpen
*
* Public: No
*/
#define MAX_DISTANCE 10
params ["_display"];
if (isNil "_display") exitWith {};
// Create background effects based on interact menu setting
if (EGVAR(interact_menu,menuBackground) == 1) then {[QGVAR(id), true] call EFUNC(common,blurScreen)};
if (EGVAR(interact_menu,menuBackground) == 2) then {0 cutRsc [QEGVAR(interact_menu,menuBackground), "PLAIN", 1, false]};
if (EGVAR(interact_menu,menuBackground)==1) then {[QGVAR(id), true] call EFUNC(common,blurScreen);};
if (EGVAR(interact_menu,menuBackground)==2) then {0 cutRsc[QEGVAR(interact_menu,menuBackground), "PLAIN", 1, false];};
// Fix mouse moving randomly
[{
[{setMousePosition _this}, _this] call CBA_fnc_execNextFrame;
}, getMousePosition] call CBA_fnc_execNextFrame;
if (isNil QGVAR(LatestDisplayOptionMenu)) then {
GVAR(LatestDisplayOptionMenu) = "triage";
} else {
if (GVAR(LatestDisplayOptionMenu) == "toggle") then {
GVAR(LatestDisplayOptionMenu) = "triage";
GVAR(INTERACTION_TARGET) = GVAR(INTERACTION_TARGET_PREVIOUS);
};
// Set target name as title
private _ctrlTitle = _display displayCtrl IDC_TITLE;
_ctrlTitle ctrlSetText ([GVAR(target)] call EFUNC(common,getName));
// Initially hide the triage select buttons
[_display] call FUNC(toggleTriageSelect);
// Store display and add PFH to update it
uiNamespace setVariable [QGVAR(menuDisplay), _display];
["ace_medicalMenuOpened", [ACE_player, GVAR(target), _display]] call CBA_fnc_localEvent;
if (GVAR(menuPFH) != -1) exitWith {
TRACE_1("Menu PFH already running",GVAR(menuPFH));
};
private _target = GVAR(INTERACTION_TARGET);
if (isNil QGVAR(INTERACTION_TARGET_PREVIOUS)) then {
GVAR(INTERACTION_TARGET_PREVIOUS) = _target;
};
[GVAR(LatestDisplayOptionMenu)] call FUNC(handleUI_DisplayOptions);
disableSerialization;
[_target, _display] call FUNC(updateUIInfo);
(_display displayCtrl 11) ctrlSetTooltip localize LSTRING(VIEW_TRIAGE_CARD);
(_display displayCtrl 12) ctrlSetTooltip localize LSTRING(EXAMINE_PATIENT);
(_display displayCtrl 13) ctrlSetTooltip localize LSTRING(BANDAGE_FRACTURES);
(_display displayCtrl 14) ctrlSetTooltip localize LSTRING(MEDICATION);
(_display displayCtrl 15) ctrlSetTooltip localize LSTRING(AIRWAY_MANAGEMENT);
(_display displayCtrl 16) ctrlSetTooltip localize LSTRING(ADVANCED_TREATMENT);
(_display displayCtrl 17) ctrlSetTooltip localize LSTRING(DRAG_CARRY);
(_display displayCtrl 18) ctrlSetTooltip localize LSTRING(TOGGLE_SELF);
(_display displayCtrl 301) ctrlSetTooltip localize LSTRING(SELECT_HEAD);
(_display displayCtrl 302) ctrlSetTooltip localize LSTRING(SELECT_TORSO);
(_display displayCtrl 303) ctrlSetTooltip localize LSTRING(SELECT_ARM_R);
(_display displayCtrl 304) ctrlSetTooltip localize LSTRING(SELECT_ARM_L);
(_display displayCtrl 305) ctrlSetTooltip localize LSTRING(SELECT_LEG_R);
(_display displayCtrl 306) ctrlSetTooltip localize LSTRING(SELECT_LEG_L);
(_display displayCtrl 2001) ctrlSetTooltip localize LSTRING(SELECT_TRIAGE_STATUS);
(_display displayCtrl 1) ctrlSetText format ["%1", [_target] call EFUNC(common,getName)];
setMousePosition [0.4, 0.4];
if (GVAR(MenuPFHID) != -1) exitWith {ERROR("PFID already running");};
GVAR(MenuPFHID) = [{
(_this select 0) params ["_display"];
if (isNull GVAR(INTERACTION_TARGET)) then {
GVAR(INTERACTION_TARGET) = ACE_player;
};
[GVAR(INTERACTION_TARGET), _display] call FUNC(updateUIInfo);
[GVAR(INTERACTION_TARGET)] call FUNC(updateIcons);
[GVAR(LatestDisplayOptionMenu)] call FUNC(handleUI_DisplayOptions);
//Check that it's valid to stay open:
if !(([ACE_player, GVAR(INTERACTION_TARGET), ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) && {[ACE_player, GVAR(INTERACTION_TARGET)] call FUNC(canOpenMenu)}) then {
closeDialog 314412;
//If we failed because of distance check, show UI message:
if ((ACE_player distance GVAR(INTERACTION_TARGET)) > GVAR(maxRange)) then {
[[ELSTRING(medical,DistanceToFar), [GVAR(INTERACTION_TARGET)] call EFUNC(common,getName)], 2] call EFUNC(common,displayTextStructured);
};
};
}, 0, [_display]] call CBA_fnc_addPerFrameHandler;
["ace_medicalMenuOpened", [ACE_player, _target]] call CBA_fnc_localEvent;
GVAR(menuPFH) = [FUNC(menuPFH), 0, []] call CBA_fnc_addPerFrameHandler;

View File

@ -1,34 +1,30 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Open the medical menu for target
* Opens the Medical Menu for given target.
*
* Arguments:
* 0: Target <OBJECT>
*
* Return Value:
* If action was taken <BOOL>
* None
*
* Example:
* [some_player] call ace_medical_menu_fnc_openMenu
* [ACE_player] call ace_medical_gui_fnc_openMenu
*
* Public: No
*/
params ["_interactionTarget"];
params ["_target"];
if (dialog || {isNull _interactionTarget}) exitWith {
disableSerialization;
private _display = uiNamespace getVariable QGVAR(medicalMenu);
if (!isNil "_display") then {
closeDialog 314412;
};
if (dialog || {isNull _target}) exitWith {
private _display = uiNamespace getVariable [QGVAR(menuDisplay), displayNull];
if (!isNull _display) then {closeDialog 0};
};
GVAR(INTERACTION_TARGET) = _interactionTarget;
// Store current target
GVAR(target) = _target;
createDialog QGVAR(medicalMenu);
// Create the menu display
createDialog "ACE_Medical_Menu";
GVAR(lastOpenedOn) = CBA_missionTime;
true

View File

@ -1,21 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Set the triage status of object
*
* Arguments:
* 0: Target <OBJECT>
* 1: Status <NUMBER>
*
* Return Value:
* None
*
* Example:
* [bob, 2] call ACE_medical_menu_fnc_setTriageStatus
*
* Public: No
*/
params ["_target", "_status"];
_target setVariable [QEGVAR(medical,triageLevel), _status, true];

View File

@ -0,0 +1,24 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Toggles showing of the triage select buttons.
*
* Arguments:
* 0: Display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [DISPLAY] call ace_medical_gui_fnc_toggleTriageSelect
*
* Public: No
*/
params ["_display"];
private _ctrlTriageSelect = _display displayCtrl IDC_TRIAGE_SELECT;
private _show = !ctrlShown _ctrlTriageSelect;
_ctrlTriageSelect ctrlEnable _show;
_ctrlTriageSelect ctrlShow _show;

View File

@ -0,0 +1,57 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Updates the action buttons based currently avaiable treatments.
*
* Arguments:
* 0: Medical Menu display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [_display] call ace_medical_gui_fnc_updateActions
*
* Public: No
*/
params ["_display"];
private _selectedCategory = GVAR(selectedCategory);
// Clear all action buttons
{
private _ctrl = _display displayCtrl _x;
_ctrl ctrlRemoveAllEventHandlers "ButtonClick";
_ctrl ctrlShow false;
} forEach IDCS_ACTION_BUTTONS;
// Handle triage list (no actions shown)
private _ctrlTriage = _display displayCtrl IDC_TRIAGE_CARD;
private _showTriage = _selectedCategory == "triage";
_ctrlTriage ctrlEnable _showTriage;
lbClear _ctrlTriage;
if (_showTriage) exitWith {
[_ctrlTriage, GVAR(target)] call FUNC(updateTriageCard);
};
// Show treatment options on action buttons
private _idcIndex = 0;
{
_x params ["_displayName", "_category", "_condition", "_statement"];
// Check action category and condition
if (_category == _selectedCategory && {call _condition}) then {
private _ctrl = _display displayCtrl (IDCS_ACTION_BUTTONS select _idcIndex);
_ctrl ctrlSetText _displayName;
_ctrl ctrlShow true;
_ctrl ctrlAddEventHandler ["ButtonClick", _statement];
_ctrl ctrlAddEventHandler ["ButtonClick", {GVAR(pendingReopen) = true}];
_idcIndex = _idcIndex + 1;
};
} forEach GVAR(actions);

View File

@ -1,40 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Update the activity log
*
* Arguments:
* 0: display <DISPLAY>
* 1: log collection <ARRAY>
*
* Return Value:
* None
*
* Example:
* [some_display, log] call ace_medical_menu_fnc_updateActivityLog
*
* Public: No
*/
params ["_display", "_logs"];
private _logCtrl = _display displayCtrl 214;
lbClear _logCtrl;
{
_x params ["_message", "_moment", "", "_arguments"];
if (isLocalized _message) then {
_message = localize _message;
};
{
if (_x isEqualType "" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x];
};
} forEach _arguments;
_message = format ([_message] + _arguments);
_logCtrl lbAdd format ["%1 %2", _moment, _message];
nil
} count _logs;

View File

@ -1,50 +1,59 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Update the body image on the menu
* Author: Glowbal, SilentSpike, mharis001
* Updates the body image for given target.
*
* Arguments:
* 0: selection bloodloss <ARRAY>
* 1: selection damage <ARRAY>
* 2: selection torniquet <ARRAY>
* 3: display <DISPLAY>
* 0: Body image controls group <CONTROL>
* 1: Target <OBJECT>
*
* Return Value:
* None
*
* Example:
* [0.3, some_display] call ace_medical_menu_fnc_updateBodyImage
* [CONTROL, _target] call ace_medical_menu_fnc_updateBodyImage
*
* Public: No
*/
params ["_selectionBloodLoss", "_selectionDamage", "_selectionTourniquet", "_display"];
params ["_ctrlGroup", "_target"];
// Get tourniquets, damage, and blood loss for target
private _tourniquets = GET_TOURNIQUETS(_target);
private _bodyPartDamage = _target getVariable [QEGVAR(medical,bodyPartDamage), [0, 0, 0, 0, 0, 0]];
private _bodyPartBloodLoss = [0, 0, 0, 0, 0, 0];
// Handle the body image coloring
private _availableSelections = [50, 51, 52, 53, 54, 55];
{
private _red = 1;
private _green = 1;
private _blue = 1;
_x params ["", "", "_bodyPartN", "_amountOf", "_bleeding"];
_bodyPartBloodLoss set [_bodyPartN, (_bodyPartBloodLoss select _bodyPartN) + (_bleeding * _amountOf)];
} forEach (_target getVariable [QEGVAR(medical,openWounds), []]);
private _torniquet = _selectionTourniquet select _forEachIndex;
if (_torniquet > 0) then {
_red = 0;
_green = 0;
_blue = 0.8;
} else {
private _bloodLoss = _selectionBloodLoss select _forEachIndex;
if (_bloodLoss > 0) then {
_green = 0 max (0.8 - _bloodLoss);
_blue = _green;
} else {
private _damage = _selectionDamage select _forEachIndex;
if (_damage > 0.1) then {
_blue = 0 max (1 - _damage);
_green = 0.5 max (1 - _damage / 2);
};
};
{
_x params ["_bodyPartIDC", ["_tourniquetIDC", -1]];
// Show or hide the tourniquet icon
if (_tourniquetIDC != -1) then {
private _hasTourniquet = _tourniquets select _forEachIndex > 0;
private _ctrlTourniquet = _ctrlGroup controlsGroupCtrl _tourniquetIDC;
_ctrlTourniquet ctrlShow _hasTourniquet;
};
(_display displayCtrl _x) ctrlSetTextColor [_red, _green, _blue, 1.0];
} forEach _availableSelections;
// Update body part color based on blood loss and damage
private _bloodLoss = _bodyPartBloodLoss select _forEachIndex;
private _bodyPartColor = if (_bloodLoss > 0) then {
[_bloodLoss] call FUNC(bloodLossToRGBA);
} else {
private _damage = _bodyPartDamage select _forEachIndex;
[_damage] call FUNC(damageToRGBA);
};
private _ctrlBodyPart = _ctrlGroup controlsGroupCtrl _bodyPartIDC;
_ctrlBodyPart ctrlSetTextColor _bodyPartColor;
} forEach [
[IDC_BODY_HEAD],
[IDC_BODY_TORSO],
[IDC_BODY_ARMLEFT, IDC_BODY_ARMLEFT_T],
[IDC_BODY_ARMRIGHT, IDC_BODY_ARMRIGHT_T],
[IDC_BODY_LEGLEFT, IDC_BODY_LEGLEFT_T],
[IDC_BODY_LEGRIGHT, IDC_BODY_LEGRIGHT_T]
];

View File

@ -0,0 +1,36 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Updates the category buttons based currently avaiable treatments.
*
* Arguments:
* 0: Medical Menu display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [_display] call ace_medical_gui_fnc_updateCategories
*
* Public: No
*/
params ["_display"];
{
_x params ["_idc", "_category"];
private _ctrl = _display displayCtrl _idc;
private _enable = GVAR(actions) findIf {_category == _x select 1 && {call (_x select 2)}} > -1;
_ctrl ctrlEnable _enable;
private _color = [[0.4, 0.4, 0.4, 1], [1, 1, 1, 1]] select _enable;
_ctrl ctrlSetTextColor _color;
} forEach [
[IDC_EXAMINE, "examine"],
[IDC_BANDAGE, "bandage"],
[IDC_MEDICATION, "medication"],
[IDC_AIRWAY, "airway"],
[IDC_ADVANCED, "advanced"],
[IDC_DRAG, "drag"]
];

View File

@ -1,33 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Update the category icons
*
* Arguments:
* None
*
* Return Value:
* None
*
* Example:
* [] call ace_medical_menu_fnc_updateIcons
*
* Public: No
*/
#define START_IDC 111
#define END_IDC 118
disableSerialization;
private _display = uiNamespace getVariable QGVAR(medicalMenu);
private _options = ["triage" , "examine", "bandage", "medication", "airway", "advanced", "drag", "toggle"];
for "_idc" from START_IDC to END_IDC step 1 do {
private _amount = [ACE_player, GVAR(INTERACTION_TARGET), _options select (_idc - START_IDC)] call FUNC(getTreatmentOptions);
if (!(_amount isEqualTo []) || {_idc == START_IDC} || {_idc == END_IDC}) then {
(_display displayCtrl _idc) ctrlSettextColor [1, 1, 1, 1];
} else {
(_display displayCtrl _idc) ctrlSettextColor [0.4, 0.4, 0.4, 1];
};
};

View File

@ -1,39 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Update the treatment information list
*
* Arguments:
* 0: display <DISPLAY>
* 1: message collection <ARRAY>
* 2: injury collection <ARRAY>
*
* Return Value:
* None
*
* Example:
* [DISPLAY, [messagecollection], [injurycollection]] call ACE_medical_menu_fnc_updateInformationLists
*
* Public: No
*/
params ["_display", "_genericMessages", "_allInjuryTexts"];
private _lbCtrl = _display displayCtrl 213;
lbClear _lbCtrl;
{
_x params ["_add", "_color"];
_lbCtrl lbAdd _add;
_lbCtrl lbSetColor [_forEachIndex, _color];
} forEach _genericMessages;
private _amountOfGeneric = count _genericMessages;
{
_x params ["_add", "_color"];
_lbCtrl lbAdd _add;
_lbCtrl lbSetColor [_forEachIndex + _amountOfGeneric, _color];
} forEach _allInjuryTexts;
if (_allInjuryTexts isEqualTo []) then {
_lbCtrl lbAdd localize ELSTRING(medical_treatment,NoInjuriesBodypart);
};

View File

@ -0,0 +1,148 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Updates injury list for given body part for the target.
*
* Arguments:
* 0: Injury list <CONTROL>
* 1: Target <OBJECT>
* 2: Body part <NUMBER>
*
* Return Value:
* None
*
* Example:
* [_ctrlInjuries, _target, 0] call ace_medical_gui_fnc_updateInjuryList
*
* Public: No
*/
params ["_ctrl", "_target", "_selectionN"];
private _entries = [];
// Add selected body part name
private _bodyPartName = [
LSTRING(Head),
LSTRING(Torso),
LSTRING(LeftArm),
LSTRING(RightArm),
LSTRING(LeftLeg),
LSTRING(RightLeg)
] select _selectionN;
_entries pushBack [localize _bodyPartName, [1, 1, 1, 1]];
// Indicate if unit is bleeding at all
if (IS_BLEEDING(_target)) then {
_entries pushBack [localize LSTRING(Status_Bleeding), [1, 0, 0, 1]];
};
// Give a qualitative description of the blood volume lost
switch (GET_HEMORRHAGE(_target)) do {
case 1: {
_entries pushBack [localize LSTRING(Lost_Blood1), [1, 0, 0, 1]];
};
case 2: {
_entries pushBack [localize LSTRING(Lost_Blood2), [1, 0, 0, 1]];
};
case 3: {
_entries pushBack [localize LSTRING(Lost_Blood3), [1, 0, 0, 1]];
};
case 4: {
_entries pushBack [localize LSTRING(Lost_Blood4), [1, 0, 0, 1]];
};
};
// Indicate if a tourniquet is applied
if (HAS_TOURNIQUET_APPLIED_ON(_target,_selectionN)) then {
_entries pushBack [localize LSTRING(Status_Tourniquet_Applied), [0.77, 0.51, 0.08, 1]];
};
// Indicate the amount of pain the unit is in
if ([_target] call EFUNC(common,isAwake)) then {
private _pain = GET_PAIN_PERCEIVED(_target);
if (_pain > 0) then {
private _painText = switch (true) do {
case (_pain > 0.5): {
ELSTRING(medical_treatment,Status_SeverePain);
};
case (_pain > 0.1): {
ELSTRING(medical_treatment,Status_Pain);
};
default {
ELSTRING(medical_treatment,Status_MildPain);
};
};
_entries pushBack [localize _painText, [1, 1, 1, 1]];
};
};
// Show receiving IV volume remaining
private _totalIvVolume = 0;
{
_x params ["_volumeRemaining"];
_totalIvVolume = _totalIvVolume + _volumeRemaining;
} forEach (_target getVariable [QEGVAR(medical,ivBags), []]);
if (_totalIvVolume >= 1) then {
_entries pushBack [format [localize ELSTRING(medical_treatment,receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
};
// Add entries for open, bandaged, and stitched wounds
private _woundEntries = [];
private _fnc_getWoundDescription = {
private _className = EGVAR(medical_damage,woundsData) select _woundClassID select 6;
private _suffix = ["Minor", "Medium", "Large"] select _category;
private _woundName = localize format [ELSTRING(medical_damage,%1_%2), _className, _suffix];
if (_amountOf >= 1) then {
format ["%1x %2", ceil _amountOf, _woundName];
} else {
format ["Partial %1", _woundName];
};
};
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "", "", "_category"];
if (_selectionN == _bodyPartN) then {
if (_amountOf > 0) then {
_woundEntries pushBack [call _fnc_getWoundDescription, [1, 1, 1, 1]];
} else {
if !(EGVAR(medical_treatment,advancedBandages) && {EGVAR(medical_treatment,woundReopening)}) then {
_woundEntries pushBack [format ["[B] %1", call _fnc_getWoundDescription], [0.7, 0.7, 0.7, 1]];
};
};
};
} forEach (_target getVariable [QEGVAR(medical,openWounds), []]);
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "", "", "_category"];
if (_selectionN == _bodyPartN && {_amountOf > 0}) then {
_woundEntries pushBack [format ["[B] %1", call _fnc_getWoundDescription], [0.88, 0.7, 0.65, 1]];
};
} forEach (_target getVariable [QEGVAR(medical,bandagedWounds), []]);
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "", "", "_category"];
if (_selectionN == _bodyPartN && {_amountOf > 0}) then {
_woundEntries pushBack [format ["[S] %1", call _fnc_getWoundDescription], [0.7, 0.7, 0.7, 1]];
};
} forEach (_target getVariable [QEGVAR(medical,stitchedWounds), []]);
// Handle no wound entries
if (_woundEntries isEqualTo []) then {
_entries pushBack [localize ELSTRING(medical_treatment,NoInjuriesBodypart), [1, 1, 1, 1]];
} else {
_entries append _woundEntries;
};
// Add all entries to injury list
lbClear _ctrl;
{
_x params ["_text", "_color"];
private _index = _ctrl lbAdd _text;
_ctrl lbSetColor [_index, _color];
_ctrl lbSetSelectColor [_index, _color];
} forEach _entries;

View File

@ -0,0 +1,37 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Updates list control with given logs.
*
* Arguments:
* 0: Log list <CONTROL>
* 1: Log to add <ARRAY>
*
* Return Value:
* None
*
* Example:
* [_ctrlActivityLog, _activityLog] call ace_medical_gui_fnc_updateLogList
*
* Public: No
*/
params ["_ctrl", "_logs"];
lbClear _ctrl;
{
_x params ["_message", "_moment", "", "_arguments"];
// Localize message and arguments
if (isLocalized _message) then {
_message = localize _message;
};
_arguments = _arguments apply {if (_x isEqualType "" && {isLocalized _x}) then {localize _x} else {_x}};
// Format message with arguments
_message = format ([_message] + _arguments);
_ctrl lbAdd format ["%1 %2", _moment, _message];
} forEach _logs;

View File

@ -1,36 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Update the quick view log
*
* Arguments:
* 0: display <DISPLAY>
* 1: log collection <ARRAY>
*
* Return Value:
* None
*
* Example:
* [some_display, log] call ace_medical_menu_fnc_updateQuickViewLog
*
* Public: No
*/
params ["_display", "_logs"];
private _logCtrl = _display displayCtrl 215;
lbClear _logCtrl;
{
_x params ["_message", "_moment", "", "_arguments"];
{
if (_x isEqualType "" && {isLocalized _x}) then {
_arguments set [_foreachIndex, localize _x];
};
} forEach _arguments;
_message = format ([([_message, localize _message] select (isLocalized _message))] + _arguments);
_logCtrl lbAdd format ["%1 %2", _moment, _message];
nil
} count _logs;

View File

@ -0,0 +1,45 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Updates the triage card for the given target.
*
* Arguments:
* 0: Triage list <CONTROL>
* 1: Target <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_ctrlTriage, _target] call ace_medical_gui_fnc_updateTriageCard
*
* Public: No
*/
params ["_ctrl", "_target"];
private _triageCard = _target getVariable [QEGVAR(medical,triageCard), []];
lbClear _ctrl;
{
_x params ["_item", "_amount", "_time"];
// Check for item displayName or localized text
if (isClass (configFile >> "CfgWeapons" >> _item)) then {
_item = getText (configFile >> "CfgWeapons" >> _item >> "displayName");
} else {
if (isLocalized _item) then {
_item = localize _item;
};
};
// Convert time to minutes ago
_time = round ((CBA_missionTime - _time) / 60);
_ctrl lbAdd format ["%1x - %2 (%3m)", _amount, _item, _time];
} forEach _triageCard;
// Handle no triage card entries
if (lbSize _ctrl == 0) then {
_ctrl lbAdd localize ELSTRING(medical_treatment,TriageCard_NoEntry);
};

View File

@ -0,0 +1,27 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Updates the triage status control for the given target.
*
* Arguments:
* 0: Display <CONTROL>
* 1: Target <OBJECT>
*
* Return Value:
* None
*
* Example:
* [_display, _target] call ace_medical_gui_fnc_updateTriageStatus
*
* Public: No
*/
params ["_display", "_target"];
private _triageStatus = [_target] call EFUNC(medical_treatment,getTriageStatus);
_triageStatus params ["", "_triageText", "_triageColor", "_triageTextColor"];
private _ctrlTriage = _display displayCtrl IDC_TRIAGE_STATUS;
_ctrlTriage ctrlSetText _triageText;
_ctrlTriage ctrlSetBackgroundColor _triageColor;
_ctrlTriage ctrlSetTextColor _triageTextColor;

View File

@ -1,156 +0,0 @@
#include "script_component.hpp"
/*
* Author: Glowbal
* Update all UI information in the medical menu
*
* Arguments:
* 0: target <OBJECT>
* 1: display <DISPLAY>
*
* Return Value:
* None
*
* Example:
* [some_player, some_display] call ace_medical_menu_fnc_updateUIInfo
*
* Public: No
*/
params ["_target", "_display"];
if (isNil "_display" || {isNull _display}) exitWith {ERROR("No display");};
private _selectionN = GVAR(selectedBodyPart);
if (_selectionN < 0 || {_selectionN > 5}) exitWith {};
private _genericMessages = [];
private _partText = [ELSTRING(medical_gui,Head), ELSTRING(medical_gui,Torso), ELSTRING(medical_gui,Arm_L), ELSTRING(medical_gui,Arm_R), ELSTRING(medical_gui,Leg_L), ELSTRING(medical_gui,Leg_R)] select _selectionN;
_genericMessages pushBack [localize _partText, [1, 1, 1, 1]];
if IS_BLEEDING(_target) then {
_genericMessages pushBack [LLSTRING(Status_Bleeding), [1, 0.1, 0.1, 1]];
};
// Give a qualitative description of the blood volume lost
switch (GET_HEMORRHAGE(_target)) do {
case 1: {
_genericMessages pushBack [LLSTRING(Lost_Blood1), [1, 0.1, 0.1, 1]];
};
case 2: {
_genericMessages pushBack [LLSTRING(Lost_Blood2), [1, 0.1, 0.1, 1]];
};
case 3: {
_genericMessages pushBack [LLSTRING(Lost_Blood3), [1, 0.1, 0.1, 1]];
};
case 4: {
_genericMessages pushBack [LLSTRING(Lost_Blood4), [1, 0.1, 0.1, 1]];
};
};
if (HAS_TOURNIQUET_APPLIED_ON(_target,_selectionN)) then {
_genericMessages pushBack [localize ELSTRING(medical_treatment,Status_Tourniquet_Applied), [0.77, 0.51, 0.08, 1]];
};
if (GVAR(showPainInMenu) && {[ACE_player, GVAR(painVisualization)] call EFUNC(medical_treatment,isMedic)}) then {
private _painLevel = GET_PAIN_PERCEIVED(_target);
if (_painLevel > 0) then {
private _painText = localize ELSTRING(medical_treatment,Status_Pain);
if (_painLevel < 0.1) then {
_painText = localize ELSTRING(medical_treatment,Status_MildPain);
} else {
if (_painLevel > 0.5) then {
_painText = localize ELSTRING(medical_treatment,Status_SeverePain);
};
};
_genericMessages pushback [_painText, [1, 1, 1, 1]];
};
};
private _totalIvVolume = 0;
private _bloodBags = _target getVariable [QEGVAR(medical,ivBags), []];
{
_x params ["_bagVolumeRemaining"];
_totalIvVolume = _totalIvVolume + _bagVolumeRemaining;
} foreach _bloodBags;
if (_totalIvVolume >= 1) then {
_genericMessages pushBack [format [localize ELSTRING(medical_treatment,receivingIvVolume), floor _totalIvVolume], [1, 1, 1, 1]];
};
private _selectionTourniquet = GET_TOURNIQUETS(_target);
private _selectionBloodLoss = [0, 0, 0, 0, 0, 0];
private _selectionDamage = _target getVariable [QEGVAR(medical,bodyPartDamage), [0,0,0,0,0,0]];
private _allInjuryTexts = [];
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "_bleeding", "_damage", "_category"];
_selectionBloodLoss set [_bodyPartN, (_selectionBloodLoss select _bodyPartN) + (20 * _bleeding * _amountOf)];
if (_selectionN == _bodyPartN) 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 {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format["%2x %1", _woundDescription, ceil _amountOf], [1,1,1,1]];
} else {
_allInjuryTexts pushBack [format["Partial %1", _woundDescription], [1,1,1,1]];
};
} else {
if (!EGVAR(medical_treatment,advancedBandages) || {!EGVAR(medical_treatment,woundReopening)}) then {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format ["[B] %2x %1", _woundDescription, ceil _amountOf], [0.7,0.7,0.7,1]];
} else {
_allInjuryTexts pushBack [format ["[B] Partial %1", _woundDescription], [0.7,0.7,0.7,1]];
};
};
};
};
} forEach (_target getVariable [QEGVAR(medical,openWounds), []]);
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "_bleeding", "_damage", "_category"];
if (_selectionN == _bodyPartN) 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 {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format ["[B] %2x %1", _woundDescription, ceil _amountOf], [0.88,0.7,0.65,1]];
} else {
_allInjuryTexts pushBack [format ["[B] Partial %1", _woundDescription], [0.88,0.7,0.65,1]];
};
};
};
} forEach (_target getVariable [QEGVAR(medical,bandagedWounds), []]);
{
_x params ["", "_woundClassID", "_bodyPartN", "_amountOf", "_bleeding", "_damage", "_category"];
if (_selectionN == _bodyPartN) 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 {
private _className = (EGVAR(medical_damage,woundsData) select _woundClassID) select 6;
private _postfix = ["Minor", "Medium", "Large"] select _category;
private _woundDescription = localize format [ELSTRING(medical_damage,%1_%2), _className, _postfix];
if (_amountOf >= 1) then {
_allInjuryTexts pushBack [format ["[S] %2x %1", _woundDescription, ceil _amountOf], [0.7,0.7,0.7,1]];
} else {
_allInjuryTexts pushBack [format ["[S] Partial %1", _woundDescription], [0.7,0.7,0.7,1]];
};
};
};
} forEach (_target getVariable [QEGVAR(medical,stitchedWounds), []]);
[_selectionBloodLoss, _selectionDamage, _selectionTourniquet, _display] call FUNC(updateBodyImage);
[_display, _genericMessages, _allInjuryTexts] call FUNC(updateInformationLists);
[_display, _target getVariable [QEGVAR(medical,logFile_activity_view), []]] call FUNC(updateActivityLog);
[_display, _target getVariable [QEGVAR(medical,logFile_quick_view), []]] call FUNC(updateQuickViewLog);
private _triageStatus = [_target] call EFUNC(medical_treatment,getTriageStatus);
(_display displayCtrl 2000) ctrlSetText (_triageStatus select 0);
(_display displayCtrl 2000) ctrlSetBackgroundColor (_triageStatus select 2);

614
addons/medical_gui/gui.hpp Normal file
View File

@ -0,0 +1,614 @@
class RscText;
class RscButton;
class RscPicture;
class RscListBox;
class RscActivePicture;
class RscButtonMenu;
class RscControlsGroupNoScrollbars;
class GVAR(BodyImage): RscControlsGroupNoScrollbars {
idc = IDC_BODY_GROUP;
x = POS_X(13.33);
y = POS_Y(2.73);
w = POS_W(12.33);
h = POS_H(12.33);
class controls {
class Background: RscPicture {
idc = -1;
text = QPATHTOF(data\body_image\background.paa);
x = 0;
y = 0;
w = POS_W(12.33);
h = POS_H(12.33);
};
class Head: Background {
idc = IDC_BODY_HEAD;
text = QPATHTOF(data\body_image\head.paa);
};
class Torso: Background {
idc = IDC_BODY_TORSO;
text = QPATHTOF(data\body_image\torso.paa);
};
class ArmLeft: Background {
idc = IDC_BODY_ARMLEFT;
text = QPATHTOF(data\body_image\arm_left.paa);
};
class ArmRight: Background {
idc = IDC_BODY_ARMRIGHT;
text = QPATHTOF(data\body_image\arm_right.paa);
};
class LegLeft: Background {
idc = IDC_BODY_LEGLEFT;
text = QPATHTOF(data\body_image\leg_left.paa);
};
class LegRight: Background {
idc = IDC_BODY_LEGRIGHT;
text = QPATHTOF(data\body_image\leg_right.paa);
};
class ArmLeftT: Background {
idc = IDC_BODY_ARMLEFT_T;
text = QPATHTOF(data\body_image\arm_left_t.paa);
colorText[] = {0, 0, 0.8, 1};
show = 0;
};
class ArmRightT: ArmLeftT {
idc = IDC_BODY_ARMRIGHT_T;
text = QPATHTOF(data\body_image\arm_right_t.paa);
};
class LegLeftT: ArmLeftT {
idc = IDC_BODY_LEGLEFT_T;
text = QPATHTOF(data\body_image\leg_left_t.paa);
};
class LegRightT: ArmLeftT {
idc = IDC_BODY_LEGRIGHT_T;
text = QPATHTOF(data\body_image\leg_right_t.paa);
};
};
};
class GVAR(TriageToggle): RscButton {
idc = -1;
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(toggleTriageSelect));
x = POS_X(13.33);
y = POS_Y(15.5);
w = POS_W(12.33);
h = POS_H(1.1);
colorFocused[] = {0, 0, 0, 0};
colorBackground[] = {0, 0, 0, 0};
colorBackgroundActive[] = {0, 0, 0, 0};
};
class GVAR(TriageSelect): RscControlsGroupNoScrollbars {
idc = IDC_TRIAGE_SELECT;
x = POS_X(13.33);
y = POS_Y(16.6);
w = POS_W(12.33);
h = POS_H(5.5);
class controls {
class None: RscButton {
idc = -1;
onButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0),GVAR(target),0)] call FUNC(handleTriageSelect));
style = ST_CENTER;
text = ECSTRING(medical_treatment,Triage_Status_None);
x = 0;
y = 0;
w = POS_W(12.33);
h = POS_H(1.1);
shadow = 0;
colorText[] = {TRIAGE_TEXT_COLOR_NONE};
colorFocused[] = {TRIAGE_COLOR_NONE};
colorBackground[] = {TRIAGE_COLOR_NONE};
colorBackgroundActive[] = {TRIAGE_COLOR_NONE};
};
class Minimal: None {
onButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0),GVAR(target),1)] call FUNC(handleTriageSelect));
text = ECSTRING(medical_treatment,Triage_Status_Minimal);
y = POS_H(1.1);
colorText[] = {TRIAGE_TEXT_COLOR_MINIMAL};
colorFocused[] = {TRIAGE_COLOR_MINIMAL};
colorBackground[] = {TRIAGE_COLOR_MINIMAL};
colorBackgroundActive[] = {TRIAGE_COLOR_MINIMAL};
};
class Delayed: None {
onButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0),GVAR(target),2)] call FUNC(handleTriageSelect));
text = ECSTRING(medical_treatment,Triage_Status_Delayed);
y = POS_H(2.2);
colorText[] = {TRIAGE_TEXT_COLOR_DELAYED};
colorFocused[] = {TRIAGE_COLOR_DELAYED};
colorBackground[] = {TRIAGE_COLOR_DELAYED};
colorBackgroundActive[] = {TRIAGE_COLOR_DELAYED};
};
class Immediate: None {
onButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0),GVAR(target),3)] call FUNC(handleTriageSelect));
text = ECSTRING(medical_treatment,Triage_Status_Immediate);
y = POS_H(3.3);
colorText[] = {TRIAGE_TEXT_COLOR_IMMEDIATE};
colorFocused[] = {TRIAGE_COLOR_IMMEDIATE};
colorBackground[] = {TRIAGE_COLOR_IMMEDIATE};
colorBackgroundActive[] = {TRIAGE_COLOR_IMMEDIATE};
};
class Deceased: None {
onButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0),GVAR(target),4)] call FUNC(handleTriageSelect));
text = ECSTRING(medical_treatment,Triage_Status_Deceased);
y = POS_H(4.4);
colorText[] = {TRIAGE_TEXT_COLOR_DECEASED};
colorFocused[] = {TRIAGE_COLOR_DECEASED};
colorBackground[] = {TRIAGE_COLOR_DECEASED};
colorBackgroundActive[] = {TRIAGE_COLOR_DECEASED};
};
};
};
class ACE_Medical_Menu {
idd = IDD_MEDICAL_MENU;
movingEnable = 1;
enableSimulation = 1;
onLoad = QUOTE(_this call FUNC(onMenuOpen));
onUnload = QUOTE(_this call FUNC(onMenuClose));
class controlsBackground {
class Title: RscText {
idc = IDC_TITLE;
x = POS_X(1);
y = POS_Y(0);
w = POS_W(38);
h = POS_H(1);
colorBackground[] = GUI_BCG_COLOR;
moving = 1;
};
class Center: RscText {
idc = -1;
x = POS_X(1);
y = POS_Y(1.1);
w = POS_W(38);
h = POS_H(16);
colorBackground[] = {0, 0, 0, 0.7};
};
class Bottom: Center {
y = POS_Y(17.6);
h = POS_H(9);
};
};
class controls {
class TreatmentHeader: RscText {
idc = -1;
style = ST_CENTER;
text = CSTRING(EXAMINE_TREATMENT);
x = POS_X(1);
y = POS_Y(1.5);
w = POS_W(12.33);
h = POS_H(1);
sizeEx = POS_H(1.2);
colorText[] = {1, 1, 1, 0.9};
};
class StatusHeader: TreatmentHeader {
text = CSTRING(STATUS);
x = POS_X(13.33);
};
class OverviewHeader: TreatmentHeader {
text = CSTRING(OVERVIEW);
x = POS_X(25.66);
};
class HeaderLine: RscText {
idc = -1;
x = POS_X(1.5);
y = POS_Y(2.6);
w = POS_W(37);
h = POS_H(0.03);
colorBackground[] = {1, 1, 1, 0.5};
};
class Triage: RscActivePicture {
idc = IDC_TRIAGE;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'triage');
text = QPATHTOF(data\categories\triage_card.paa);
tooltip = CSTRING(ViewTriageCard);
x = POS_X(1.5);
y = POS_Y(2.73);
w = POS_W(1.5);
h = POS_H(1.5);
color[] = {1, 1, 1, 1};
soundClick[] = {"\a3\ui_f\data\sound\rscbutton\soundClick", 0.09, 1};
soundEnter[] = {"\a3\ui_f\data\sound\rscbutton\soundEnter", 0.09, 1};
soundEscape[] = {"\a3\ui_f\data\sound\rscbutton\soundEscape", 0.09, 1};
soundPush[] = {"\a3\ui_f\data\sound\rscbutton\soundPush", 0.09, 1};
};
class Examine: Triage {
idc = IDC_EXAMINE;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'examine');
text = QPATHTOF(data\categories\examine_patient.paa);
tooltip = CSTRING(ExaminePatient);
x = POS_X(3);
};
class Bandage: Triage {
idc = IDC_BANDAGE;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'bandage');
text = QPATHTOF(data\categories\bandage_fracture.paa);
tooltip = CSTRING(BandageFractures);
x = POS_X(4.5);
};
class Medication: Triage {
idc = IDC_MEDICATION;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'medication');
text = QPATHTOF(data\categories\medication.paa);
tooltip = CSTRING(Medication);
x = POS_X(6);
};
class Airway: Triage {
idc = IDC_AIRWAY;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'airway');
text = QPATHTOF(data\categories\airway_management.paa);
tooltip = CSTRING(AirwayManagement);
x = POS_X(7.5);
};
class Advanced: Triage {
idc = IDC_ADVANCED;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'advanced');
text = QPATHTOF(data\categories\advanced_treatment.paa);
tooltip = CSTRING(AdvancedTreatment);
x = POS_X(9);
};
class Drag: Triage {
idc = IDC_DRAG;
onButtonClick = QUOTE(GVAR(selectedCategory) = 'drag');
text = QPATHTOF(data\categories\carry.paa);
tooltip = CSTRING(DragCarry);
x = POS_X(10.5);
};
class Toggle: Triage {
idc = IDC_TOGGLE;
onButtonClick = QUOTE(call FUNC(handleToggle));
text = QPATHTOF(data\categories\toggle_self.paa);
tooltip = CSTRING(ToggleSelf);
x = POS_X(12);
};
class TriageCard: RscListBox {
idc = IDC_TRIAGE_CARD;
x = POS_X(1.5);
y = POS_Y(4.4);
w = POS_W(12);
h = POS_H(10);
sizeEx = POS_H(0.7);
colorSelect[] = {1, 1, 1, 1};
colorSelect2[] = {1, 1, 1, 1};
colorBackground[] = {0, 0, 0, 0.2};
colorSelectBackground[] = {0, 0, 0, 0};
colorSelectBackground2[] = {0, 0, 0, 0};
colorScrollbar[] = {0.9, 0.9, 0.9, 1};
};
class Action1: RscButtonMenu {
idc = IDC_ACTION_1;
style = ST_LEFT;
x = POS_X(1.5);
y = POS_Y(4.4);
w = POS_W(12);
h = POS_H(1);
size = POS_H(0.9);
class Attributes {
align = "center";
color = "#E5E5E5";
font = "RobotoCondensed";
shadow = "false";
};
};
class Action2: Action1 {
idc = IDC_ACTION_2;
y = POS_Y(5.5);
};
class Action3: Action1 {
idc = IDC_ACTION_3;
y = POS_Y(6.6);
};
class Action4: Action1 {
idc = IDC_ACTION_4;
y = POS_Y(7.7);
};
class Action5: Action1 {
idc = IDC_ACTION_5;
y = POS_Y(8.8);
};
class Action6: Action1 {
idc = IDC_ACTION_6;
y = POS_Y(9.9);
};
class Action7: Action1 {
idc = IDC_ACTION_7;
y = POS_Y(11);
};
class Action8: Action1 {
idc = IDC_ACTION_8;
y = POS_Y(12.1);
};
class Action9: Action1 {
idc = IDC_ACTION_9;
y = POS_Y(13.2);
};
class BodyImage: GVAR(BodyImage) {};
class SelectHead: RscButton {
idc = -1;
onButtonClick = QUOTE(GVAR(selectedBodyPart) = 0);
tooltip = CSTRING(SelectHead);
x = POS_X(18.8);
y = POS_Y(3.2);
w = POS_W(1.4);
h = POS_H(1.8);
colorFocused[] = {0, 0, 0, 0};
colorBackground[] = {0, 0, 0, 0};
colorBackgroundActive[] = {0, 0, 0, 0};
};
class SelectTorso: SelectHead {
onButtonClick = QUOTE(GVAR(selectedBodyPart) = 1);
tooltip = CSTRING(SelectTorso);
x = POS_X(18.4);
y = POS_Y(5);
w = POS_W(2.2);
h = POS_H(3.8);
};
class SelectArmLeft: SelectHead {
onButtonClick = QUOTE(GVAR(selectedBodyPart) = 2);
tooltip = CSTRING(SelectLeftArm);
x = POS_X(20.6);
y = POS_Y(5.1);
w = POS_W(1.1);
h = POS_H(4.6);
};
class SelectArmRight: SelectArmLeft {
onButtonClick = QUOTE(GVAR(selectedBodyPart) = 3);
tooltip = CSTRING(SelectRightArm);
x = POS_X(17.4);
};
class SelectLegLeft: SelectHead {
onButtonClick = QUOTE(GVAR(selectedBodyPart) = 4);
tooltip = CSTRING(SelectLeftLeg);
x = POS_X(19.5);
y = POS_Y(8.8);
w = POS_W(1.1);
h = POS_H(5.8);
};
class SelectLegRight: SelectLegLeft {
onButtonClick = QUOTE(GVAR(selectedBodyPart) = 5);
tooltip = CSTRING(SelectRightLeg);
x = POS_X(18.4);
};
class Injuries: TriageCard {
idc = IDC_INJURIES;
x = POS_X(25.66);
w = POS_W(12.33);
};
class ActivityHeader: TreatmentHeader {
text = CSTRING(ACTIVITY_LOG);
y = POS_Y(17.6);
w = POS_W(18.5);
sizeEx = POS_H(1);
colorText[] = {0.6, 0.7, 1, 1};
};
class QuickViewHeader: ActivityHeader {
text = CSTRING(QUICK_VIEW);
x = POS_X(19.5);
};
class LowerLine: HeaderLine {
y = POS_Y(18.5);
};
class Activity: Injuries {
idc = IDC_ACTIVITY;
x = POS_X(1.5);
y = POS_Y(18.5);
w = POS_W(18.5);
h = POS_H(6.5);
colorBackground[] = {0, 0, 0, 0};
};
class QuickView: Activity {
idc = IDC_QUICKVIEW;
x = POS_X(21.5);
};
class TriageStatus: RscText {
idc = IDC_TRIAGE_STATUS;
style = ST_CENTER;
x = POS_X(13.33);
y = POS_Y(15.5);
w = POS_W(12.33);
h = POS_H(1.1);
shadow = 0;
};
class TriageToggle: GVAR(TriageToggle) {};
class TriageSelect: GVAR(TriageSelect) {};
};
};
class GVAR(RscTriageCard) {
idd = -1;
movingEnable = 1;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(RscTriageCard), _this select 0)]);
class controls {
class Background: RscText {
idc = -1;
x = POS_X(12.5);
y = POS_Y(0);
w = POS_W(15);
h = POS_H(19);
colorBackground[] = {1, 1, 1, 1};
moving = 1;
};
class CornerLeft: RscPicture {
idc = -1;
text = QPATHTOF(data\triage_card\corner_left.paa);
x = POS_X(12.5);
y = POS_Y(0);
w = POS_W(5);
h = POS_H(5);
colorText[] = {1, 1, 0, 1};
};
class CornerRight: CornerLeft {
text = QPATHTOF(data\triage_card\corner_right.paa);
x = POS_X(22.5);
};
class Title: RscText {
idc = -1;
style = ST_CENTER;
text = ECSTRING(medical_treatment,Actions_TriageCard);
x = POS_X(12.5);
y = POS_Y(3);
w = POS_W(15);
h = POS_H(0.9);
sizeEx = POS_H(0.9);
shadow = 0;
colorText[] = {0, 0, 0, 1};
};
class TriageCard: RscListBox {
idc = IDC_TRIAGE_CARD;
x = POS_X(13.5);
y = POS_Y(5);
w = POS_W(13);
h = POS_H(13);
sizeEx = POS_H(0.7);
colorText[] = {0, 0, 0, 1};
colorSelect[] = {0, 0, 0, 1};
colorSelect2[] = {0, 0, 0, 1};
colorBackground[] = {0, 0, 0, 0};
colorSelectBackground[] = {0, 0, 0, 0};
colorSelectBackground2[] = {0, 0, 0, 0};
colorScrollbar[] = {0, 0, 0, 1};
};
class TriageStatus: RscText {
idc = IDC_TRIAGE_STATUS;
style = ST_CENTER;
x = POS_X(12.5);
y = POS_Y(19);
w = POS_W(15);
h = POS_H(1.1);
shadow = 0;
};
class TriageToggle: GVAR(TriageToggle) {
x = POS_X(12.5);
y = POS_Y(19);
w = POS_W(15);
};
class TriageSelect: GVAR(TriageSelect) {
x = POS_X(12.5);
y = POS_Y(20);
w = POS_W(15);
class controls: controls {
class None: None {
w = POS_W(15);
};
class Minimal: Minimal {
w = POS_W(15);
};
class Delayed: Delayed {
w = POS_W(15);
};
class Immediate: Immediate {
w = POS_W(15);
};
class Deceased: Deceased {
w = POS_W(15);
};
};
};
};
};
class RscTitles {
class GVAR(RscPatientInfo) {
idd = -1;
fadeIn = 0.3;
fadeOut = 0.3;
duration = 999999;
movingEnable = 0;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(RscPatientInfo), _this select 0)]);
class controls {
class BodyImage: GVAR(BodyImage) {
x = safeZoneX + POS_W(2.25);
y = safeZoneY + POS_H(1.5);
w = POS_W(8.5);
h = POS_H(8.5);
class controls: controls {
class Background: Background {
w = POS_W(8.5);
h = POS_H(8.5);
};
class Head: Head {
w = POS_W(8.5);
h = POS_H(8.5);
};
class Torso: Torso {
w = POS_W(8.5);
h = POS_H(8.5);
};
class ArmLeft: ArmLeft {
w = POS_W(8.5);
h = POS_H(8.5);
};
class ArmRight: ArmRight {
w = POS_W(8.5);
h = POS_H(8.5);
};
class LegLeft: LegLeft {
w = POS_W(8.5);
h = POS_H(8.5);
};
class LegRight: LegRight {
w = POS_W(8.5);
h = POS_H(8.5);
};
class ArmLeftT: ArmLeftT {
w = POS_W(8.5);
h = POS_H(8.5);
};
class ArmRightT: ArmRightT {
w = POS_W(8.5);
h = POS_H(8.5);
};
class LegLeftT: LegLeftT {
w = POS_W(8.5);
h = POS_H(8.5);
};
class LegRightT: LegRightT {
w = POS_W(8.5);
h = POS_H(8.5);
};
};
};
class InjuriesLabel: RscText {
idc = -1;
text = CSTRING(INJURIES);
x = safeZoneX + POS_W(2);
y = safeZoneY + POS_H(10.2);
w = POS_W(9);
h = POS_H(0.7);
sizeEx = POS_H(0.7);
colorBackground[] = GUI_BCG_COLOR;
};
class Injuries: RscListBox {
idc = IDC_INJURIES;
x = safeZoneX + POS_W(2);
y = safeZoneY + POS_H(11);
w = POS_W(9);
h = POS_H(9);
sizeEx = POS_H(0.7);
colorSelect[] = {1, 1, 1, 1};
colorSelect2[] = {1, 1, 1, 1};
colorBackground[] = {0, 0, 0, 0.2};
colorSelectBackground[] = {0, 0, 0, 0};
colorSelectBackground2[] = {0, 0, 0, 0};
colorScrollbar[] = {0.9, 0.9, 0.9, 1};
};
class TriageStatus: RscText {
idc = IDC_TRIAGE_STATUS;
x = safeZoneX + POS_W(2);
y = safeZoneY + POS_H(20.2);
w = POS_W(9);
h = POS_H(0.7);
sizeEx = POS_H(0.7);
shadow = 0;
};
class Activity: Injuries {
idc = IDC_ACTIVITY;
x = safeZoneX + POS_W(1.75);
y = safeZoneY + POS_H(21);
w = POS_W(15);
h = POS_H(7);
shadow = 2;
colorBackground[] = {0, 0, 0, 0};
};
};
};
};

View File

@ -1,73 +1,44 @@
// CBA Settings [ADDON: ace_medical_gui]:
private _categoryArray = [LELSTRING(medical,Category_DisplayName), LLSTRING(subCategory)];
[
QGVAR(allow), "LIST",
[LSTRING(allow), LSTRING(allow_Descr)],
_categoryArray,
[[0,1,2],[LELSTRING(common,Disabled), LELSTRING(common,Enabled), LELSTRING(common,VehiclesOnly)],1], // [values, titles, defaultIndex]
true, // isGlobal
{[QGVAR(allow), _this] call EFUNC(common,cbaSettings_settingChanged)},
true // Needs mission restart
QGVAR(enableActions),
"LIST",
[LSTRING(EnableActions_DisplayName), LSTRING(EnableActions_Description)],
LSTRING(Category),
[[0, 1, 2], [LSTRING(Selections3D), LSTRING(Radial), ELSTRING(common,Disabled)], 0],
false
] call CBA_settings_fnc_init;
[
QGVAR(useMenu), "LIST",
[LSTRING(useMenu), LSTRING(useMenu_Descr)],
_categoryArray,
[[0,1,2],[LELSTRING(common,Disabled), LELSTRING(common,Enabled), LELSTRING(common,VehiclesOnly)],1], // [values, titles, defaultIndex]
false, // isGlobal
{[QGVAR(useMenu), _this] call EFUNC(common,cbaSettings_settingChanged)},
false // Needs mission restart
QGVAR(enableSelfActions),
"CHECKBOX",
[LSTRING(EnableSelfActions_DisplayName), LSTRING(EnableSelfActions_Description)],
LSTRING(Category),
true,
false
] call CBA_settings_fnc_init;
[
QGVAR(openAfterTreatment), "CHECKBOX",
[LSTRING(openAfterTreatment), LSTRING(openAfterTreatment_Descr)],
_categoryArray,
true, // default value
false, // isGlobal
{[QGVAR(openAfterTreatment), _this] call EFUNC(common,cbaSettings_settingChanged)},
false // Needs mission restart
] call CBA_settings_fnc_init;
[ // for ref: 3d interaction (MEDICAL_ACTION_DISTANCE) is 1.75
QGVAR(maxRange), "SLIDER",
QGVAR(maxRange-localizeMe),
_categoryArray,
[0,10,3,1], // [min, max, default value, trailing decimals (-1 for whole numbers only)]
true, // isGlobal
{[QGVAR(maxRange), _this] call EFUNC(common,cbaSettings_settingChanged)},
true // Needs mission restart
QGVAR(enableMedicalMenu),
"LIST",
[LSTRING(EnableMedicalMenu_DisplayName), LSTRING(EnableMedicalMenu_Description)],
LSTRING(Category),
[[0, 1, 2], [ELSTRING(common,Disabled), ELSTRING(common,Enabled), ELSTRING(common,VehiclesOnly)], 1],
false
] call CBA_settings_fnc_init;
[
QEGVAR(medical,menuTypeStyle), "LIST",
[LSTRING(menuTypeDisplay), LSTRING(menuTypeDescription)],
_categoryArray,
[[0,1,2],[LLSTRING(useSelection), LLSTRING(useRadial),"Disabled"],0], // [values, titles, defaultIndex]
false, // isGlobal
{[QEGVAR(medical,menuTypeStyle), _this] call EFUNC(common,cbaSettings_settingChanged)},
false // Needs mission restart
QGVAR(openAfterTreatment),
"CHECKBOX",
[LSTRING(OpenAfterTreatment_DisplayName), LSTRING(OpenAfterTreatment_Description)],
LSTRING(Category),
true,
false
] call CBA_settings_fnc_init;
[
QGVAR(painVisualization), "LIST",
[LSTRING(menuTypeDisplay), LSTRING(menuTypeDescription)],
_categoryArray,
[[0,1,2],["Anyone","Medics only","Doctors only"],0], // [values, titles, defaultIndex] // ToDo: Localize
true, // isGlobal
{[QGVAR(painVisualization), _this] call EFUNC(common,cbaSettings_settingChanged)},
true // Needs mission restart
] call CBA_settings_fnc_init;
[
QGVAR(showPainInMenu), "CHECKBOX",
[LSTRING(showPainInMenu_DisplayName), LSTRING(showPainInMenu_Description)],
_categoryArray,
false, // default value
true, // isGlobal
{[QGVAR(showPainInMenu), _this] call EFUNC(common,cbaSettings_settingChanged)},
true // Needs mission restart
QGVAR(maxDistance),
"SLIDER",
[LSTRING(MaxDistance_DisplayName), LSTRING(MaxDistance_Description)],
LSTRING(Category),
[0, 10, 3, 1],
false
] call CBA_settings_fnc_init;

View File

@ -16,3 +16,57 @@
#include "\z\ace\addons\main\script_macros.hpp"
#include "\z\ace\addons\medical_engine\script_macros_medical.hpp"
#include "\a3\ui_f\hpp\defineResincl.inc"
#include "\a3\ui_f\hpp\defineDIKCodes.inc"
#include "\a3\ui_f\hpp\defineCommonGrids.inc"
#include "\a3\ui_f\hpp\defineCommonColors.inc"
#define POS_X(N) ((N) * GUI_GRID_W + GUI_GRID_CENTER_X)
#define POS_Y(N) ((N) * GUI_GRID_H + GUI_GRID_CENTER_Y)
#define POS_W(N) ((N) * GUI_GRID_W)
#define POS_H(N) ((N) * GUI_GRID_H)
#define IDD_MEDICAL_MENU 38580
#define IDC_TITLE 1200
#define IDC_TRIAGE 1300
#define IDC_EXAMINE 1310
#define IDC_BANDAGE 1320
#define IDC_MEDICATION 1330
#define IDC_AIRWAY 1340
#define IDC_ADVANCED 1350
#define IDC_DRAG 1360
#define IDC_TOGGLE 1370
#define IDC_TRIAGE_CARD 1400
#define IDC_INJURIES 1410
#define IDC_ACTIVITY 1420
#define IDC_QUICKVIEW 1430
#define IDC_ACTION_1 1500
#define IDC_ACTION_2 1510
#define IDC_ACTION_3 1520
#define IDC_ACTION_4 1530
#define IDC_ACTION_5 1540
#define IDC_ACTION_6 1550
#define IDC_ACTION_7 1560
#define IDC_ACTION_8 1570
#define IDC_ACTION_9 1580
#define IDCS_ACTION_BUTTONS [IDC_ACTION_1, IDC_ACTION_2, IDC_ACTION_3, IDC_ACTION_4, IDC_ACTION_5, IDC_ACTION_6, IDC_ACTION_7, IDC_ACTION_8, IDC_ACTION_9]
#define IDC_BODY_GROUP 6000
#define IDC_BODY_HEAD 6005
#define IDC_BODY_TORSO 6010
#define IDC_BODY_ARMLEFT 6015
#define IDC_BODY_ARMRIGHT 6020
#define IDC_BODY_LEGLEFT 6025
#define IDC_BODY_LEGRIGHT 6030
#define IDC_BODY_ARMLEFT_T 6035
#define IDC_BODY_ARMRIGHT_T 6040
#define IDC_BODY_LEGLEFT_T 6045
#define IDC_BODY_LEGRIGHT_T 6050
#define IDC_TRIAGE_STATUS 7000
#define IDC_TRIAGE_SELECT 7100

View File

@ -1,119 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Medical GUI">
<Container name="Settings">
<Key ID="STR_ACE_Medical_gui_subCategory">
<English>User Interface</English>
</Key>
<Key ID="STR_ACE_Medical_gui_Injuries">
<English>INJURIES</English>
<German>VERLETZUNGEN</German>
<Italian>FERITE</Italian>
<Russian>ТРАВМЫ</Russian>
<French>BLESSURES</French>
<Polish>OBRAŻENIA</Polish>
<Spanish>HERIDAS</Spanish>
<Hungarian>SÉRÜLÉSEK</Hungarian>
<Czech>ZRANĚNÍ</Czech>
<Portuguese>FERIMENTOS</Portuguese>
<Japanese>負傷</Japanese>
<Korean>부상</Korean>
<Chinesesimp>受伤</Chinesesimp>
<Chinese>受傷</Chinese>
</Key>
<Key ID="STR_ACE_Medical_gui_showPainInMenu_DisplayName">
<English>Show pain</English>
</Key>
<Key ID="STR_ACE_Medical_gui_showPainInMenu_Description">
<English>Show pain status in the medical menu</English>
</Key>
<Key ID="STR_ACE_Medical_gui_painVisualization_DisplayName">
<English>Allow Pain visualization</English>
</Key>
<Key ID="STR_ACE_Medical_gui_painVisualization_Description">
<English>Who can see pain in the menu?</English>
</Key>
<Key ID="STR_ACE_Medical_gui_menuTypeDisplay">
<English>Style of menu (Medical)</English>
<Polish>Styl menu medycznego</Polish>
<French>Style de menu (médical)</French>
<German>Menüstil (Medizin)</German>
<Russian>Вид меню (медицина)</Russian>
<Spanish>Tipo de menú (Medico)</Spanish>
<Czech>Styl menu (Zdravotní)</Czech>
<Portuguese>Estilo do menu (Médico)</Portuguese>
<Hungarian>Menü stílusa (Orvosi)</Hungarian>
<Italian>Stile del menù (medico)</Italian>
<Japanese>メニューの表示形式 (治療)</Japanese>
<Korean>메뉴의 스타일 (의료)</Korean>
<Chinesesimp>选单样式 (医疗)</Chinesesimp>
<Chinese>選單樣式 (醫療)</Chinese>
</Key>
<Key ID="STR_ACE_Medical_gui_menuTypeDescription">
<English>Select the type of menu you prefer; default 3d selections or radial.</English>
<Polish>Wybierz rodzaj menu, który preferujesz: domyślne pozycje 3D lub radialne</Polish>
<French>Sélectionne le type de menu préféré; par défaut la sélection 3D ou radiale</French>
<German>Wähle den Menüstil: Standard 3D-Auswahl oder kreisförmig.</German>
<Russian>Выберите тип меню: стандартный вариант (3D) или радиальный</Russian>
<Spanish>Selecciona el tipo de menú que prefieres: selecciones 3d por defecto o radial.</Spanish>
<Portuguese>Selecione o tipo de menu que você prefere; padrão seleções 3d ou radial.</Portuguese>
<Hungarian>Válaszd ki a neked megfelelő menüt: Alapértelmezett 3D válogatás, vagy kerek.</Hungarian>
<Czech>Zvolte typ menu: základní 3D výběr nebo kruhový</Czech>
<Italian>Seleziona il tipo di menù che preferisci: selezione (3D), radiale o disabilitata.</Italian>
<Japanese>好みに応じてメニューの表示形式を選んでください。標準では 3D 選択か円状です。</Japanese>
<Korean>선호하는 종류의 메뉴를 고르세요; 기본 3d 선택형 혹은 다이얼형</Korean>
<Chinesesimp>选择你喜欢的选单样式; 预设为3D选项或放射状</Chinesesimp>
<Chinese>選擇你喜歡的選單樣式; 預設為3D選項或放射狀</Chinese>
</Key>
<Key ID="STR_ACE_Medical_gui_useSelection">
<English>Selections (3d)</English>
<Polish>Pozycje (3D)</Polish>
<French>Sélection (3D)</French>
<German>3D-Auswahl</German>
<Russian>Стандартный (3D)</Russian>
<Spanish>Selecciones (3d)</Spanish>
<Portuguese>Seleção (3d)</Portuguese>
<Hungarian>Választékok (3D)</Hungarian>
<Czech>3D výběr</Czech>
<Italian>Selezione (3D)</Italian>
<Japanese>選択 (3d)</Japanese>
<Korean>선택 (3d)</Korean>
<Chinesesimp>选择 (3D)</Chinesesimp>
<Chinese>選擇 (3D)</Chinese>
</Key>
<Key ID="STR_ACE_Medical_gui_useRadial">
<English>Radial</English>
<Polish>Radialne</Polish>
<French>Radial</French>
<German>Kreisförmig</German>
<Russian>Радиальный</Russian>
<Spanish>Radial</Spanish>
<Portuguese>Radial</Portuguese>
<Hungarian>Kerek</Hungarian>
<Czech>Kruhový</Czech>
<Italian>Radiale</Italian>
<Japanese>円状</Japanese>
<Korean>다이얼형</Korean>
<Chinesesimp>放射状</Chinesesimp>
<Chinese>放射狀</Chinese>
</Key>
</Container>
<Key ID="STR_ACE_Medical_GUI_OpenMenu">
<English>Medical Menu</English>
<German>Sanitätsmenü</German>
<Polish>Menu medyczne</Polish>
<Portuguese>Menu médico</Portuguese>
<Russian>Медицинское меню</Russian>
<Spanish>Menú médico</Spanish>
<Czech>Zdravotnikcá nabídka</Czech>
<Italian>Menù Medico</Italian>
<French>Menu médical</French>
<Japanese>治療メニュー</Japanese>
<Korean>의료 메뉴</Korean>
<Chinesesimp>医疗选单</Chinesesimp>
<Chinese>醫療選單</Chinese>
<Key ID="STR_ACE_Medical_GUI_Category">
<English>ACE Medical GUI</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_Actions_Medical">
<Key ID="STR_ACE_Medical_GUI_EnableActions_DisplayName">
<English>Enable Medical Actions</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_EnableActions_Description">
<English>Enables medical actions for the Interaction Menu and selects their style.</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_Selections3D">
<English>Selections (3D)</English>
<Polish>Pozycje (3D)</Polish>
<French>Sélection (3D)</French>
<German>3D-Auswahl</German>
<Russian>Стандартный (3D)</Russian>
<Spanish>Selecciones (3d)</Spanish>
<Portuguese>Seleção (3d)</Portuguese>
<Hungarian>Választékok (3D)</Hungarian>
<Czech>3D výběr</Czech>
<Italian>Selezione (3D)</Italian>
<Japanese>選択 (3d)</Japanese>
<Korean>선택 (3d)</Korean>
<Chinesesimp>选择 (3D)</Chinesesimp>
<Chinese>選擇 (3D)</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_Radial">
<English>Radial</English>
<Polish>Radialne</Polish>
<French>Radial</French>
<German>Kreisförmig</German>
<Russian>Радиальный</Russian>
<Spanish>Radial</Spanish>
<Portuguese>Radial</Portuguese>
<Hungarian>Kerek</Hungarian>
<Czech>Kruhový</Czech>
<Italian>Radiale</Italian>
<Japanese>円状</Japanese>
<Korean>다이얼형</Korean>
<Chinesesimp>放射状</Chinesesimp>
<Chinese>放射狀</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_EnableSelfActions_DisplayName">
<English>Enable Medical Self Actions</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_EnableSelfActions_Description">
<English>Enables medical actions for the Self Interaction Menu.</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_EnableMedicalMenu_DisplayName">
<English>Enable Medical Menu</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_EnableMedicalMenu_Description">
<English>Enables the use of the Medical Menu through the keybind or interaction menu.</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_OpenAfterTreatment_DisplayName">
<English>Reopen Medical Menu</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_OpenAfterTreatment_Description">
<English>Reopen the Medical Menu after successful treatment.</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_MaxDistance_DisplayName">
<English>Maximum Distance</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_MaxDistance_Description">
<English>Maximum distance from which the Medical Menu can be opened.</English>
</Key>
<Key ID="STR_ACE_Medical_GUI_Medical">
<English>Medical</English>
<Czech>Lékařské</Czech>
<French>Médical</French>
@ -129,129 +82,22 @@
<Chinesesimp>医疗</Chinesesimp>
<Chinese>醫療</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_UnloadPatient">
<English>Unload patient</English>
<Spanish>Descargar al paciente</Spanish>
<Russian>Выгрузить пациента</Russian>
<German>Patient ausladen</German>
<Polish>Wyładuj pacjenta</Polish>
<French>Le patient débarque</French>
<Hungarian>Sebesült kihúzása</Hungarian>
<Italian>Scarica il paziente</Italian>
<Portuguese>Descarregar Paciente</Portuguese>
<Czech>Vyložit pacienta</Czech>
<Japanese>患者を降ろす</Japanese>
<Korean>환자 내리기</Korean>
<Chinesesimp>将伤者背出</Chinesesimp>
<Chinese>將傷者背出</Chinese>
<Key ID="STR_ACE_Medical_GUI_MedicalMenu">
<English>Medical Menu</English>
<German>Sanitätsmenü</German>
<Polish>Menu medyczne</Polish>
<Portuguese>Menu médico</Portuguese>
<Russian>Медицинское меню</Russian>
<Spanish>Menú médico</Spanish>
<Czech>Zdravotnikcá nabídka</Czech>
<Italian>Menù Medico</Italian>
<French>Menu médical</French>
<Japanese>治療メニュー</Japanese>
<Korean>의료 메뉴</Korean>
<Chinesesimp>医疗选单</Chinesesimp>
<Chinese>醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_LoadPatient">
<English>Load patient</English>
<Spanish>Cargar al paciente en</Spanish>
<Russian>Погрузить пациента</Russian>
<German>Patient einladen</German>
<Polish>Załaduj pacjenta</Polish>
<French>Embarquer le patient</French>
<Hungarian>Sebesült berakása</Hungarian>
<Italian>Carica il paziente</Italian>
<Portuguese>Carregar Paciente Em</Portuguese>
<Czech>Naložit pacienta</Czech>
<Japanese>患者を載せる</Japanese>
<Korean>환자 싣기</Korean>
<Chinesesimp>将伤者放入</Chinesesimp>
<Chinese>將傷者放入</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_allow">
<English>Allow Medical Menu</English>
<German>Erlaube Sanitätsmenü</German>
<Polish>Akt. menu medyczne</Polish>
<Portuguese>Permitir menu médico</Portuguese>
<Russian>Разрешить мед. меню</Russian>
<Spanish>Permitir menú médico</Spanish>
<Czech>Povolit zdravotnickou nabídku</Czech>
<Italian>Consenti Menù Medico</Italian>
<French>Autoriser le menu médical</French>
<Japanese>治療メニューを有効化</Japanese>
<Korean>의료 메뉴 활성화</Korean>
<Chinesesimp>允许医疗选单</Chinesesimp>
<Chinese>允許醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_allow_Descr">
<English>Allow clients to use the medical menu</English>
<German>Erlaube Clients das Sanitätsmenü zu verwenden</German>
<Polish>Zezwalaj graczom korzystać z menu medycznego</Polish>
<Portuguese>Permite que clientes utilizem o menu médico</Portuguese>
<Russian>Разрешает клиентам использовать медицинское меню</Russian>
<Spanish>Permitir a los clientes utilizar el menú médico</Spanish>
<Czech>Povolit klientům používat zdravotnickou nabídku</Czech>
<Italian>Consenti ai clients di usare il Menù Medico</Italian>
<French>Autoriser les clients à utiliser le menu médical</French>
<Japanese>すべてのクライアントが治療メニューをつかえるようにする</Japanese>
<Korean>클라이언트가 의료 메뉴를 쓰는것을 허락합니다</Korean>
<Chinesesimp>允许客户端使用医疗选单</Chinesesimp>
<Chinese>允許客戶端使用醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_useMenu">
<English>Use Medical menu</English>
<German>Verwende Sanitätsmenü</German>
<Polish>Użyj menu medycznego</Polish>
<Portuguese>Usar o menu médico</Portuguese>
<Russian>Использовать медицинское меню</Russian>
<Spanish>Utiliza el menú médico</Spanish>
<Czech>Použít zdravotnickou nabídku</Czech>
<Italian>Usa Menù Medico</Italian>
<French>Utiliser le menu médical</French>
<Japanese>治療メニューをつかう</Japanese>
<Korean>의료 메뉴 사용</Korean>
<Chinesesimp>使用医疗选单</Chinesesimp>
<Chinese>使用醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_useMenu_Descr">
<English>If allowed by server, enable the option to use the Medical Menu through keybinding and interaction menu</English>
<German>Wenn vom Server erlaubt, aktiviert diese Einstellung das Sanitätsmenü, welches durch Tastenkombination oder Interaktionsmenü aufgerufen werden kann.</German>
<Polish>Jeżeli zezwolone przez serwer, aktywuj menu medyczne poprzez skrót klawiszowy i menu interakcji.</Polish>
<Portuguese>Se permitido pelo servidor, ativa a opção de usar o menu médico por atalhos de teclas e menu de interação</Portuguese>
<Russian>Если разрешено сервером, включает опцию использования медицинского меню с помощью горячих главиш или меню взаимодействия</Russian>
<Spanish>Si está permitido por el servidor, active la opción de utilizar el menú médico a través del menú de las teclas</Spanish>
<Czech>Pokud je povoleno serverem, umožní použít zdravotnickou nabídku skrze kláv. zkratku a interakční menu</Czech>
<Italian>Se consentito dal server, abilita l'opzione di usare il Menù Medico attraverso hotkeys e menù interazione</Italian>
<French>Si autorisé par le serveur, active l'option d'utiliser le menu médical à travers les raccourcis clavier et le menu d'interaction.</French>
<Japanese>サーバーが有効化を許可している場合は、オプションから有効化でき治療メニューはキー割り当てとインタラクション メニューを無視できます</Japanese>
<Korean>서버 허가하에 단축키와 상호작용 메뉴로 의료 메뉴사용을 허가합니다</Korean>
<Chinesesimp>如果伺服器允许,只需透过按键即可叫出医疗选单</Chinesesimp>
<Chinese>如果伺服器允許,只需透過按鍵即可叫出醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_openAfterTreatment">
<English>Re-open Medical menu</English>
<German>Sanitätsmenü offen lassen</German>
<Polish>Otwieraj ponownie menu medyczne</Polish>
<Portuguese>Reabrir menu médico</Portuguese>
<Russian>Переоткрывать мед. меню</Russian>
<Spanish>Reabrir menú médico</Spanish>
<Czech>Znovu otevřít zdravotnickou nabídku</Czech>
<Italian>Ri-apri Menù Medico</Italian>
<French>Ré-ouvrir le menu médical</French>
<Japanese>治療メニューを再びひらく</Japanese>
<Korean>의료 메뉴 다시 열기</Korean>
<Chinesesimp>重新开启医疗选单</Chinesesimp>
<Chinese>重新開啟醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_openAfterTreatment_Descr">
<English>Re-open the medical menu after succesful treatment</English>
<German>Öffnet das Sanitätsmenü nach einer erfolgreichen Behandlung erneut</German>
<Polish>Otwórz ponownie menu medyczne po udanym zakończeniu leczenia</Polish>
<Portuguese>Reabre o menu médico depois de um tratamento bem sucedido</Portuguese>
<Russian>Переоткрывать медицинское меню после удачного лечения</Russian>
<Spanish>Reabre el menú médico despues de un tratamiento con éxito</Spanish>
<Czech>Znovu otevřít zdravotnickou nabídku po úspěšné léčbě </Czech>
<Italian>Ri-Apri il Menù Medico dopo un trattamento riuscito</Italian>
<French>Ré-ouvrir le menu médical après un traitement réussi</French>
<Japanese>治療が終わったあと、再び治療メニューをひらく</Japanese>
<Korean>성공적으로 치료한후에 의료 메뉴를 다시 엽니다</Korean>
<Chinesesimp>当治疗成功后重新打开医疗选单</Chinesesimp>
<Chinese>當治療成功後重新打開醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_DisplayMenuKey">
<Key ID="STR_ACE_Medical_GUI_OpenMedicalMenu">
<English>Open Medical Menu</English>
<German>Öffne Sanitätsmenü</German>
<Polish>Otwórz menu medyczne</Polish>
@ -266,35 +112,37 @@
<Chinesesimp>开起医疗选单</Chinesesimp>
<Chinese>開起醫療選單</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_module_DisplayName">
<English>Medical Menu Settings</English>
<German>Sanitätsmenü Einstellungen</German>
<Polish>Ustawienia menu medycznego</Polish>
<Portuguese>Preferências do menu médico</Portuguese>
<Russian>Настройки медицинского меню</Russian>
<Spanish>Ajustes del mení médico</Spanish>
<Czech>Nastavení zdravotnické nabídky</Czech>
<Italian>Impostazioni Menù Medico</Italian>
<French>Réglages du menu médical</French>
<Japanese>治療メニューの設定</Japanese>
<Korean>의료 메뉴 설정</Korean>
<Chinesesimp>医疗选单设定</Chinesesimp>
<Chinese>醫療選單設定</Chinese>
<Key ID="STR_ACE_Medical_GUI_LoadPatient">
<English>Load Patient</English>
<Spanish>Cargar al paciente en</Spanish>
<Russian>Погрузить пациента</Russian>
<German>Patient einladen</German>
<Polish>Załaduj pacjenta</Polish>
<French>Embarquer le patient</French>
<Hungarian>Sebesült berakása</Hungarian>
<Italian>Carica il paziente</Italian>
<Portuguese>Carregar Paciente Em</Portuguese>
<Czech>Naložit pacienta</Czech>
<Japanese>患者を載せる</Japanese>
<Korean>환자 싣기</Korean>
<Chinesesimp>将伤者放入</Chinesesimp>
<Chinese>將傷者放入</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_module_Desc">
<English>Configure the usage of the Medical Menu</English>
<German>Stelle die Verwendung des Sanitätsmenüs ein</German>
<Polish>Skonfiguruj opcje menu medycznego</Polish>
<Portuguese>Configura o uso do menu médico</Portuguese>
<Russian>Настройки использования медицинского меню</Russian>
<Spanish>Configurar el uso del menú médico</Spanish>
<Czech>Konfigurace využití zdravotnické nabídky</Czech>
<Italian>Configura l'uso del Menù Medico</Italian>
<French>Configurer l'utilisation du menu médical</French>
<Japanese>治療メニューを使うための設定</Japanese>
<Korean>의료 메뉴 사용의 설정</Korean>
<Chinesesimp>设置医疗选单的使用</Chinesesimp>
<Chinese>設置醫療選單的使用</Chinese>
<Key ID="STR_ACE_Medical_GUI_UnloadPatient">
<English>Unload Patient</English>
<Spanish>Descargar al paciente</Spanish>
<Russian>Выгрузить пациента</Russian>
<German>Patient ausladen</German>
<Polish>Wyładuj pacjenta</Polish>
<French>Le patient débarque</French>
<Hungarian>Sebesült kihúzása</Hungarian>
<Italian>Scarica il paziente</Italian>
<Portuguese>Descarregar Paciente</Portuguese>
<Czech>Vyložit pacienta</Czech>
<Japanese>患者を降ろす</Japanese>
<Korean>환자 내리기</Korean>
<Chinesesimp>将伤者背出</Chinesesimp>
<Chinese>將傷者背出</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_EXAMINE_TREATMENT">
<English>EXAMINE &amp; TREATMENT</English>
@ -371,8 +219,24 @@
<Chinesesimp>快速检查</Chinesesimp>
<Chinese>快速檢查</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_VIEW_TRIAGE_CARD">
<English>View triage Card</English>
<Key ID="STR_ACE_Medical_GUI_INJURIES">
<English>INJURIES</English>
<German>VERLETZUNGEN</German>
<Italian>FERITE</Italian>
<Russian>ТРАВМЫ</Russian>
<French>BLESSURES</French>
<Polish>OBRAŻENIA</Polish>
<Spanish>HERIDAS</Spanish>
<Hungarian>SÉRÜLÉSEK</Hungarian>
<Czech>ZRANĚNÍ</Czech>
<Portuguese>FERIMENTOS</Portuguese>
<Japanese>負傷</Japanese>
<Korean>부상</Korean>
<Chinesesimp>受伤</Chinesesimp>
<Chinese>受傷</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_ViewTriageCard">
<English>View Triage Card</English>
<German>Zeige Triagekarte</German>
<Russian>Смотреть первичную карточку</Russian>
<Spanish>Ver Triage</Spanish>
@ -386,7 +250,7 @@
<Chinesesimp>查看诊断卡</Chinesesimp>
<Chinese>查看診斷卡</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_EXAMINE_PATIENT">
<Key ID="STR_ACE_Medical_GUI_ExaminePatient">
<English>Examine Patient</English>
<German>Untersuche Patient</German>
<Russian>Осмотреть пациента</Russian>
@ -401,7 +265,7 @@
<Chinesesimp>检查伤者</Chinesesimp>
<Chinese>檢查傷者</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_BANDAGE_FRACTURES">
<Key ID="STR_ACE_Medical_GUI_BandageFractures">
<English>Bandage / Fractures</English>
<German>Bandagen / Brüche</German>
<Russian>Раны / переломы</Russian>
@ -416,7 +280,7 @@
<Chinesesimp>绷带 / 骨折</Chinesesimp>
<Chinese>繃帶 / 骨折</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_MEDICATION">
<Key ID="STR_ACE_Medical_GUI_Medication">
<English>Medication</English>
<German>Medikamentation</German>
<Russian>Медикаменты</Russian>
@ -431,7 +295,7 @@
<Chinesesimp>药物</Chinesesimp>
<Chinese>藥物</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_AIRWAY_MANAGEMENT">
<Key ID="STR_ACE_Medical_GUI_AirwayManagement">
<English>Airway Management</English>
<Russian>Дыхательные пути</Russian>
<Spanish>Vías Aéreas</Spanish>
@ -446,7 +310,7 @@
<Chinesesimp>呼吸道管理</Chinesesimp>
<Chinese>呼吸道管理</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_ADVANCED_TREATMENT">
<Key ID="STR_ACE_Medical_GUI_AdvancedTreatment">
<English>Advanced Treatments</English>
<German>Erweiterte Behandlungen</German>
<Russian>Специальная медпомощь</Russian>
@ -461,22 +325,22 @@
<Chinesesimp>进阶治疗</Chinesesimp>
<Chinese>進階治療</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_DRAG_CARRY">
<English>Drag/Carry</English>
<German>Ziehen/Tragen</German>
<Russian>Тащить/нести</Russian>
<Spanish>Arrastrar/Cargar</Spanish>
<French>Traîner/Porter</French>
<Polish>Ciągnij/Nieś</Polish>
<Portuguese>Arrastar/Carregar</Portuguese>
<Czech>Táhnout/Nést</Czech>
<Italian>Trascina/Trasporta</Italian>
<Key ID="STR_ACE_Medical_GUI_DragCarry">
<English>Drag / Carry</English>
<German>Ziehen / Tragen</German>
<Russian>Тащить / нести</Russian>
<Spanish>Arrastrar / Cargar</Spanish>
<French>Traîner / Porter</French>
<Polish>Ciągnij / Nieś</Polish>
<Portuguese>Arrastar / Carregar</Portuguese>
<Czech>Táhnout / Nést</Czech>
<Italian>Trascina / Trasporta</Italian>
<Japanese>引きずる / 運ぶ</Japanese>
<Korean>끌기 / 들기</Korean>
<Chinesesimp>拖 / 背</Chinesesimp>
<Chinese>拖 / 背</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_TOGGLE_SELF">
<Key ID="STR_ACE_Medical_GUI_ToggleSelf">
<English>Toggle (Self)</English>
<German>Umschalter (Selbst)</German>
<Russian>Лечить себя/другого раненого</Russian>
@ -491,112 +355,7 @@
<Chinesesimp>切换 (自己)</Chinesesimp>
<Chinese>切換 (自己)</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_TRIAGE_STATUS">
<English>Select triage status</English>
<German>Setze Status auf der Triagekarte</German>
<Russian>Сортировка</Russian>
<Spanish>Seleccionar estado de Triage</Spanish>
<French>Sélectionner l'état de triage</French>
<Polish>Wybierz priorytet</Polish>
<Portuguese>Selecionar estado de triagem</Portuguese>
<Czech>Vybrat prioritu</Czech>
<Italian>Seleziona stato Triage</Italian>
<Japanese>トリアージによる状態を選択</Japanese>
<Korean>부상 상태 고르기</Korean>
<Chinesesimp>选择分诊状态</Chinesesimp>
<Chinese>選擇分診狀態</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_HEAD">
<English>Select Head</English>
<German>Wähle Kopf</German>
<Russian>Выбрать голову</Russian>
<Spanish>Seleccionar Cabeza</Spanish>
<French>Sélectionner la tête</French>
<Polish>Wybierz głowę</Polish>
<Portuguese>Selecionar Cabeça</Portuguese>
<Czech>Vybrat Hlavu</Czech>
<Italian>Seleziona Testa</Italian>
<Japanese>頭部を選ぶ</Japanese>
<Korean>머리 선택</Korean>
<Chinesesimp>选择头部</Chinesesimp>
<Chinese>選擇頭部</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_TORSO">
<English>Select Torso</English>
<German>Wähle Torso</German>
<Russian>Выбрать торс</Russian>
<Spanish>Seleccionar Torso</Spanish>
<French>Sélectionner le torse</French>
<Polish>Wybierz tors</Polish>
<Portuguese>Selecionar Torso</Portuguese>
<Czech>Vybrat Trup</Czech>
<Italian>Seleziona Torso</Italian>
<Japanese>胴体を選ぶ</Japanese>
<Korean>몸통 선택</Korean>
<Chinesesimp>选择身体</Chinesesimp>
<Chinese>選擇身體</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_ARM_L">
<English>Select Left Arm</English>
<German>Wähle linken Arm</German>
<Russian>Выбрать левую руку</Russian>
<Spanish>Seleccionar Brazo Izquierdo</Spanish>
<French>Sélectionner le bras gauche</French>
<Polish>Wybierz lewą rękę</Polish>
<Portuguese>Selecionar Braço Esquerdo</Portuguese>
<Czech>Vybrat Levou ruku</Czech>
<Italian>Seleziona Braccio Sinistro</Italian>
<Japanese>左腕を選ぶ</Japanese>
<Korean>왼쪽 팔 선택</Korean>
<Chinesesimp>选择左手</Chinesesimp>
<Chinese>選擇左手</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_ARM_R">
<English>Select Right Arm</English>
<German>Wähle rechten Arm</German>
<Russian>Выбрать правую руку</Russian>
<Spanish>Seleccionar Brazo Derecho</Spanish>
<French>Sélectionner le bras droit</French>
<Polish>Wybierz prawą rękę</Polish>
<Portuguese>Selecionar Braço Direito</Portuguese>
<Czech>Vybrat Pravou ruku</Czech>
<Italian>Seleziona Braccio Destro</Italian>
<Japanese>右腕を選ぶ</Japanese>
<Korean>오른쪽 팔 선택</Korean>
<Chinesesimp>选择右手</Chinesesimp>
<Chinese>選擇右手</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_LEG_L">
<English>Select Left Leg</English>
<German>Wähle linkes Bein</German>
<Russian>Выбрать левую ногу</Russian>
<Spanish>Seleccionar Pierna Izquierda</Spanish>
<French>Sélectionner la jambe gauche</French>
<Polish>Wybierz lewą nogę</Polish>
<Portuguese>Selecionar Perna Esquerda</Portuguese>
<Czech>Vybrat Levou nohu</Czech>
<Italian>Seleziona Gamba Sinistra</Italian>
<Japanese>左足を選ぶ</Japanese>
<Korean>왼쪽 다리 선택</Korean>
<Chinesesimp>选择左脚</Chinesesimp>
<Chinese>選擇左腳</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECT_LEG_R">
<English>Select Right Leg</English>
<German>Wähle rechtes Bein</German>
<Russian>Выбрать правую ногу</Russian>
<Spanish>Seleccionar Pierna Derecha</Spanish>
<French>Sélectionner la jambe droite</French>
<Polish>Wybierz prawą nogę</Polish>
<Portuguese>Selecionar Perna Direita</Portuguese>
<Czech>Vybrat Pravou nohu</Czech>
<Italian>Seleziona Gamba Destra</Italian>
<Japanese>右足を選ぶ</Japanese>
<Korean>오른쪽 다리 선택</Korean>
<Chinesesimp>选择右脚</Chinesesimp>
<Chinese>選擇右腳</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_HEAD">
<Key ID="STR_ACE_Medical_GUI_Head">
<English>Head</English>
<German>Kopf</German>
<Russian>Голова</Russian>
@ -611,7 +370,7 @@
<Chinesesimp>头部</Chinesesimp>
<Chinese>頭部</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_TORSO">
<Key ID="STR_ACE_Medical_GUI_Torso">
<English>Torso</English>
<German>Torso</German>
<Russian>Торс</Russian>
@ -626,7 +385,7 @@
<Chinesesimp>身体</Chinesesimp>
<Chinese>身體</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_ARM_L">
<Key ID="STR_ACE_Medical_GUI_LeftArm">
<English>Left Arm</English>
<German>Linker Arm</German>
<Russian>Левая рука</Russian>
@ -641,7 +400,7 @@
<Chinesesimp>左手</Chinesesimp>
<Chinese>左手</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_ARM_R">
<Key ID="STR_ACE_Medical_GUI_RightArm">
<English>Right Arm</English>
<German>Rechter Arm</German>
<Russian>Правая рука</Russian>
@ -656,7 +415,7 @@
<Chinesesimp>右手</Chinesesimp>
<Chinese>右手</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_LEG_L">
<Key ID="STR_ACE_Medical_GUI_LeftLeg">
<English>Left Leg</English>
<German>Linkes Bein</German>
<Russian>Левая нога</Russian>
@ -671,7 +430,7 @@
<Chinesesimp>左脚</Chinesesimp>
<Chinese>左腳</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_LEG_R">
<Key ID="STR_ACE_Medical_GUI_RightLeg">
<English>Right Leg</English>
<German>Rechtes Bein</German>
<Russian>Правая нога</Russian>
@ -686,22 +445,97 @@
<Chinesesimp>右脚</Chinesesimp>
<Chinese>右腳</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SELECTED_BODY_PART">
<English>Body Part: %1</English>
<German>Körperteil: %1</German>
<Russian>Часть тела: %1</Russian>
<Spanish>Parte del cuerpo: %1</Spanish>
<French>Partie du corps : %1</French>
<Polish>Część ciała: %1</Polish>
<Portuguese>Parte do corpo: %1</Portuguese>
<Czech>Část těla: %1</Czech>
<Italian>Parte del Corpo: %1</Italian>
<Japanese>身体の一部: %1</Japanese>
<Korean>신체 부위: %1</Korean>
<Chinesesimp>身体部位: %1</Chinesesimp>
<Chinese>身體部位: %1</Chinese>
<Key ID="STR_ACE_Medical_GUI_SelectHead">
<English>Select Head</English>
<German>Wähle Kopf</German>
<Russian>Выбрать голову</Russian>
<Spanish>Seleccionar Cabeza</Spanish>
<French>Sélectionner la tête</French>
<Polish>Wybierz głowę</Polish>
<Portuguese>Selecionar Cabeça</Portuguese>
<Czech>Vybrat Hlavu</Czech>
<Italian>Seleziona Testa</Italian>
<Japanese>頭部を選ぶ</Japanese>
<Korean>머리 선택</Korean>
<Chinesesimp>选择头部</Chinesesimp>
<Chinese>選擇頭部</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SMALL">
<Key ID="STR_ACE_Medical_GUI_SelectTorso">
<English>Select Torso</English>
<German>Wähle Torso</German>
<Russian>Выбрать торс</Russian>
<Spanish>Seleccionar Torso</Spanish>
<French>Sélectionner le torse</French>
<Polish>Wybierz tors</Polish>
<Portuguese>Selecionar Torso</Portuguese>
<Czech>Vybrat Trup</Czech>
<Italian>Seleziona Torso</Italian>
<Japanese>胴体を選ぶ</Japanese>
<Korean>몸통 선택</Korean>
<Chinesesimp>选择身体</Chinesesimp>
<Chinese>選擇身體</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SelectLeftArm">
<English>Select Left Arm</English>
<German>Wähle linken Arm</German>
<Russian>Выбрать левую руку</Russian>
<Spanish>Seleccionar Brazo Izquierdo</Spanish>
<French>Sélectionner le bras gauche</French>
<Polish>Wybierz lewą rękę</Polish>
<Portuguese>Selecionar Braço Esquerdo</Portuguese>
<Czech>Vybrat Levou ruku</Czech>
<Italian>Seleziona Braccio Sinistro</Italian>
<Japanese>左腕を選ぶ</Japanese>
<Korean>왼쪽 팔 선택</Korean>
<Chinesesimp>选择左手</Chinesesimp>
<Chinese>選擇左手</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SelectRightArm">
<English>Select Right Arm</English>
<German>Wähle rechten Arm</German>
<Russian>Выбрать правую руку</Russian>
<Spanish>Seleccionar Brazo Derecho</Spanish>
<French>Sélectionner le bras droit</French>
<Polish>Wybierz prawą rękę</Polish>
<Portuguese>Selecionar Braço Direito</Portuguese>
<Czech>Vybrat Pravou ruku</Czech>
<Italian>Seleziona Braccio Destro</Italian>
<Japanese>右腕を選ぶ</Japanese>
<Korean>오른쪽 팔 선택</Korean>
<Chinesesimp>选择右手</Chinesesimp>
<Chinese>選擇右手</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SelectLeftLeg">
<English>Select Left Leg</English>
<German>Wähle linkes Bein</German>
<Russian>Выбрать левую ногу</Russian>
<Spanish>Seleccionar Pierna Izquierda</Spanish>
<French>Sélectionner la jambe gauche</French>
<Polish>Wybierz lewą nogę</Polish>
<Portuguese>Selecionar Perna Esquerda</Portuguese>
<Czech>Vybrat Levou nohu</Czech>
<Italian>Seleziona Gamba Sinistra</Italian>
<Japanese>左足を選ぶ</Japanese>
<Korean>왼쪽 다리 선택</Korean>
<Chinesesimp>选择左脚</Chinesesimp>
<Chinese>選擇左腳</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_SelectRightLeg">
<English>Select Right Leg</English>
<German>Wähle rechtes Bein</German>
<Russian>Выбрать правую ногу</Russian>
<Spanish>Seleccionar Pierna Derecha</Spanish>
<French>Sélectionner la jambe droite</French>
<Polish>Wybierz prawą nogę</Polish>
<Portuguese>Selecionar Perna Direita</Portuguese>
<Czech>Vybrat Pravou nohu</Czech>
<Italian>Seleziona Gamba Destra</Italian>
<Japanese>右足を選ぶ</Japanese>
<Korean>오른쪽 다리 선택</Korean>
<Chinesesimp>选择右脚</Chinesesimp>
<Chinese>選擇右腳</Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_Small">
<English>Small</English>
<German>Klein</German>
<Russian>малого размера</Russian>
@ -716,7 +550,7 @@
<Chinesesimp></Chinesesimp>
<Chinese></Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_MEDIUM">
<Key ID="STR_ACE_Medical_GUI_Medium">
<English>Medium</English>
<German>Mittel</German>
<Russian>среднего размера</Russian>
@ -731,7 +565,7 @@
<Chinesesimp></Chinesesimp>
<Chinese></Chinese>
</Key>
<Key ID="STR_ACE_Medical_GUI_LARGE">
<Key ID="STR_ACE_Medical_GUI_Large">
<English>Large</English>
<German>Groß</German>
<Russian>большого размера</Russian>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,570 +0,0 @@
#include "\z\ace\addons\common\define.hpp"
class GVAR(medicalMenu) {
idd = 314412;
movingEnable = true;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(medicalMenu), _this select 0)]; [_this select 0] call FUNC(onMenuOpen););
onUnload = QUOTE([] call FUNC(onMenuClose));
class controlsBackground {
class HeaderBackground: ACE_gui_backgroundBase {
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0)";
};
class CenterBackground: HeaderBackground {
y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
h = "16 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0.8)";
colorText[] = {0, 0, 0, "(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
colorBackground[] = {0,0,0,"(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
};
class BottomBackground: CenterBackground {
y = "(18.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))";
h = "9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
};
};
class controls {
class HeaderName {
idc = 1;
type = CT_STATIC;
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_LEFT + ST_SHADOW;
font = "RobotoCondensed";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
colorText[] = {0.95, 0.95, 0.95, 0.75};
colorBackground[] = {"(profilenamespace getVariable ['GUI_BCG_RGB_R',0.69])","(profilenamespace getVariable ['GUI_BCG_RGB_G',0.75])","(profilenamespace getVariable ['GUI_BCG_RGB_B',0.5])", "(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
text = "";
};
class IconsBackGroundBar: ACE_gui_backgroundBase{
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "38 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "3.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = QPATHTOF(data\background_img.paa);
colorText[] = {1, 1, 1, 0.0};
};
class CatagoryLeft: HeaderName {
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
colorText[] = {1, 1, 1.0, 0.9};
colorBackground[] = {0,0,0,0};
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)";
text = CSTRING(EXAMINE_TREATMENT);
};
class CatagoryCenter: CatagoryLeft {
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = CSTRING(STATUS);
};
class CatagoryRight: CatagoryCenter{
x = "25.66 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = CSTRING(OVERVIEW);
};
class Line: ACE_gui_backgroundBase {
idc = -1;
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "37 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "0.03 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(1,1,1,0.5)";
};
class iconImg1: ACE_gui_backgroundBase {
idc = 111;
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)";
colorBackground[] = {0,0,0,1};
colorPicture[] = {1,1,1,1};
colorText[] = {1,1,1,1};
text = QPATHTOF(data\icons\triage_card_small.paa);
};
class iconImg2: iconImg1 {
idc = 112;
x = "3 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\examine_patient_small.paa);
};
class iconImg3: iconImg1 {
idc = 113;
x = "4.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\bandage_fracture_small.paa);
};
class iconImg4: iconImg1 {
idc = 114;
x = "6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\medication_small.paa);
};
class iconImg5: iconImg1 {
idc = 115;
x = "7.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\airway_management_small.paa);
};
class iconImg6: iconImg1 {
idc = 116;
x = "9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\advanced_treatment_small.paa);
};
class iconImg7: iconImg1 {
idc = 117;
x = "10.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\icon_carry.paa);
};
class iconImg8: iconImg1 {
idc = 118;
x = "12 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = QPATHTOF(data\icons\toggle_self_small.paa);
};
class BtnIconLeft1: ACE_gui_buttonBase {
idc = 11;
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)";
action = QUOTE(['triage'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft2: BtnIconLeft1 {
idc = 12;
x = "3 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['examine'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft3: BtnIconLeft1 {
idc = 13;
x = "4.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['bandage'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft4: BtnIconLeft1 {
idc = 14;
x = "6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['medication'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft5: BtnIconLeft1 {
idc = 15;
x = "7.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['airway'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft6: BtnIconLeft1 {
idc = 16;
x = "9 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['advanced'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft7: BtnIconLeft1 {
idc = 17;
x = "10.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['drag'] call FUNC(handleUI_DisplayOptions););
};
class BtnIconLeft8: BtnIconLeft1 {
idc = 18;
x = "12 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(['toggle'] call FUNC(handleUI_DisplayOptions););
};
class TriageCardList: ACE_gui_listBoxBase {
idc = 212;
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
rowHeight = 0.03;
colorBackground[] = {0, 0, 0, 0.2};
colorText[] = {1,1, 1, 1.0};
colorScrollbar[] = {0.95, 0.95, 0.95, 1};
colorSelect[] = {0.95, 0.95, 0.95, 1};
colorSelect2[] = {0.95, 0.95, 0.95, 1};
colorSelectBackground[] = {0, 0, 0, 0.0};
colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0};
};
// Left side
class BtnMenu1: BtnIconLeft1 {
idc = 20;
y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.9)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.8)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.5)";
animTextureOver = "#(argb,8,8,3)color(1,1,1,1)";
animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)";
animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)";
animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)";
color[] = {1, 1, 1, 1};
color2[] = {0,0,0, 1};
colorBackgroundFocused[] = {1,1,1,1};
colorBackground[] = {1,1,1,1};
colorbackground2[] = {1,1,1,1};
colorDisabled[] = {0.5,0.5,0.5,0.8};
colorFocused[] = {0,0,0,1};
periodFocus = 1;
periodOver = 1;
action = "";
};
class BtnMenu2: BtnMenu1 {
idc = 21;
y = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu3: BtnMenu1 {
idc = 22;
y = "7.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu4: BtnMenu1 {
idc = 23;
y = "8.7 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text ="";
};
class BtnMenu5: BtnMenu1 {
idc = 24;
y = "9.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu6: BtnMenu1 {
idc = 25;
y = "10.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu7: BtnMenu1 {
idc = 26;
y = "12 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
class BtnMenu8: BtnMenu1 {
idc = 27;
y = "13.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
text = "";
};
// center
class bodyImgBackground: ACE_gui_backgroundBase {
idc = -1;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "12.33 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
colorBackground[] = {1,1,1,1};
colorPicture[] = {1,1,1,1};
colorText[] = {1,1,1,1};
text = QPATHTOF(ui\ui\body_background.paa);
};
class bodyImgHead: bodyImgBackground {
idc = 50;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.73 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "12.33 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
colorBackground[] = {1,1,1,1};
colorPicture[] = {1,1,1,0.75};
colorText[] = {1,1,1,0.75};
text = QPATHTOF(ui\ui\body_head.paa);
};
class bodyImgTorso: bodyImgHead {
idc = 51;
text = QPATHTOF(ui\ui\body_torso.paa);
};
class bodyImgArms_l: bodyImgHead {
idc = 52;
text = QPATHTOF(ui\ui\body_arm_left.paa);
};
class bodyImgArms_r: bodyImgHead {
idc = 53;
text = QPATHTOF(ui\ui\body_arm_right.paa);
};
class bodyImgLegs_l: bodyImgHead {
idc = 54;
text = QPATHTOF(ui\ui\body_leg_left.paa);
};
class bodyImgLegs_r: bodyImgHead {
idc = 55;
text = QPATHTOF(ui\ui\body_leg_right.paa);
};
class selectHead: ACE_gui_buttonBase {
idc = 301;
x = "18.8 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "3.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.4 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)";
action = QUOTE(GVAR(selectedBodyPart) = 0;);
};
class selectTorso : selectHead {
idc = 302;
x = "18.4 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.4 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "2.2 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "4.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
action = QUOTE(GVAR(selectedBodyPart) = 1;);
};
class selectLeftArm: selectHead{
idc = 303;
x = "17.4 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.9 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.1 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "4.3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
action = QUOTE(GVAR(selectedBodyPart) = 3;);
};
class selectRightArm: selectLeftArm{
idc = 304;
x = "20.6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(GVAR(selectedBodyPart) = 2;);
};
class selectLeftLeg :selectHead {
idc = 305;
x = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "9.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "1.1 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
action = QUOTE(GVAR(selectedBodyPart) = 5;);
};
class selectRightLeg :selectLeftLeg {
idc = 306;
x = "19.6 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
action = QUOTE(GVAR(selectedBodyPart) = 4;);
};
class TriageTextBottom: HeaderName {
idc = 2000;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "16.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
colorText[] = {1, 1, 1.0, 1};
colorBackground[] = {0,0.0,0.0,0.7};
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
text = "";
};
// Right side
class InjuryList: ACE_gui_listBoxBase {
idc = 213;
x = "25.66 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "5.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
rowHeight = 0.03;
colorBackground[] = {0, 0, 0, 0.2};
colorText[] = {1,1, 1, 1.0};
colorScrollbar[] = {0.95, 0.95, 0.95, 1};
colorSelect[] = {0.95, 0.95, 0.95, 1};
colorSelect2[] = {0.95, 0.95, 0.95, 1};
colorSelectBackground[] = {0, 0, 0, 0.0};
colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.5};
};
// bottom
class ActivityLogHeader: CatagoryLeft {
x = "1 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "18.6 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
colorText[] = {0.6, 0.7, 1.0, 1};
colorBackground[] = {0,0,0,0};
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
text = CSTRING(ACTIVITY_LOG);
};
class QuickViewHeader: ActivityLogHeader {
x = "19.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
text = CSTRING(QUICK_VIEW);
};
class LineBottomHeaders: Line {
y = "19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
};
class ActivityLog: InjuryList {
idc = 214;
//style = 16;
//type = 102;
//rows=1;
colorBackground[] = {0, 0, 0, 0};
x = "1.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "(19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))";
w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
//colorSelectBackground[] = {0, 0, 0, 0.0};
//colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0};
//columns[] = {0.0, 0.08};
//canDrag=true;
//arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
// arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
drawSideArrows = 0;
//idcLeft = -1;
//idcRight = -1;
};
class QuikViewLog: InjuryList {
idc = 215;
//style = 16;
//type = 102;
//rows=1;
colorBackground[] = {0, 0, 0, 0};
x = "21.5 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "(19.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2))";
w = "18.5 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "6.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.7)";
colorSelectBackground[] = {0, 0, 0, 0.0};
colorSelectBackground2[] = {0.0, 0.0, 0.0, 0.0};
//columns[] = {0.0, 0.08};
//canDrag=true;
//arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)";
// arrowFull = "#(argb,8,8,3)color(1,1,1,1)";
drawSideArrows = 0;
//idcLeft = -1;
//idcRight = -1;
};
class selectTriageStatus: ACE_gui_buttonBase {
idc = 2001;
x = "13.33 * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)";
y = "16.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
w = "12.33 * (((safezoneW / safezoneH) min 1.2) / 40)";
h = "1.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.4)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.0)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.0)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.0)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard););
};
class selectTriageStatusNone: selectTriageStatus {
idc = 2002;
x = 0;
y = 0;
w = 0;
h = 0;
text = ECSTRING(medical_treatment,Triage_Status_None);
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),0)] call FUNC(setTriageStatus););
};
class selectTriageStatusMinor: selectTriageStatus {
idc = 2003;
x = 0;
y = 0;
w = 0;
h = 0;
text = ECSTRING(medical_treatment,Triage_Status_Minor);
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureOver = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0,0.5,0,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0,0.5,0,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),1)] call FUNC(setTriageStatus););
};
class selectTriageStatusDelayed: selectTriageStatus {
idc = 2004;
x = 0;
y = 0;
w = 0;
h = 0;
text = ECSTRING(medical_treatment,Triage_Status_Delayed);
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureOver = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0.77,0.51,0.08,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),2)] call FUNC(setTriageStatus););
};
class selectTriageStatusImmediate: selectTriageStatus {
idc = 2005;
x = 0;
y = 0;
w = 0;
h = 0;
text = ECSTRING(medical_treatment,Triage_Status_Immediate);
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureOver = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureFocused = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTexturePressed = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
animTextureDefault = "#(argb,8,8,3)color(1,0.2,0.2,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),3)] call FUNC(setTriageStatus););
};
class selectTriageStatusDeceased: selectTriageStatus {
idc = 2006;
x = 0;
y = 0;
w = 0;
h = 0;
text = ECSTRING(medical_treatment,Triage_Status_Deceased);
style = ST_CENTER;
size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
animTextureNormal = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDisabled = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureOver = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureFocused = "#(argb,8,8,3)color(0,0,0,0.9)";
animTexturePressed = "#(argb,8,8,3)color(0,0,0,0.9)";
animTextureDefault = "#(argb,8,8,3)color(0,0,0,0.9)";
action = QUOTE([] call FUNC(handleUI_dropDownTriageCard); [ARR_2(GVAR(INTERACTION_TARGET),4)] call FUNC(setTriageStatus););
};
};
};

View File

@ -1,6 +0,0 @@
class CfgInGameUI {
class PeripheralVision {
bloodTexture = ""; //"A3\ui_f\data\igui\cfg\PeripheralVision\bloodTexture_ca.paa";
};
};

Some files were not shown because too many files have changed in this diff Show More