Click or drag to resize

SimpleStateMachineTonBeforeTransition Event

Event that fires before the state machine has changed its state.

Namespace:  KSPDev.ProcessingUtils
Assembly:  KSPDev_Utils.2.5 (in KSPDev_Utils.2.5.dll) Version: 2.5 for KSP v1
Syntax
C#
public event SimpleStateMachineTOnStateChangeHandler onBeforeTransition
Request Example View Source

Value

Type: KSPDev.ProcessingUtilsSimpleStateMachineTOnStateChangeHandler
Remarks
The event is fired before the new state has been applied to the state machine and the transition callbacks are called, but after the transition validation is done. I.e. this event won't trigger if the transition failed due to the constraints.
Examples
class SimpleStateMachineFree {
  public enum State {
    One,
    Two,
    Three
  };

  public void TestMachine() {
    var sm = new SimpleStateMachine<State>(strict: false);
    sm.AddStateHandlers(
        State.One,
        enterHandler: oldState => Debug.Log("Now in state ONE"),
        leaveHandler: newState => Debug.LogFormat("Going into state: {0}", newState));
    sm.onBeforeTransition += (from, to) => Debug.LogFormat(
        "Before move: current={0}, new={1}",
        DbgFormatter.Nullable(sm.currentState), DbgFormatter.Nullable(to));
    sm.onAfterTransition += (from, to) => Debug.LogFormat(
        "After move: old={0}, current={1}",
        DbgFormatter.Nullable(from), DbgFormatter.Nullable(sm.currentState));

    sm.currentState = State.One;  // Start the machine.
    // Logs:
    // Now in state ONE
    // Before move: current=NULL, new=One
    // After move: old=NULL, current=One

    sm.currentState = State.Two;
    // Logs:
    // Going into state: Two
    // Before move: current=One, new=Two
    // After move: old=One, current=Two

    sm.currentState = State.Three;
    // Logs:
    // Before move: current=Two, new=Three
    // After move: old=Two, current=Three

    sm.currentState = null;  // Stop the machine.
    // Logs:
    // Before move: current=Three, new=NULL
    // After move: old=Three, current=NULL
  }
}
See Also