mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Medical Statemachine - Fix locality EH breaking current state (#7136)
* Medical Statemachine - Fix locality EH breaking current state * Handle Injured state * Update fnc_localityChangedEH.sqf
This commit is contained in:
parent
ec9e6c088b
commit
b8c45c0a57
@ -10,12 +10,6 @@ class Extended_PreInit_EventHandlers {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class Extended_PostInit_EventHandlers {
|
|
||||||
class ADDON {
|
|
||||||
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
class Extended_Respawn_EventHandlers {
|
class Extended_Respawn_EventHandlers {
|
||||||
class CAManBase {
|
class CAManBase {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
|
@ -10,6 +10,5 @@ PREP(handleStateInjured);
|
|||||||
PREP(handleStateUnconscious);
|
PREP(handleStateUnconscious);
|
||||||
PREP(leftStateCardiacArrest);
|
PREP(leftStateCardiacArrest);
|
||||||
PREP(localityChangedEH);
|
PREP(localityChangedEH);
|
||||||
PREP(localityTransfer);
|
|
||||||
PREP(resetStateDefault);
|
PREP(resetStateDefault);
|
||||||
PREP(transitionSecondChance);
|
PREP(transitionSecondChance);
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
#include "script_component.hpp"
|
|
||||||
|
|
||||||
[QGVAR(localityTransfer), LINKFUNC(localityTransfer)] call CBA_fnc_addEventHandler;
|
|
@ -1,7 +1,8 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
/*
|
/*
|
||||||
* Author: PabstMirror
|
* Author: PabstMirror
|
||||||
* Handles locality switch.
|
* Handles locality switch. Will also be called at unit init.
|
||||||
|
* Because state machine state is local only, when a unit transfers locality we need to manually transition to it's current state
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Unit <OBJECT>
|
* 0: Unit <OBJECT>
|
||||||
@ -19,15 +20,50 @@
|
|||||||
params ["_unit", "_isLocal"];
|
params ["_unit", "_isLocal"];
|
||||||
TRACE_2("localityChangedEH",_unit,_isLocal);
|
TRACE_2("localityChangedEH",_unit,_isLocal);
|
||||||
|
|
||||||
if (!alive _unit) exitWith {TRACE_1("dead", _this)};
|
if (!alive _unit) exitWith {};
|
||||||
|
|
||||||
if (!_isLocal) then {
|
|
||||||
// If locality changed, broadcast the last medical state
|
|
||||||
_unit setVariable [VAR_HEART_RATE, GET_HEART_RATE(_unit), true];
|
|
||||||
_unit setVariable [VAR_BLOOD_PRESS, _unit getVariable [VAR_BLOOD_PRESS, [80, 120]], true];
|
|
||||||
_unit setVariable [VAR_BLOOD_VOL, GET_BLOOD_VOLUME(_unit), true];
|
|
||||||
|
|
||||||
|
if (_isLocal) then {
|
||||||
private _currentState = [_unit, EGVAR(medical,STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState;
|
private _currentState = [_unit, EGVAR(medical,STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState;
|
||||||
TRACE_2("sending current state",_unit,_currentState);
|
TRACE_1("local",_currentState);
|
||||||
[QGVAR(localityTransfer), [_unit, _currentState], _unit] call CBA_fnc_targetEvent;
|
|
||||||
|
switch (true) do {
|
||||||
|
case (IN_CRDC_ARRST(_unit)): {
|
||||||
|
if (_currentState == "CardiacArrest") exitWith {};
|
||||||
|
_unit setVariable [VAR_CRDC_ARRST, false]; // force reset vars so setCardiacArrest can run (enteredStateCardiacArrest will also be called)
|
||||||
|
_unit setVariable [VAR_UNCON, false];
|
||||||
|
TRACE_1("manually changing state to CardiacArrest",_currentState);
|
||||||
|
[_unit, EGVAR(medical,STATE_MACHINE), _currentState, "CardiacArrest", {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition;
|
||||||
|
};
|
||||||
|
case (IS_UNCONSCIOUS(_unit)): {
|
||||||
|
if (_currentState == "Unconscious") exitWith {};
|
||||||
|
_unit setVariable [VAR_UNCON, false]; // force reset var so ace_medical_status_fnc_setUnconscious can run
|
||||||
|
TRACE_1("manually changing state to Unconscious",_currentState);
|
||||||
|
[_unit, EGVAR(medical,STATE_MACHINE), _currentState, "Unconscious", {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition;
|
||||||
|
};
|
||||||
|
case (IS_BLEEDING(_unit) || {IS_IN_PAIN(_unit)}): {
|
||||||
|
if (_currentState == "Injured") exitWith {};
|
||||||
|
TRACE_1("manually changing state to Injured",_currentState);
|
||||||
|
[_unit, EGVAR(medical,STATE_MACHINE), _currentState, "Injured", {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition;
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
// If locality transfers back and forth, we could be in an old state and should transfer back to default
|
||||||
|
if (_currentState == "Default") exitWith {};
|
||||||
|
TRACE_1("manually changing state to Default",_currentState);
|
||||||
|
[_unit, EGVAR(medical,STATE_MACHINE), _currentState, "Default", {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
// Not sure if this is even needed, idea is that on locality transfer we broadcast more up to date info
|
||||||
|
|
||||||
|
private _lastTimeUpdated = _unit getVariable [QEGVAR(medical_vitals,lastTimeUpdated), 1e99];
|
||||||
|
private _deltaT = CBA_missionTime - _lastTimeUpdated;
|
||||||
|
TRACE_1("not local",_deltaT);
|
||||||
|
if (_deltaT < 5) then {
|
||||||
|
// If locality changed and we have recently updated vitals, broadcast globally now
|
||||||
|
_unit setVariable [VAR_HEART_RATE, GET_HEART_RATE(_unit), true];
|
||||||
|
_unit setVariable [VAR_BLOOD_PRESS, _unit getVariable [VAR_BLOOD_PRESS, [80, 120]], true];
|
||||||
|
_unit setVariable [VAR_BLOOD_VOL, GET_BLOOD_VOLUME(_unit), true];
|
||||||
|
};
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
#include "script_component.hpp"
|
|
||||||
/*
|
|
||||||
* Author: PabstMirror
|
|
||||||
* Handles locality switch.
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* 0: Unit <OBJECT>
|
|
||||||
* 1: State <STRING>
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* [player, "Injured"] call ace_medical_statemachine_fnc_localityTransfer
|
|
||||||
*
|
|
||||||
* Public: No
|
|
||||||
*/
|
|
||||||
|
|
||||||
params ["_unit", "_currentState"];
|
|
||||||
TRACE_2("localityTransfer",_unit,_currentState);
|
|
||||||
|
|
||||||
private _oldState = [_unit, EGVAR(medical,STATE_MACHINE)] call CBA_statemachine_fnc_getCurrentState;
|
|
||||||
if (_oldState != _currentState) then {
|
|
||||||
TRACE_2("changing state",_oldState,_currentState);
|
|
||||||
[_unit, EGVAR(medical,STATE_MACHINE), _oldState, _currentState, {}, "LocalityChange"] call CBA_statemachine_fnc_manualTransition;
|
|
||||||
};
|
|
Loading…
Reference in New Issue
Block a user