class GVAR(stateMachine) { list = "allUnits select {local _x}"; skipNull = 1; class Initial { class Injured { targetState = "Injured"; condition = QUOTE(call FUNC(isInjured)); }; class HealUnit { targetState = "HealUnit"; condition = QUOTE((call FUNC(isSafe)) && {call FUNC(wasRequested)}); }; }; class Injured { #ifdef DEBUG_MODE_FULL onState = "systemChat format [""%1 is injured"", _this]"; #endif class InSafety { targetState = "Safe"; condition = QUOTE(call FUNC(isSafe)); }; }; class Safe { #ifdef DEBUG_MODE_FULL onState = "systemChat format [""%1 is injured, but safe"", _this]"; #endif class RequestMedic { targetState = "HealSelf"; condition = QUOTE(call FUNC(canRequestMedic)); onTransition = QUOTE(call FUNC(requestMedic)); }; class HealSelf { targetState = "HealSelf"; condition = "true"; }; }; class HealSelf { onState = QUOTE(call FUNC(healSelf)); onStateLeaving = QUOTE(_this setVariable [ARR_2(QUOTE(QGVAR(treatmentOverAt)),nil)]); class Initial { // Go back to initial state when done healing targetState = "Initial"; condition = QUOTE( \ !(call FUNC(isInjured)) \ && {_this getVariable [ARR_2(QUOTE(QGVAR(treatmentOverAt)),CBA_missionTime)] <= CBA_missionTime} \ ); }; class Injured { // Stop treating when it's no more safe targetState = "Injured"; condition = QUOTE( \ !(call FUNC(isSafe)) \ && {_this getVariable [ARR_2(QUOTE(QGVAR(treatmentOverAt)),CBA_missionTime)] <= CBA_missionTime} \ ); }; }; class HealUnit { onState = QUOTE(call FUNC(healUnit)); onStateLeaving = QUOTE(_this setVariable [ARR_2(QUOTE(QGVAR(treatmentOverAt)),nil)]); class Initial { // Go back to initial state when done healing or it's no more safe to treat targetState = "Initial"; condition = QUOTE( \ !((call FUNC(wasRequested)) && {call FUNC(isSafe)}) \ && {_this getVariable [ARR_2(QUOTE(QGVAR(treatmentOverAt)),CBA_missionTime)] <= CBA_missionTime} \ ); }; class Injured { // Treating yourself has priority targetState = "Injured"; condition = QUOTE( \ (call FUNC(isInjured)) \ && {_this getVariable [ARR_2(QUOTE(QGVAR(treatmentOverAt)),CBA_missionTime)] <= CBA_missionTime} \ ); }; }; };