/* Board constructor. This Constructor * is used once per actor. One actor only ever * has one AI, though they may go through multiple states * and triggers. */ public AI(AI ai, Actor _body) { //IMP this.CurrentState = ai.CurrentState.Copy(); this.Attach(_body); this.ActiveTriggers = new List<AITrigger>(); this.ResetActiveTriggers(); }
public void InitializeAIHoming() { AIState move = new AIState(true, false); AIState home = new AIState(true, true); CollisionCounter c = new CollisionCounter(40, 3, Device); var t1 = new TriggerCollision(home, c, 0, false); move.AddTrigger(t1); AIHoming = new AI(move); }
/* AI For enemy actors. When a friendly (player) * actor comes close, the actor will stop moving. */ public void InitializeAICloseStop() { AIState move = new AIState(true, false); AIState stop = new AIState(false, false); CollisionCounter c = new CollisionCounter(30, 3, Device);//radius of 15, collides with Friendly Actors var t1 = new TriggerCollision(stop, c, 0, false); // trips when more than 1 friendly actor in radius var t2 = new TriggerCollision(move, c, 1, true); // trips when there are no friendly actors in radius move.AddTrigger(t1); stop.AddTrigger(t2); AICloseStop = new AI(move); }
//adds trigger to the board, and attaches it to an actor private void AddTriggers(AI ai) { foreach (AITrigger ait in ai.GetActiveTriggers()) { ait.Attach(ai.GetBody()); if (ait is TriggerCollision) { var tc = (TriggerCollision)ait; var cCounter = tc.GetCollisionCounter(); InsertCollidable(cCounter); } PieceList.Add(ait); } }
/* Whenever an AI gets added, we need to make sure that * their triggers and assorted addons are added as well. * this method managed that. */ private void AddAI(AI ai) { AIList.Add(ai); AddTriggers(ai); }
public void NewEnemy() { Random r = new Random(); int xpos = r.Next(50, 400); int ypos = r.Next(50, 400); Vector2 pos = new Vector2(xpos, ypos); Actor a = new Actor(Data.baseEnemyActor, pos); AI ai = new AI(Data.AIHoming, a); InsertCollidable(a); AddAI(ai); }
/* AI that sets the actor to move and shoot */ public void InitializeAIStartStop() { //first, the two basic states: move or stop AIState move = new AIState(true, false); AIState stop = new AIState(false, false); //now, we connect them with the appropriate triggers var t1 = new TriggerTime(stop, 0.25f); var t2 = new TriggerTime(move, 0.25f); move.AddTrigger(t1); stop.AddTrigger(t2); AIStartStop = new AI(move); }