public static void LiquidStateSyncTest() { var config = StateMachineFactory.CreateConfiguration <State, Trigger>(); config.ForState(State.Off) .OnEntry(() => Console.WriteLine("OnEntry of Off")) .OnExit(() => Console.WriteLine("OnExit of Off")) .PermitReentry(Trigger.TurnOff) .Permit(Trigger.Ring, State.Ringing, () => { Console.WriteLine("Attempting to ring"); }) .Permit(Trigger.Connect, State.Connected, () => { Console.WriteLine("Connecting"); }); var connectTriggerWithParameter = config.SetTriggerParameter <string>(Trigger.Connect); config.ForState(State.Ringing) .OnEntry(() => Console.WriteLine("OnEntry of Ringing")) .OnExit(() => Console.WriteLine("OnExit of Ringing")) .PermitDynamic(connectTriggerWithParameter, name => DynamicState.Create(name == "Alice" ? State.Connected : State.Off), (trigger, name) => { if (trigger.Destination == State.Connected) { Console.WriteLine("Attempting to connect to " + name); } else { Console.WriteLine("Hanging up on " + name); } }) .Permit(Trigger.Talk, State.Talking, () => { Console.WriteLine("Attempting to talk"); }); config.ForState(State.Connected) .OnEntry(() => Console.WriteLine("AOnEntry of Connected")) .OnExit(() => Console.WriteLine("AOnExit of Connected")) .PermitReentry(Trigger.Connect) .Permit(Trigger.Talk, State.Talking, () => { Console.WriteLine("Attempting to talk"); }) .Permit(Trigger.TurnOff, State.Off, () => { Console.WriteLine("Turning off"); }); config.ForState(State.Talking) .OnEntry(() => Console.WriteLine("OnEntry of Talking")) .OnExit(() => Console.WriteLine("OnExit of Talking")) .Permit(Trigger.TurnOff, State.Off, () => { Console.WriteLine("Turning off"); }) .PermitDynamic(Trigger.Ring, () => DynamicState.Create(State.Ringing), () => { Console.WriteLine("Attempting to ring"); }); var machine = StateMachineFactory.Create(State.Ringing, config); machine.Fire(Trigger.Talk); machine.Fire(Trigger.Ring); machine.Fire(connectTriggerWithParameter, "Alice"); machine.Fire(Trigger.TurnOff); machine.Fire(Trigger.Ring); machine.Fire(connectTriggerWithParameter, "Bob"); }
private static void SyncMachineExample() { var config = StateMachineFactory.CreateConfiguration <State, Trigger>(); config.ForState(State.Off) .OnEntry(() => Console.WriteLine("OnEntry of Off")) .OnExit(() => Console.WriteLine("OnExit of Off")) .PermitReentry(Trigger.TurnOff) .Permit(Trigger.Ring, State.Ringing, () => { Console.WriteLine("Attempting to ring"); }) .Permit(Trigger.Connect, State.Connected, () => { Console.WriteLine("Connecting"); }); var connectTriggerWithParameter = config.SetTriggerParameter <string>(Trigger.Connect); config.ForState(State.Ringing) .OnEntry(() => Console.WriteLine("OnEntry of Ringing")) .OnExit(() => Console.WriteLine("OnExit of Ringing")) .Permit(connectTriggerWithParameter, State.Connected, name => { Console.WriteLine("Attempting to connect to {0}", name); }) .Permit(Trigger.Talk, State.Talking, () => { Console.WriteLine("Attempting to talk"); }); config.ForState(State.Connected) .OnEntry(() => Console.WriteLine("AOnEntry of Connected")) .OnExit(() => Console.WriteLine("AOnExit of Connected")) .PermitReentry(Trigger.Connect) .Permit(Trigger.Talk, State.Talking, () => { Console.WriteLine("Attempting to talk"); }) .Permit(Trigger.TurnOff, State.Off, () => { Console.WriteLine("Turning off"); }); config.ForState(State.Talking) .OnEntry(() => Console.WriteLine("OnEntry of Talking")) .OnExit(() => Console.WriteLine("OnExit of Talking")) .Permit(Trigger.TurnOff, State.Off, () => { Console.WriteLine("Turning off"); }) .Permit(Trigger.Ring, State.Ringing, () => { Console.WriteLine("Attempting to ring"); }); var machine = StateMachineFactory.Create(State.Ringing, config); machine.Fire(Trigger.Talk); machine.Fire(Trigger.Ring); machine.Fire(connectTriggerWithParameter, "John Doe"); }
void Configure() { var config = StateMachineFactory.CreateConfiguration <BlackKnightState, BlackKnightTrigger>(); config.ForState(BlackKnightState.Idle).Permit(BlackKnightTrigger.Patrol, BlackKnightState.Patroling); config.ForState(BlackKnightState.Patroling).OnEntry(() => { Debug.Log("patrolling"); playerTansform = null; StartFind(); StartPatrol(); }) .OnExit(() => { StopFind(); StopPatrol(); }) .Permit(BlackKnightTrigger.Found, BlackKnightState.Following); config.ForState(BlackKnightState.Following).OnEntry(() => { StartFollow(); }) .OnExit(() => { StopFollow(); }) .Permit(BlackKnightTrigger.FollowFail, BlackKnightState.Patroling) .Permit(BlackKnightTrigger.Touch, BlackKnightState.Attcking) .Permit(BlackKnightTrigger.Confrontation, BlackKnightState.Confrontation); config.ForState(BlackKnightState.Attcking).OnEntry(() => { StartAutoAttack(); //Attack(); }).OnExit(() => { StopAutoAttack(); //UnAttack(); }) .PermitIf(() => playerTansform != null, BlackKnightTrigger.UnTouch, BlackKnightState.Confrontation) //.Permit(BlackKnightTrigger.UnTouch, BlackKnightState.Patroling) ; fsm = StateMachineFactory.Create(BlackKnightState.Idle, config); config.ForState(BlackKnightState.Confrontation) .OnEntry(() => { ac.lockController.Lock(playerTansform.gameObject); //ac.camCtrl.Lock(playerTansform.gameObject); StartConfrontatoin(); }) .OnExit(() => { if (ac.lockController.lockState == true && playerTansform == null) { ac.lockController.UnLock(); } //if (ac.camCtrl.lockState == true && playerTansform == null) //{ // ac.camCtrl.UnLock(); //} StopConfrontatation(); }) .Permit(BlackKnightTrigger.Touch, BlackKnightState.Attcking) .Permit(BlackKnightTrigger.Go, BlackKnightState.Following); }