Coverage Summary for Class: Ship (com.mygdx.game.Entitys)

Class Class, % Method, % Line, %
Ship 100% (1/1) 87.5% (21/24) 88.3% (53/60)


1 package com.mygdx.game.Entitys; 2  3 import com.badlogic.gdx.graphics.g2d.Sprite; 4 import com.badlogic.gdx.math.Vector2; 5 import com.badlogic.gdx.utils.ObjectMap; 6 import com.mygdx.game.Components.*; 7 import com.mygdx.game.Faction; 8 import com.mygdx.game.Managers.GameManager; 9 import com.mygdx.game.Managers.RenderLayer; 10 import com.mygdx.game.Managers.ResourceManager; 11 import com.mygdx.game.Physics.CollisionCallBack; 12 import com.mygdx.game.Physics.CollisionInfo; 13 import com.mygdx.game.Physics.PhysicsBodyType; 14 import com.mygdx.utils.Utilities; 15  16 import java.util.Objects; 17  18 /** 19  * Base class for game ships, Player & NPC. 20  */ 21 public class Ship extends Entity implements CollisionCallBack { 22  private static int shipCount = 0; 23  public static ObjectMap<Vector2, String> shipDirections; 24  25  private final Vector2 currentDir; 26  27  /** 28  * Creates a ship entity, containing Transform, Renderable, RigidBody, and Pirate components. 29  */ 30  public Ship() { 31  super(5); 32  currentDir = new Vector2(); 33  setName("Ship (" + shipCount++ + ")"); // each ship has a unique name 34  35  if (shipDirections == null) { 36  shipDirections = new ObjectMap<>(); 37  shipDirections.put(new Vector2(0, 1), "-up"); 38  shipDirections.put(new Vector2(0, -1), "-down"); 39  shipDirections.put(new Vector2(1, 0), "-right"); 40  shipDirections.put(new Vector2(-1, 0), "-left"); 41  shipDirections.put(new Vector2(1, 1), "-ur"); 42  shipDirections.put(new Vector2(-1, 1), "-ul"); 43  shipDirections.put(new Vector2(1, -1), "-dr"); 44  shipDirections.put(new Vector2(-1, -1), "-dl"); 45  } 46  47  Transform t = new Transform(); 48  t.setPosition(800, 800); 49  Renderable r = new Renderable(3, "white-up", RenderLayer.Transparent); 50  RigidBody rb = new RigidBody(PhysicsBodyType.Dynamic, r, t); 51  rb.setCallback(this); 52  53  Pirate p = new Pirate(); 54  PowerUpAssigned pow = new PowerUpAssigned(); 55  56  // rb.setCallback(this); 57  58  addComponents(t, r, rb, p, pow); 59  } 60  61  /** 62  * // New for assessment 2 // 63  * Get a Pirate value. 64  * @param key The value to get 65  * @return The value 66  */ 67  public float getValue(String key) { 68  return getComponent(Pirate.class).getValue(key); 69  } 70  71  /** 72  * // New for assessment 2 // 73  * Reset a Pirate value to what it originally was. 74  * @param key The value to reset 75  */ 76  public void resetToDefault(String key) { 77  getComponent(Pirate.class).resetToDefault(key); 78  } 79  80  /** 81  * @return the boolean value of life attached to the Pirate Component 82  */ 83  public boolean isAlive() { 84  return getComponent(Pirate.class).getHealth() > 0; 85  } 86  87  /** 88  * @return the range at which this ship can attack 89  */ 90  public static float getAttackRange() { 91  return Utilities.tilesToDistance(GameManager.getSettings().get("starting").getFloat("attackRange_tiles")); 92  } 93  94  /** 95  * @param money the integer to be added to the money value attached to the Pirate Component 96  */ 97  public void plunder(int money) { 98  getComponent(Pirate.class).addPlunder(money); 99  } 100  101  /** 102  * @param increment the integer to be added to the points value attached to the Pirate Component 103  */ 104  public void points(int increment) { 105  getComponent(Pirate.class).addPoints(increment); 106  } 107  108  /** 109  * Associates ship with faction and orients it to the default northern direction. 110  * @param factionId the desired faction id 111  */ 112  public void setFaction(int factionId) { 113  getComponent(Pirate.class).setFactionId(factionId); 114  setShipDirection("-up"); 115  } 116  117  /** 118  * gets the string representation of the direction the ship is facing 119  * @param dir the vector dir the ship is facing 120  * @return the string representation of the direction 121  */ 122  private String getShipDirection(Vector2 dir) { 123  if (!currentDir.equals(dir) && shipDirections.containsKey(dir)) { 124  currentDir.set(dir); 125  return shipDirections.get(dir); 126  } 127  return ""; 128  } 129  130  /** 131  * gets the faction colour 132  * @return the faction colour 133  */ 134  private String getColour() { 135  return getComponent(Pirate.class).getFaction().getColour(); 136  } 137  138  /** 139  * will rotate the ship to face the direction (just changes the sprite doesn't actually rotate) 140  * @param dir the dir to face (used to get the correct sprite from the texture atlas 141  */ 142  public void setShipDirection(Vector2 dir) { 143  setShipDirection(getShipDirection(dir)); 144  } 145  146  /** 147  * will rotate the ship to face the direction (just changes the sprite doesn't actually rotate) 148  * @param direction the dir to face (used to get the correct sprite from the texture atlas 149  */ 150  public void setShipDirection(String direction) { 151  if (Objects.equals(direction, "")) { 152  return; 153  } 154  Renderable r = getComponent(Renderable.class); 155  Sprite s = ResourceManager.getSprite(3, getColour() + direction); 156  157  try { 158  r.setTexture(s); 159  } catch (Exception ignored) { 160  161  } 162  } 163  164  /** 165  * @return the health attached to the Pirate Component 166  */ 167  public int getHealth() { 168  return getComponent(Pirate.class).getHealth(); 169  } 170  171  /** 172  * @return the plunder attached to the Pirate Component 173  */ 174  public int getPlunder() { 175  return getComponent(Pirate.class).getPlunder(); 176  } 177  178  /** 179  * @return the points attached to the Pirate Component 180  */ 181  public int getPoints() { 182  return getComponent(Pirate.class).getPoints(); 183  } 184  185  /** 186  * Calls shoot method with the current direction as parameter 187  */ 188  public void shoot() { 189  shoot(currentDir); 190  } 191  192  /** 193  * Calls shoot method of internal component 194  */ 195  public void shoot(Vector2 dir) { 196  getComponent(Pirate.class).shoot(dir); 197  } 198  199  /** 200  * @return copy of the transform's position 201  */ 202  public Vector2 getPosition() { 203  return getComponent(Transform.class).getPosition().cpy(); 204  } 205  206  /** 207  * Added for Assessment 2 208  * @return The Faction of the Pirate Component attached to this entity 209  */ 210  public Faction getFaction() { 211  return getComponent(Pirate.class).getFaction(); 212  } 213  214  /** 215  * Amended for Assessment 2 (added functionality for when attacked by cannonball) 216  * if called on a Player against anything else call it on the other thing 217  */ 218  @Override 219  public void EnterTrigger(CollisionInfo info) { 220  if (info.a instanceof CannonBall) { 221  CannonBall a = (CannonBall) info.a; 222  if(a.getFaction() != getFaction()){ 223  getComponent(Pirate.class).takeDamage( a.getAttackDmg() ); 224  a.kill(); 225  } 226  }else if (this instanceof Player && !(info.b instanceof Player)) { 227  ((CollisionCallBack) info.b).EnterTrigger(info); 228  } 229  } 230  231  /** 232  * if called on a Player against anything else call it on the other thing 233  */ 234  @Override 235  public void ExitTrigger(CollisionInfo info) { 236  if (this instanceof Player && !(info.b instanceof Player)) { 237  ((CollisionCallBack) info.b).ExitTrigger(info); 238  } 239  } 240  241  /** 242  * `unused` 243  */ 244  @Override 245  public void BeginContact(CollisionInfo info) { 246  247  } 248  249  /** 250  * `unused` 251  */ 252  @Override 253  public void EndContact(CollisionInfo info) { 254  255  } 256 }