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

Class Method, % Line, %
EnemyState 66.7% (4/6) 76% (19/25)
EnemyState$1 100% (3/3) 100% (4/4)
EnemyState$2 100% (3/3) 100% (3/3)
EnemyState$3 50% (1/2) 50% (1/2)
EnemyState$4 100% (3/3) 100% (3/3)
EnemyState$5 100% (1/1) 100% (1/1)
Total 83.3% (15/18) 81.6% (31/38)


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  9 /** 10  * State machine used for NPC ships' behaviour 11  */ 12 public enum EnemyState implements State<NPCShip> { 13  /** 14  * Picks random pos and travels to it 15  */ 16  WANDER() { 17  @Override 18  public void enter(NPCShip e) { 19  e.stopMovement(); 20  e.wander(); 21  } 22  23  @Override 24  public void update(NPCShip e) { 25  super.update(e); 26  //System.out.println("WANDER"); 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.followTarget(); 36  // e.goToTarget(); 37  } 38  39  @Override 40  public void update(NPCShip e) { 41  super.update(e); 42  //System.out.println("PURSUE"); 43  } 44  }, 45  /** 46  * Actively looks for other enemies 47  */ 48  HUNT() { 49  @Override 50  public void update(NPCShip e) { 51  super.update(e); 52  } 53  }, 54  /** 55  * Attempts to kill the enemy 56  */ 57  ATTACK() { 58  @Override 59  public void enter(NPCShip e) { 60  e.stopMovement(); 61  } 62  63  @Override 64  public void update(NPCShip e) { 65  super.update(e); 66  //System.out.println("ATTACK"); 67  } 68  }; 69  70  /** 71  * Called every from for every NPC ship (there or there abouts) 72  * 73  * @param e the sender 74  */ 75  @Override 76  public void update(NPCShip e) { 77  StateMachine<NPCShip, EnemyState> m = e.stateMachine; 78  Pirate p = e.getComponent(Pirate.class); 79  switch (m.getCurrentState()) { 80  case WANDER: 81  if (p.isAgro()) { 82  m.changeState(PURSUE); 83  } else if (p.canAttack()) { 84  m.changeState(ATTACK); 85  } 86  // if college attacked hunt 87  else if (false) { 88  m.changeState(HUNT); 89  } 90  break; 91  case PURSUE: 92  // if enter attack range attack 93  if (p.canAttack()) { 94  m.changeState(ATTACK); 95  } 96  // if leave detection range wander 97  if (!p.canAttack() && !p.isAgro()) { 98  m.changeState(WANDER); 99  } 100  break; 101  case HUNT: 102  // if enter detection range pursue 103  if (p.isAgro()) { 104  m.changeState(PURSUE); 105  } 106  break; 107  case ATTACK: 108  // if leave attack range pursue 109  if (p.isAgro() && !p.canAttack()) { 110  m.changeState(PURSUE); 111  } 112  // if target dead 113  else if (!p.getTarget().isAlive()) { 114  m.changeState(WANDER); 115  } 116  break; 117  } 118  } 119  120  /** 121  * Called when a state is left 122  * 123  * @param e the sender 124  */ 125  @Override 126  public void exit(NPCShip e) { 127  128  } 129  130  /** 131  * Called when a state is entered 132  * 133  * @param entity the sender 134  */ 135  @Override 136  public void enter(NPCShip entity) { 137  138  } 139  140  /** 141  * not used 142  */ 143  @Override 144  public boolean onMessage(NPCShip e, Telegram telegram) { 145  return false; 146  } 147 }