Example #1
0
    private void InitLightFsm()
    {
        _testOpen = new QdisaState("Open");

        _testOpen.OnEnter += (IState state) =>
        {
            Debug.Log("灯打开了");
        };
        _testOpen.OnUpdate += (float f) =>
        {
            Debug.Log("灯在打开的状态");
        };
        _testOpen.OnExit += (IState state) =>
        {
            Debug.Log("灯退出了打开的状态");
        };

        _testClose          = new QdisaState("Close");
        _testClose.OnEnter += (IState state) =>

        {
            Debug.Log("灯进入熄灭状态");
        };
        _testClose.OnUpdate += (float f) =>
        {
            Debug.Log("灯在熄灭的状态");
        };
        _testClose.OnExit += (IState state) =>
        {
            Debug.Log("灯退出了熄灭的状态");
        };
        _open2Close          = new QdisaTransition("Open2Close", _testOpen, _testClose);
        _open2Close.OnCheck += () => {
            return(_isClose);
        };
        _open2Close.OnTransition += () => {
            return(TestTransition());
        };
        _testOpen.AddTransition(_open2Close);

        _close2Open          = new QdisaTransition("Close2Open", _testClose, _testOpen);
        _close2Open.OnCheck += () =>
        {
            return(!_isClose);
        };
        _close2Open.OnTransition += () =>
        {
            return(TestTransition());
        };
        _testClose.AddTransition(_close2Open);

        testMachine = new QdisaStateMachine("Root", _testOpen);

        //testMachine.AddState(_testOpen);
        //testMachine.AddState(_testClose);
    }
Example #2
0
    private void InitFsm()
    {
        #region 进入画面的状态
        enterState          = new QdisaState("Enter");
        enterState.OnEnter += (IState state) =>
        {
            //生成大象
            elephantTrans = PoolControl.Instance.SpawnElephant();
            //大象到达预定位置
            elephantControl = elephantTrans.GetComponent <ElephantControl>();

            if (elephantControl != null)
            {
                elephantControl.OnEnterCompleted += SetIs2Idle;
            }
        };
        enterState.OnExit += (IState state) =>
        {
            Debug.Log("我在执行");
            Is2Enter = false;
            elephantControl.OnEnterCompleted -= SetIs2Idle;
        };
        #endregion

        #region 无人时的休闲状态
        idleState          = new QdisaState("Idle");
        idleState.OnEnter += (IState state) =>
        {
            Debug.Log("我执行了吗");
            trackerControl.OnClick += SetIs2Paint;
            //进入无人状态
        };
        idleState.OnUpdate += (float f) =>
        {
            //无人状态做啥
            Debug.Log("我在无人状态");
        };
        idleState.OnExit += (IState state) =>
        {
            Is2Idle = false;
            //退出无人状态
            trackerControl.OnClick -= SetIs2Paint;
        };
        #endregion

        #region 喷涂状态
        paintState          = new QdisaState("Paint");
        paintState.OnEnter += (IState state) =>
        {
            Debug.Log("我在喷涂状态");
            //大象动画停止并旋转展示
            elephantControl.RotateAction();
            //大象旋转完成则到退出状态
            elephantControl.OnDisplayCompleted += SetIs2Exit;
            //喷枪运行
            trackerControl.OnClick         += nozzlePainter.Spary;
            nozzlePainter.ColorEventHandle += uIControl.ChangeBorderColor;

            //添加大象的运动
            //elephantControl.OnDisplayCompleted += SetIs2Walk;
        };
        paintState.OnUpdate += (float f) =>
        {
            //喷绘状态做啥
            Debug.Log("我在喷绘状态");
        };
        paintState.OnExit += (IState state) =>
        {
            elephantTrans.parent = null;
            //退出喷绘状态
            Is2Paint = false;
            //喷枪结束
            trackerControl.OnClick         -= nozzlePainter.Spary;
            nozzlePainter.ColorEventHandle -= uIControl.ChangeBorderColor;
            //取消大象的运动
            elephantControl.OnDisplayCompleted -= SetIs2Exit;
        };
        #endregion

        #region 退出状态
        exitState          = new QdisaState("Exit");
        exitState.OnEnter += (IState state) =>
        {
            //进入褪色状态
            if (elephantControl != null)
            {
                elephantControl.ExitShow();
                //elephantControl.OnExitCompleted += () =>
                //{
                //    PoolControl.Instance.DespawnElephant(elephantTrans);
                //};
            }
        };
        exitState.OnUpdate += (float f) =>
        {
            //褪色状态干啥
            SetIs2Enter();
        };
        exitState.OnExit += (IState state) =>
        {
            //退出褪色状态
            Is2Exit = false;
        };
        #endregion

        #region 状态过渡初始化
        //进入状态到站立状态
        enter2idle          = new QdisaTransition("enter2idle", enterState, idleState);
        enter2idle.OnCheck += () =>
        {
            return(Is2Idle);
        };
        enterState.AddTransition(enter2idle);

        //站立状态到喷绘状态
        idle2paint          = new QdisaTransition("Idle2paint", idleState, paintState);
        idle2paint.OnCheck += () =>
        {
            return(Is2Paint);
        };
        idleState.AddTransition(idle2paint);

        //喷涂状态到退出状态
        paint2exit          = new QdisaTransition("paint2exit", paintState, exitState);
        paint2exit.OnCheck += () =>
        {
            return(Is2Exit);
        };
        paintState.AddTransition(paint2exit);

        //退出状态到进入状态
        exit2enter          = new QdisaTransition("exit2enter", exitState, enterState);
        exit2enter.OnCheck += () =>
        {
            return(Is2Enter);
        };
        exitState.AddTransition(exit2enter);
        #endregion
        elephantMachine = new QdisaStateMachine("Root", exitState);
    }