private void MakeFSM() { mFSMSystem = new SoldierFSMSystem(); SoldierIdleState idleState = new global::SoldierIdleState(mFSMSystem, this); idleState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase); SoldierChaseState chaseState = new global::SoldierChaseState(mFSMSystem, this); chaseState.AddTransition(SoldierTransition.NoEnemy_LostEnemy, SoldierStateID.Idle); chaseState.AddTransition(SoldierTransition.CanAttack, SoldierStateID.Attack); SoldierAttackState attactState = new global::SoldierAttackState(mFSMSystem, this); attactState.AddTransition(SoldierTransition.NoEnemy_LostEnemy, SoldierStateID.Idle); attactState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase); //mFSMSystem.AddState(idleState); //mFSMSystem.AddState(chaseState); //mFSMSystem.AddState(attactState); mFSMSystem.AddState(idleState, chaseState, attactState); }
private void MakeFSM() { mFSMSystem = new SoldierFSMSystem(); SoldierFSMState standbyState = new StateSoldierStandby(mFSMSystem, this); standbyState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.ChaseState); SoldierFSMState chaseState = new StateSoldierChase(mFSMSystem, this); chaseState.AddTransition(SoldierTransition.DonotSeeEnemy, SoldierStateID.StandbyState); chaseState.AddTransition(SoldierTransition.EnemyInTheAttackRange, SoldierStateID.AttackState); SoldierFSMState attackState = new StateSoldierAttack(mFSMSystem, this); attackState.AddTransition(SoldierTransition.DonotSeeEnemy, SoldierStateID.StandbyState); attackState.AddTransition(SoldierTransition.EnemyOutOfTheAttackRange, SoldierStateID.ChaseState); mFSMSystem.AddState(standbyState); mFSMSystem.AddState(chaseState); mFSMSystem.AddState(attackState); }
private void MakeFsm() { Fsm = new SoldierFSMSystem(); SoldierIdleState idle = new SoldierIdleState(Fsm, this); idle.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase); SoldierChaseState chase = new SoldierChaseState(Fsm, this); chase.AddTransition(SoldierTransition.NoEnemy, SoldierStateID.Idle); chase.AddTransition(SoldierTransition.CanAttack, SoldierStateID.Attack); SoldierAttackState attack = new SoldierAttackState(Fsm, this); attack.AddTransition(SoldierTransition.NoEnemy, SoldierStateID.Idle); attack.AddTransition(SoldierTransition.SeeEnemy, SoldierStateID.Chase); Fsm.AddState(idle, chase, attack); }
private void MakeFSM() { mFSMSystem = new SoldierFSMSystem(); SoldierIdleState idleState = new SoldierIdleState(mFSMSystem, this); idleState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateType.Chase); SoldierChaseState chaseState = new SoldierChaseState(mFSMSystem, this); chaseState.AddTransition(SoldierTransition.NoEnemy, SoldierStateType.Idle); chaseState.AddTransition(SoldierTransition.CanAttack, SoldierStateType.Attack); SoldierAttackState attackState = new SoldierAttackState(mFSMSystem, this); attackState.AddTransition(SoldierTransition.NoEnemy, SoldierStateType.Idle); attackState.AddTransition(SoldierTransition.SeeEnemy, SoldierStateType.Chase); mFSMSystem.AddState(idleState, chaseState, attackState); }
/// <summary> /// 设置切换映射关系 /// </summary> /// <param name="mapDic">切换关系列表</param> /// <param name="triggerFuncDic">节点具体行为列表</param> public void SetStateMappingConfig(Dictionary <SoldierStateID, List <SoldierStateID> > mapDic, Dictionary <SoldierTriggerID, Func <SoldierFSMSystem, bool> > triggerFuncDic) { if (mapDic == null) { return; } foreach (var kv in mapDic) { var keyType = SoldierFSMFactory.GetStateTypeByStateId(kv.Key); var keyStateInvoke = (SoldierFSMState)keyType.InvokeMember("", BindingFlags.Public | BindingFlags.CreateInstance, null, null, null); foreach (var mapStateId in kv.Value) { // 设置映射关系 keyStateInvoke.AddMappingTrigger(SoldierFSMFactory.GetTriggerByStateId(mapStateId), triggerFuncDic[SoldierFSMFactory.GetTriggerByStateId(mapStateId)]); } // 添加状态 fsm.AddState(keyStateInvoke); } }