Coverage Summary for Class: Indicator (com.mygdx.game.Entitys)
| Class | Class, % | Method, % | Line, % |
|---|---|---|---|
| Indicator | 100% (1/1) | 40% (2/5) | 64.3% (18/28) |
1 package com.mygdx.game.Entitys; 2 3 import com.badlogic.gdx.math.Vector2; 4 import com.mygdx.game.Components.*; 5 import com.mygdx.game.Managers.GameManager; 6 import com.mygdx.game.Managers.QuestManager; 7 import com.mygdx.game.Managers.RenderLayer; 8 import com.mygdx.game.Quests.KillQuest; 9 10 import static java.lang.Math.abs; 11 import static java.lang.Math.max; 12 13 /** 14 * Added for Assessment 2 in order to increase visual clarity on Kill Quests 15 */ 16 public class Indicator extends Entity { 17 private final Entity target; 18 private final KillQuest quest; 19 private Vector2 gradient; 20 21 /** 22 * Creates an indicator attached to a kill quest and targeting a college 23 * @param kq the Kill Quest this indicator is attached to 24 */ 25 public Indicator(KillQuest kq) { 26 super(2); 27 quest = kq; 28 target = quest.getTarget().getParent(); 29 30 Transform t = new Transform(); 31 t.setPosition(800, 800); 32 Renderable r = new Renderable(10, RenderLayer.Transparent); 33 r.hide(); 34 35 addComponents(t, r); 36 gradient = updateGradient(); 37 } 38 39 /** 40 * Called once per frame 41 */ 42 @Override 43 public void update(){ 44 if(QuestManager.currentQuest() == quest){ 45 getComponent(Renderable.class).show(); 46 }else{ 47 getComponent(Renderable.class).hide(); 48 } 49 followPlayer(); 50 } 51 52 /** 53 * Called when updating the gradient of the Indicator. 54 */ 55 public Vector2 updateGradient(){ 56 Player p = GameManager.getPlayer(); 57 Transform self = p.getComponent(Transform.class); 58 Transform goal = target.getComponent(Transform.class); 59 60 // Calculate the gradient to draw the indicator at. 61 float changeInX = goal.getPosition().x - self.getPosition().x; 62 float changeInY = goal.getPosition().y - self.getPosition().y; 63 float scaleFactor = max(abs(changeInX),abs(changeInY)); 64 float dx = changeInX / scaleFactor; 65 float dy = changeInY / scaleFactor; 66 67 return (new Vector2(dx, dy)); 68 } 69 70 /** 71 * Called when updating the position of the Indicator. 72 */ 73 public void followPlayer() { 74 gradient = updateGradient(); 75 rotateSprite(); 76 Player p = GameManager.getPlayer(); 77 Vector2 position = new Vector2( p.getPosition().x + (50 * gradient.x), p.getPosition().y + (50 * gradient.y) ); 78 getComponent(Transform.class).setPosition(position); 79 } 80 81 /** 82 * Called when rotating the sprite of the Indicator. 83 */ 84 public void rotateSprite() { 85 getComponent(Transform.class).setRotation((float) Math.atan2(gradient.y,gradient.x)); 86 } 87 }