ACE3/addons/medical/ACE_Medical_StateMachine.hpp

100 lines
3.5 KiB
C++
Raw Normal View History

2016-06-30 21:43:25 +00:00
class ACE_Medical_StateMachine {
class Default {
2016-07-07 09:46:55 +00:00
onState = QUOTE(DFUNC(handleStateDefault));
2016-06-30 21:43:25 +00:00
class Injury {
targetState = "Injured";
events[] = {QGVAR(TakenInjury)};
2016-06-30 21:43:25 +00:00
};
class CriticalInjuryOrVitals {
targetState = "Unconscious";
events[] = {QGVAR(InjuryCritical), QGVAR(CriticalVitals)};
2016-06-30 21:43:25 +00:00
};
class FatalInjury {
targetState = "FatalInjury";
events[] = {QGVAR(InjuryFatal)};
2016-06-30 21:43:25 +00:00
};
};
class Injured {
2016-07-07 09:46:55 +00:00
onState = QUOTE(DFUNC(handleStateInjured));
2016-06-30 21:43:25 +00:00
class FullHeal {
targetState = "Default";
events[] = {QGVAR(FullHeal)};
2016-06-30 21:43:25 +00:00
};
class LastWoundTreated {
targetState = "Default";
events[] = {QGVAR(LastWoundTreated)};
2016-06-30 21:43:25 +00:00
};
class CriticalInjuryOrVitals {
targetState = "Unconscious";
events[] = {QGVAR(InjuryCritical), QGVAR(CriticalVitals)};
2016-06-30 21:43:25 +00:00
};
class FatalVitals {
targetState = "CardiacArrest";
events[] = {QGVAR(FatalVitals)};
};
class FatalInjury {
targetState = "FatalInjury";
events[] = {QGVAR(InjuryFatal)};
2016-06-30 21:43:25 +00:00
};
};
class Unconscious {
2016-07-07 09:46:55 +00:00
onState = QUOTE(DFUNC(handleStateUnconscious));
2016-07-07 10:57:21 +00:00
onStateEntered = QUOTE(DFUNC(enteredUnconsciousState));
onStateLeaving = "_this setVariable ['ACE_isUnconscious', false, true];";
2016-06-30 21:43:25 +00:00
class WakeUpFromKnockDown {
targetState = "Injured";
condition = QUOTE(_this call FUNC(hasStableVitals));
events[] = {QGVAR(MinUnconsciousTimer)};
2016-06-30 21:43:25 +00:00
};
class WakeUpStable {
targetState = "Injured";
condition = "unitUnconsciousTimer >= MinUnconsciousTimer";
events[] = {QGVAR(VitalsWentStable)};
2016-06-30 21:43:25 +00:00
};
class FatalTransitions {
targetState = "CardiacArrest";
events[] = {QGVAR(FatalVitals), QGVAR(UnconsciousTimerRanOut)};
2016-06-30 21:43:25 +00:00
};
class FatalInjury {
targetState = "FatalInjury";
events[] = {QGVAR(InjuryFatal)};
2016-06-30 21:43:25 +00:00
};
};
class FatalInjury {
// Transition state for handling instant death
2016-11-07 22:46:10 +00:00
// This state raises the next transition in the same frame
onStateEntered = QUOTE(DFUNC(enteredStateFatalInjury));
class SecondChance {
2016-11-07 22:46:10 +00:00
events[] = {QGVAR(FatalInjuryInstantTransition)};
targetState = "CardiacArrest";
2016-11-13 21:27:40 +00:00
condition = QUOTE(GVAR(fatalInjuryCondition) > 0);
onTransition = QUOTE(DFUNC(transitionSecondChance));
2016-06-30 21:43:25 +00:00
};
class Death {
2016-11-07 22:46:10 +00:00
events[] = {QGVAR(FatalInjuryInstantTransition)};
2016-06-30 21:43:25 +00:00
targetState = "Dead";
condition = "true";
2016-06-30 21:43:25 +00:00
};
};
class CardiacArrest {
onStateEntered = QUOTE(DFUNC(enteredStateCardiacArrest));
onStateLeaving = '_this setVariable [QGVAR(cardiacArrestStart), nil]';
class TimerRanOut {
2016-06-30 21:43:25 +00:00
targetState = "Dead";
condition = QUOTE(DFUNC(conditionCardiacArrestTimer));
2016-06-30 21:43:25 +00:00
};
class Reanimated {
targetState = "Unconscious";
events[] = {QGVAR(CPRSucceeded)};
};
class Execution {
targetState = "Dead";
condition = QUOTE(DFUNC(conditionExecutionDeath));
events[] = {QGVAR(InjuryFatal)};
};
};
class Dead {
onStateEntered = "_this setDamage 1"; // killing a unit also exits the state machine for this unit
2016-06-30 21:43:25 +00:00
};
};