public StateMachineActor(ActorBehaviour ab) { _actorBehaviour = ab; var idleState = new ActorIdleState(this, _actorBehaviour); var walkState = new ActorWalkState(this, _actorBehaviour); var fightState = new ActorFightState(this, _actorBehaviour); var dieState = new ActorDieState(this, _actorBehaviour); var vanishState = new ActorDieState(this, _actorBehaviour); var stateList = new Dictionary <FSMStateActor.StateEnum, IFsmState> { { FSMStateActor.StateEnum.IDLE, idleState }, { FSMStateActor.StateEnum.WALK, walkState }, { FSMStateActor.StateEnum.FIGHT, fightState }, { FSMStateActor.StateEnum.DIE, dieState }, { FSMStateActor.StateEnum.VANISH, vanishState }, }; SetStates(stateList); var allowedTransitions = new Dictionary <FSMStateActor.StateEnum, IList <FSMStateActor.StateEnum> >(); allowedTransitions.Add(FSMStateActor.StateEnum.IDLE, new List <FSMStateActor.StateEnum> { FSMStateActor.StateEnum.WALK, FSMStateActor.StateEnum.FIGHT, FSMStateActor.StateEnum.DIE, }); allowedTransitions.Add(FSMStateActor.StateEnum.WALK, new List <FSMStateActor.StateEnum> { FSMStateActor.StateEnum.IDLE, FSMStateActor.StateEnum.FIGHT, FSMStateActor.StateEnum.DIE, }); allowedTransitions.Add(FSMStateActor.StateEnum.FIGHT, new List <FSMStateActor.StateEnum> { FSMStateActor.StateEnum.IDLE, FSMStateActor.StateEnum.WALK, FSMStateActor.StateEnum.DIE, }); allowedTransitions.Add(FSMStateActor.StateEnum.DIE, new List <FSMStateActor.StateEnum> { FSMStateActor.StateEnum.VANISH, }); allowedTransitions.Add(FSMStateActor.StateEnum.VANISH, new List <FSMStateActor.StateEnum> { FSMStateActor.StateEnum.NONE, }); SetTransitions(allowedTransitions); }
public StateMachineActor(ActorBehaviour ab) { _actorBehaviour = ab; var idleState = new ActorIdleState(this, _actorBehaviour); var dieState = new ActorDieState(this, _actorBehaviour); var vanishState = new ActorVanishState(this, _actorBehaviour); var harvestState = new ActorHarvestState(this, _actorBehaviour); var walkState = new ActorWalkState(this, _actorBehaviour); var walkFightState = new ActorWalkFightState(this, _actorBehaviour); var fightState = new ActorFightState(this, _actorBehaviour); var delayFightState = new ActorDelayFightState(this, _actorBehaviour); var guardState = new ActorGuardState(this, _actorBehaviour); var stateList = new Dictionary <StateEnum, IFsmState> { { StateEnum.IDLE, idleState }, { StateEnum.DIE, dieState }, { StateEnum.VANISH, vanishState }, { StateEnum.HARVEST, harvestState }, { StateEnum.WALK, walkState }, { StateEnum.WALKFIGHT, walkFightState }, { StateEnum.FIGHT, fightState }, { StateEnum.DELAYFIGHT, delayFightState }, { StateEnum.GUARD, guardState }, }; SetStates(stateList); var allowedTransitions = new Dictionary <StateEnum, IList <StateEnum> >(); allowedTransitions.Add(StateEnum.IDLE, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.HARVEST, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, // 敌人如果在附近,直接可以进入战斗状态 StateEnum.DELAYFIGHT, // 间隔一定的时间再攻击, 弹药基数足够的情况下,第二次攻击都用此方式 StateEnum.GUARD, }); allowedTransitions.Add(StateEnum.DIE, new List <StateEnum> { StateEnum.DIE, StateEnum.VANISH, }); allowedTransitions.Add(StateEnum.VANISH, new List <StateEnum> { StateEnum.NONE, StateEnum.VANISH, }); allowedTransitions.Add(StateEnum.HARVEST, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, StateEnum.GUARD, }); allowedTransitions.Add(StateEnum.WALK, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, StateEnum.DELAYFIGHT, StateEnum.GUARD, }); allowedTransitions.Add(StateEnum.WALKFIGHT, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, StateEnum.DELAYFIGHT, StateEnum.GUARD, }); allowedTransitions.Add(StateEnum.FIGHT, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, StateEnum.DELAYFIGHT, StateEnum.GUARD, }); allowedTransitions.Add(StateEnum.DELAYFIGHT, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, StateEnum.GUARD, }); allowedTransitions.Add(StateEnum.GUARD, new List <StateEnum> { StateEnum.IDLE, StateEnum.DIE, StateEnum.WALK, StateEnum.WALKFIGHT, StateEnum.FIGHT, StateEnum.GUARD, }); SetTransitions(allowedTransitions); }