Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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");
        }
Ejemplo n.º 3
0
        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);
        }