Coverage Summary for Class: EnemyState (com.mygdx.game.AI)

Class Method, % Line, %
EnemyState 66.7% (4/6) 90.9% (20/22)
EnemyState$1 100% (3/3) 100% (4/4)
EnemyState$2 100% (3/3) 100% (4/4)
EnemyState$3 100% (3/3) 100% (5/5)
EnemyState$4 100% (1/1) 100% (1/1)
Total 87.5% (14/16) 94.4% (34/36)


1 package com.mygdx.game.AI; 2  3 import com.badlogic.gdx.ai.fsm.State; 4 import com.badlogic.gdx.ai.fsm.StateMachine; 5 import com.badlogic.gdx.ai.msg.Telegram; 6 import com.mygdx.game.Components.Pirate; 7 import com.mygdx.game.Entitys.NPCShip; 8 import com.mygdx.game.Entitys.Ship; 9  10 /** 11  * State machine used for NPC ships' behaviour 12  */ 13 public enum EnemyState implements State<NPCShip> { 14  /** 15  * Picks random pos and travels to it 16  */ 17  WANDER() { 18  @Override 19  public void enter(NPCShip e) { 20  e.stopMovement(); 21  } 22  23  @Override 24  public void update(NPCShip e) { 25  super.update(e); 26  e.circleOrigin(); //Added in Assessment 2 so idle ships would patrol around colleges 27  } 28  }, 29  /** 30  * Tries to get into attack range of the player 31  */ 32  PURSUE() { 33  @Override 34  public void enter(NPCShip e) { 35  e.stopMovement(); 36  e.followTarget(); 37  } 38  39  @Override 40  public void update(NPCShip e) { 41  super.update(e); 42  } 43  }, 44  /** 45  * Attempts to kill the enemy 46  */ 47  ATTACK() { 48  @Override 49  public void enter(NPCShip e) { 50  e.stopMovement(); 51  } 52  53  @Override 54  public void update(NPCShip e) { 55  super.update(e); 56  Ship ship = e.getComponent(Pirate.class).getTarget(); 57  e.attackShip(ship); 58  } 59  }; 60  61  /** 62  * Called every from for every NPC ship (there or there abouts) 63  * @param e the sender 64  */ 65  @Override 66  public void update(NPCShip e) { 67  StateMachine<NPCShip, EnemyState> m = e.stateMachine; 68  Pirate p = e.getComponent(Pirate.class); 69  switch (m.getCurrentState()) { 70  case WANDER: 71  if (p.isAggro()) { 72  m.changeState(PURSUE); 73  } else if (p.canAttack()) { 74  m.changeState(ATTACK); 75  } 76  break; 77  case PURSUE: 78  // if enter attack range attack 79  if (p.canAttack()) { 80  m.changeState(ATTACK); 81  } 82  // if leave detection range wander 83  if (!p.canAttack() && !p.isAggro()) { 84  m.changeState(WANDER); 85  } 86  break; 87  case ATTACK: 88  // if leave attack range pursue 89  if (p.isAggro() && !p.canAttack()) { 90  m.changeState(PURSUE); 91  } 92  // if target dead 93  else if (!p.getTarget().isAlive()) { 94  m.changeState(WANDER); 95  } 96  break; 97  } 98  } 99  100  /** 101  * Called when a state is left 102  * @param e the sender 103  */ 104  @Override 105  public void exit(NPCShip e) { 106  107  } 108  109  /** 110  * Called when a state is entered 111  * @param entity the sender 112  */ 113  @Override 114  public void enter(NPCShip entity) { 115  116  } 117  118  /** 119  * not used 120  */ 121  @Override 122  public boolean onMessage(NPCShip e, Telegram telegram) { 123  return false; 124  } 125 }