// Manual transitions applied to this statemachine // - medical_fnc_handleRespawn:18 class ACE_Medical_StateMachine { list = "allUnits select {local _x}"; skipNull = 1; class Default { onState = QUOTE(DFUNC(handleStateDefault)); class Injury { targetState = "Injured"; events[] = {QGVAR(Injury)}; }; class CriticalInjuryOrVitals { targetState = "Unconscious"; events[] = {QGVAR(CriticalInjury), QGVAR(CriticalVitals), QGVAR(knockOut)}; }; class FatalVitals { targetState = "CardiacArrest"; events[] = {QGVAR(FatalVitals)}; }; class FatalInjury { targetState = "FatalInjury"; events[] = {QGVAR(FatalInjury)}; }; }; class Injured { onState = QUOTE(DFUNC(handleStateInjured)); class FullHeal { targetState = "Default"; events[] = {QGVAR(FullHeal)}; }; class CriticalInjuryOrVitals { targetState = "Unconscious"; events[] = {QGVAR(CriticalInjury), QGVAR(CriticalVitals), QGVAR(knockOut)}; }; class FatalVitals { targetState = "CardiacArrest"; events[] = {QGVAR(FatalVitals)}; }; class FatalInjury { targetState = "FatalInjury"; events[] = {QGVAR(FatalInjury)}; }; }; class Unconscious { onState = QUOTE(DFUNC(handleStateUnconscious)); onStateEntered = QUOTE([ARR_2(_this,(true))] call FUNC(setUnconsciousStatemachine)); class DeathAI { targetState = "Dead"; condition = QUOTE(!isPlayer _this && {GVAR(unconsciousConditionAI)}); }; class WakeUp { targetState = "Injured"; condition = QUOTE(_this call FUNC(hasStableVitals)); events[] = {QGVAR(WakeUp)}; onTransition = QUOTE([ARR_2(_this,(false))] call FUNC(setUnconsciousStatemachine)); }; class FatalTransitions { targetState = "CardiacArrest"; events[] = {QGVAR(FatalVitals)}; }; class FatalInjury { targetState = "FatalInjury"; events[] = {QGVAR(FatalInjury)}; }; }; class FatalInjury { // Transition state for handling instant death // This state raises the next transition in the same frame onStateEntered = QUOTE(DFUNC(enteredStateFatalInjury)); class DeathAI { events[] = {QGVAR(FatalInjuryInstantTransition)}; targetState = "Dead"; condition = QUOTE(!isPlayer _this && {GVAR(fatalInjuryConditionAI)}); }; class SecondChance { events[] = {QGVAR(FatalInjuryInstantTransition)}; targetState = "CardiacArrest"; condition = QUOTE(GVAR(fatalInjuryCondition) > 0); onTransition = QUOTE(DFUNC(transitionSecondChance)); }; class Death { events[] = {QGVAR(FatalInjuryInstantTransition)}; targetState = "Dead"; condition = "true"; }; }; class CardiacArrest { onStateEntered = QUOTE(DFUNC(enteredStateCardiacArrest)); onStateLeaving = QUOTE(DFUNC(leftStateCardiacArrest)); class Timeout { targetState = "Dead"; condition = QUOTE(DFUNC(conditionCardiacArrestTimer)); }; class Reanimation { targetState = "Unconscious"; events[] = {QGVAR(CPRSucceeded)}; }; class Execution { targetState = "Dead"; condition = QUOTE(DFUNC(conditionExecutionDeath)); events[] = {QGVAR(FatalInjury)}; }; }; class Dead { onStateEntered = "_this setDamage 1"; // killing a unit also exits the state machine for this unit }; };