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(); }
public virtual void RemoveTrasition(StateTransition transition) { transitionList.Remove(transition); }
public void AddTransition(StateTransition transition) { transitionList.Add(transition); }