// Use this for initialization
    void Start()
    {
        m_elefantmovement = GetComponent <ElephantMovement>();

        foreach (var collisionNotfier in m_trunkRoot.GetComponentsInChildren <CollisionNotifier>())
        {
            collisionNotfier.OnTriggerStayNotification += OnTriggerStayNotification;
        }

        m_elephantControl = GetComponent <ElephantControl>();
    }
Пример #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);
    }
 // Use this for initialization
 void Start()
 {
     m_elephantControl = GetComponent <ElephantControl>();
 }