Exemple #1
0
        protected override void InitFsm()
        {
            _fsm = new MainFsm(typeof(EBoolCondition), typeof(EFloatCondition));
            //创建默认
            var idle = new IdleState(_fsm, _fsm, "Idle");

            //设置Idle为默认
            _fsm.TransitionFactoty(_fsm.intoState, idle);
            //or By HelperMethod
            var idle2 = _fsm.FsmStateFactory("Idle2");
            //创建跑
            var run = new FsmState(_fsm, _fsm, "Run", () => Debug("I am going to run"), () => Debug("I dont run anymore"), () => Debug("I am runing"));

            //设置条件,如果速度大于0.1 且 在地面上,就run
            _fsm.TransitionFactoty(idle, run)
            .AddCondition(() => GetFloat(EFloatCondition.SpeedMagnitute) > 0.1f && GetBool(EBoolCondition.IsGrounded));
            //反之,速度<=0.1
            _fsm.TransitionFactoty(run, idle)
            .AddCondition(() => GetFloat(EFloatCondition.SpeedMagnitute) <= 0.1f && GetBool(EBoolCondition.IsGrounded));
            //创建飞,trigger为飞
            var flySubFsm = new SubFsm(_fsm, "FlyFsm");
            var tran      = new StateTransition(_fsm.anyState, flySubFsm, _fsm);

            //Anystate,Triggger为Fly,就进入Fly子状态机
            tran.AddCondition(() => GetTrigger(ETriggerCondition.Fly));
            //到地面上,就回到idle
            _fsm.TransitionFactoty(flySubFsm, idle)
            .AddCondition(() => GetBool(EBoolCondition.IsGrounded));
            //坠落,速度大于0.1
            var drop = new FsmState(_fsm, flySubFsm, "Drop", () => Debug("I am going to drop !"));

            flySubFsm.TransitionFactoty(flySubFsm.inState, drop)
            .AddCondition(() => GetFloat(EFloatCondition.SpeedMagnitute) > 0.1f);
            //回到地上,变为idle
            flySubFsm.TransitionFactoty(drop, flySubFsm.outState)
            .AddCondition(() => GetBool(EBoolCondition.IsGrounded));
            //状态机启动
            _fsm.StartOrRestart();
        }
Exemple #2
0
 public virtual void RemoveTrasition(StateTransition transition)
 {
     transitionList.Remove(transition);
 }
Exemple #3
0
 public void AddTransition(StateTransition transition)
 {
     transitionList.Add(transition);
 }