void MainWindow_Loaded(object sender, RoutedEventArgs args)
        {
            _stateMachine     = new ReactiveStateMachine <VisibilityStates>("VisibilityStates", VisibilityStates.Collapsed);
            _mouseDownTrigger = Observable.FromEventPattern <MouseEventArgs>(this, "MouseDown").Select(evt => evt.EventArgs);
            _mouseUpTrigger   = new Trigger <MouseEventArgs>(Observable.FromEventPattern <MouseEventArgs>(this, "MouseUp").Select(evt => evt.EventArgs));



            _stateMachine.AddTransition(VisibilityStates.Collapsed, VisibilityStates.FadingIn, _mouseDownTrigger, e =>
            {
                Console.WriteLine("MouseDown");
            });

            _stateMachine.AddTransition(VisibilityStates.FadingIn, VisibilityStates.Visible, _mouseUpTrigger, e =>
            {
                Console.WriteLine("MouseUp");
            });

            _stateMachine.AddTransition(VisibilityStates.Visible, VisibilityStates.Collapsed, _mouseDownTrigger, e =>
            {
                Console.WriteLine("MouseDown");
            });

            _stateMachine.AddEntryAction(VisibilityStates.Visible, () => Console.WriteLine("Entering Visible State"));
            _stateMachine.AddExitAction(VisibilityStates.Visible, () => Console.WriteLine("Exiting Visible State"));

            _stateMachine.Start();
        }
Example #2
0
    void Start()
    {
        StateA stateA = new StateA();
        StateB stateB = new StateB();

        ReactiveStateMachine <Triggers, IState> rsm;

        rsm = new ReactiveStateMachine <Triggers, IState>();

        rsm.OnEnter(stateA).Subscribe(e => Debug.Log(((StateA)e).aString)).AddTo(this);
        rsm.OnEnter(stateB).Subscribe(e => Debug.Log(((StateB)e).anInt)).AddTo(this);

        rsm.AddTransition(stateA, Triggers.TriggerB, stateB);
        rsm.AddTransition(stateB, Triggers.TriggerA, stateA);

        rsm.Start(stateA);

        rsm.Trigger(Triggers.TriggerA);
        rsm.Trigger(Triggers.TriggerB);
        rsm.Trigger(Triggers.TriggerC); //should not do anything
        rsm.Trigger(Triggers.TriggerB); //should not do anything
        rsm.Trigger(Triggers.TriggerA);



        /*
         * ReactiveStateMachine<Triggers, States> rsm2;
         * rsm2 = new ReactiveStateMachine<Triggers, States>();
         *
         * rsm2.AddTransition(States.StateA, Triggers.TriggerB, States.StateB);
         * rsm2.AddTransition(States.StateB, Triggers.TriggerA, States.StateA);
         *
         * rsm2.OnEnter(States.StateA).Subscribe(e => Debug.Log(e + " OnEnter"));
         * rsm2.OnExit(States.StateA).Subscribe(e => Debug.Log(e + " OnExit"));
         *
         * rsm2.OnEnter(States.StateB).Subscribe(e => Debug.Log(e + " OnEnter"));
         * rsm2.OnExit(States.StateB).Subscribe(e => Debug.Log(e + " OnExit"));
         *
         * rsm2.Start(States.StateB);
         *
         * rsm2.Trigger(Triggers.TriggerA);
         * rsm2.Trigger(Triggers.TriggerB);
         * rsm2.Trigger(Triggers.TriggerC); //should not do anything
         * rsm2.Trigger(Triggers.TriggerB); //should not do anything
         * rsm2.Trigger(Triggers.TriggerA);
         */
    }