private FSMMachine machine; //This state uses a FSM to divide where is should move. public Move(FAIController controller) : base(controller) { //Create FSM. machine = new FSMMachine(); //Set Random to default state. FSMRandom random = new FSMRandom(controller); machine.AddState(random); machine.SetDefaultState(random); //Add more states. machine.AddState(new FSMApproach(controller)); machine.AddState(new FSMEvade(controller)); }
protected float activationLevel; //The activation level of this state. public FuSMState(FAIController controller) { this.controller = controller; activationLevel = 0; }
protected FSMEnum nextState; //Set next state to change state. public FSMState(FSMEnum stateType, FAIController controller) { this.controller = controller; this.stateType = stateType; nextState = stateType; }
public Warn(FAIController controller) : base(controller) { time = 0f; }
public FSMApproach(FAIController controller) : base(FSMEnum.Approach, controller) { }
private float time, timeInterval = 0.7f; //Time is the current delay, timeInterval is the fastest fire rate. public Fire(FAIController controller) : base(controller) { time = 0f; }
private float evadeTime = 0; //Delay for this state. public FSMEvade(FAIController controller) : base(FSMEnum.Evade, controller){ }
private Vector2 targetPos; //The point the entity moves to. public FSMRandom(FAIController controller) : base(FSMEnum.Random, controller) { targetPos = new Vector2(Globals.random.Next(1280), Globals.random.Next(720)); }