Coverage Summary for Class: Pirate (com.mygdx.game.Components)

Class Class, % Method, % Line, %
Pirate 100% (1/1) 100% (27/27) 100% (56/56)


1 package com.mygdx.game.Components; 2  3 import com.badlogic.gdx.math.Vector2; 4 import com.badlogic.gdx.utils.JsonValue; 5 import com.mygdx.game.Entitys.Ship; 6 import com.mygdx.game.Faction; 7 import com.mygdx.game.Managers.GameManager; 8 import com.mygdx.utils.QueueFIFO; 9  10 import java.util.HashMap; 11  12 /** 13  * Gives the concepts of health plunder, etc. Allows for firing of cannonballs, factions, death, targets 14  */ 15 public class Pirate extends Component { 16  /** 17  * // Assessment 2 Change: Refactored to use map for storing values which will be modified by power-ups. 18  * The enemy that is being targeted by the AI. 19  */ 20  private int factionId; 21  private final HashMap<String,Float> defaults; 22  private final HashMap<String,Float> values; 23  private int points; 24  protected boolean isAlive; 25  26  private boolean infiniteAmmo; // Added for Assessment 2 for power-ups and colleges 27  private final QueueFIFO<Ship> targets; 28  //private int plunder; 29  30  /** 31  * Creates the base Pirate Component, setting up its initial values 32  */ 33  public Pirate() { 34  super(); 35  targets = new QueueFIFO<>(); 36  type = ComponentType.Pirate; 37  factionId = 1; 38  isAlive = true; 39  40  values = new HashMap<>(); 41  JsonValue starting = GameManager.getSettings().get("starting"); 42  values.put("health", (float) starting.getInt("health")); 43  values.put("damage", (float) starting.getInt("damage")); 44  values.put("ammo", (float) starting.getInt("ammo")); 45  values.put("plunder", (float) starting.getInt("plunder")); 46  47  values.put("plunderRate", 1f); 48  values.put("defense", 1f); 49  50  defaults = new HashMap<>(values); 51  } 52  53  /** 54  * // New for assessment 2 // 55  * Get a Pirate value. 56  * @param key The value to get 57  * @return The value 58  */ 59  public float getValue(String key) { 60  return values.get(key); 61  } 62  63  /** 64  * // New for assessment 2 // 65  * Set a new value for Pirate while holding reference to what it was originally. 66  * @param key The value to set to 67  * @param value The float to apply 68  */ 69  public void setValue(String key, float value) { 70  values.replace(key, value); 71  } 72  73  /** 74  * // New for assessment 2 // 75  * Multiply a value for Pirate while holding reference to what it was originally. 76  * @param key The value to multiply 77  * @param mult The multiplication factor 78  */ 79  public void multValue(String key, float mult) { 80  values.replace(key, values.get(key) * mult); 81  } 82  83  /** 84  * // New for assessment 2 // 85  * Reset a Pirate value to what it originally was. 86  * @param key The value to reset 87  */ 88  public void resetToDefault(String key) { 89  values.replace(key, defaults.get(key)); 90  } 91  92  /** 93  * @param target The Ship to be added to the list of potential targets 94  */ 95  public void addTarget(Ship target) { 96  targets.add(target); 97  } 98  99  /** 100  * @return the plunder value attached to this pirate 101  */ 102  public int getPlunder() { 103  return values.get("plunder").intValue(); 104  } 105  106  /** 107  * @return the points value attached to this pirate 108  */ 109  public int getPoints() { 110  return points; 111  } 112  113  /** 114  * @param money The integer value to be added to the pirate's stored plunder amount 115  */ 116  public void addPlunder(int money) { 117  // Assessment 2 change: Plunder additions are now multiplied by plunderRate value 118  values.replace("plunder", values.get("plunder")+ Math.round(money * values.get("plunderRate"))); 119  } 120  121  /** 122  * @param increment The integer value to be added to the pirate's stored point amount 123  */ 124  public void addPoints(int increment) { 125  points += increment; 126  } 127  128  /** 129  * @return the Faction value attached to this pirate 130  */ 131  public Faction getFaction() { 132  return GameManager.getFaction(factionId); 133  } 134  135  /** 136  * @param factionId The ID of the faction to set this pirate to 137  */ 138  public void setFactionId(int factionId) { 139  this.factionId = factionId; 140  } 141  142  /** 143  * Added for Assessment 2, sets whether the pirate can ignore ammo costs for firing 144  * @param status boolean value to set infiniteAmmo to 145  */ 146  public void setInfiniteAmmo(boolean status) { 147  infiniteAmmo = status; 148  } 149  150  /** 151  * Added for Assessment 2 152  * @return the damage dealt by attacks from this unit 153  */ 154  public Float getAttackDmg() { 155  return values.get("damage"); 156  } 157  158  /** 159  * Deducts damage taken from Pirate's health and kills the pirate if that reduces health to less than or equal to 0 160  * @param dmg The float value to be removed from this pirate's health total 161  */ 162  public void takeDamage(float dmg) { 163  // Assessment 2 change: Refactored to include key for health instead of variable, as well as factor in new defense value 164  dmg *= (1f/values.get("defense")); 165  values.replace("health", getHealth() - dmg); 166  if (getHealth() <= 0) kill(); 167  } 168  169  /** 170  * Changed for Assessment 2: 171  * - Removed functionality and replaced with function call to a different function, 172  * to allow for differentiation between when a start position is or isn't provided. 173  * @param direction the direction to shoot in 174  */ 175  public void shoot(Vector2 direction) { 176  shoot(parent.getComponent(Transform.class).getPosition().cpy(),direction); 177  } 178  179  /** 180  * Added for Assessment 2 181  * Will shoot a cannonball from the startPos in the direction, assigning this.Parent as the cannonball's parent 182  * @param direction the direction to shoot in 183  */ 184  public void shoot(Vector2 startPos, Vector2 direction){ 185  if(!infiniteAmmo && (getAmmo() == 0)){ 186  return; 187  } 188  if(!infiniteAmmo){ 189  values.replace("ammo", getAmmo()-1f); 190  } 191  GameManager.shoot(parent, startPos, direction); 192  } 193  194  /** 195  * @return the health value attached to this pirate 196  */ 197  public int getHealth() { 198  // Assessment 2 change: Refactored to use key for health instead of variable 199  return Math.round(values.get("health")); 200  } 201  202  /** 203  * if dst to target is less than attack range 204  * target will be null if not in aggro range 205  */ 206  public boolean canAttack() { 207  final Ship p = (Ship) parent; 208  final Vector2 pos = p.getPosition(); 209  // within attack range 210  if (targets.peek() != null) { 211  final float dst = pos.dst(targets.peek() != null ? targets.peek().getPosition() : null); // Assessment 2 change: Fixed to not error on null 212  return dst < Ship.getAttackRange(); 213  }else{ 214  return false; 215  } 216  } 217  218  /** 219  * if dst to target is >= attack range 220  * target will be null if not in aggro range 221  */ 222  public boolean isAggro() { 223  final Ship p = (Ship) parent; 224  final Vector2 pos = p.getPosition(); 225  // out of attack range but in aggro range 226  if (targets.peek() != null) { 227  final float dst = pos.dst(targets.peek() != null ? targets.peek().getPosition() : null); 228  return dst >= Ship.getAttackRange(); 229  }else{ 230  return false; 231  } 232  } 233  234  /** 235  * @return the current target value attached to this pirate 236  */ 237  public Ship getTarget() { 238  return targets.peek(); 239  } 240  241  /** 242  * @return the boolean alive value attached to this pirate 243  */ 244  public boolean isAlive() { 245  return isAlive; 246  } 247  248  /** 249  * Kill its self 250  */ 251  public void kill() { 252  // Assessment 2 change: Refactored to use key for health instead of variable 253  values.replace("health", 0f); 254  isAlive = false; 255  } 256  257  /** 258  * @param ammo The integer to be added to the amount of ammo this pirate has access to 259  */ 260  public void setAmmo(int ammo) { 261  // Assessment 2 change: Refactored to use key for ammo instead of variable 262  values.replace("ammo", (float) ammo); 263  } 264  265  /** 266  * @return the ammo value attached to this pirate 267  */ 268  public int getAmmo() { 269  // Assessment 2 change: Refactored to use key for ammo instead of variable 270  return Math.round(values.get("ammo")); 271  } 272  273  public QueueFIFO<Ship> getTargets() { 274  return targets; 275  } 276  277  public void removeTarget() { 278  targets.pop(); 279  } 280  281  //public int targetCount() { 282  // return targets.size(); 283  // } 284  285  //public void reload(int ammo) { 286  // // Assessment 2 change: Refactored to use key for ammo instead of variable 287  // values.replace("ammo", (float) getAmmo()+ammo); 288  // } 289 }