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 }