Coverage Summary for Class: PowerUpPickup (com.mygdx.game.Entitys)
| Class | Class, % | Method, % | Line, % |
|---|---|---|---|
| PowerUpPickup | 100% (1/1) | 55.6% (5/9) | 63.3% (19/30) |
1 package com.mygdx.game.Entitys; 2 3 import com.badlogic.gdx.math.Vector2; 4 import com.badlogic.gdx.utils.TimeUtils; 5 import com.mygdx.game.Components.PowerUpAssigned; 6 import com.mygdx.game.Components.Renderable; 7 import com.mygdx.game.Components.RigidBody; 8 import com.mygdx.game.Components.Transform; 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.game.PowerUps.PowerUp; 15 16 /** 17 * Added for Assessment 2 18 * Simple entity shown on locate quests origin 19 */ 20 public class PowerUpPickup extends Entity implements CollisionCallBack { 21 22 private final PowerUp powerUp; 23 private boolean hideToggle; 24 private boolean showToggle; 25 private final Vector2 position; 26 private final long cooldown; 27 private long lastHit; 28 29 /** 30 * Generate an obstacle. 31 * @param powerUp The Power Up being picked up 32 * @param texName The texture to show for the obstacle. 33 * @param pos The position of the power up 34 * @param cooldown The cooldown before the power up can be used again 35 */ 36 public PowerUpPickup(PowerUp powerUp, String texName, Vector2 pos, int cooldown) { 37 super(3); 38 39 Transform t = new Transform(); 40 Renderable r = new Renderable(ResourceManager.getId("powerups.txt"), texName, RenderLayer.Transparent); 41 RigidBody rb = new RigidBody(PhysicsBodyType.Kinematic, r, t, true); 42 rb.setCallback(this); 43 44 addComponents(t, r, rb); 45 46 this.powerUp = powerUp; 47 48 hideToggle = false; 49 showToggle = false; 50 51 position = pos; 52 setPosition(pos); 53 54 this.cooldown = 1000L * cooldown; 55 lastHit = 0; 56 } 57 58 /** 59 * @param pos The position of the power up to be set 60 */ 61 private void setPosition(Vector2 pos) { 62 getComponent(RigidBody.class).setPosition(pos); 63 } 64 65 /** 66 * Reveals the power-up if its cooldown has expired 67 */ 68 private void tryShow() { 69 if (TimeUtils.timeSinceMillis(lastHit) > cooldown) { 70 setPosition(position); 71 showToggle = false; 72 } 73 } 74 75 /** 76 * Hides the power-up 77 */ 78 private void tryHide() { 79 setPosition(new Vector2(1000, -1000)); 80 hideToggle = false; 81 showToggle = true; 82 lastHit = TimeUtils.millis(); 83 } 84 85 /** 86 * Called once per frame 87 */ 88 @Override 89 public void update() { 90 super.update(); 91 if (hideToggle) tryHide(); 92 else if (showToggle) tryShow(); 93 } 94 95 /** 96 * applies the attached power up to the colliding entity then sets the power up to be hidden next update 97 * @param info the collision info used in the conjunction 98 */ 99 @Override 100 public void EnterTrigger(CollisionInfo info) { 101 PowerUpAssigned playerPow = info.a.getComponent(PowerUpAssigned.class); 102 playerPow.AssignPowerUp(powerUp); 103 hideToggle = true; 104 } 105 106 /** 107 * `unused` 108 */ 109 @Override 110 public void BeginContact(CollisionInfo info) { 111 } 112 113 /** 114 * `unused` 115 */ 116 @Override 117 public void EndContact(CollisionInfo info) { 118 } 119 120 /** 121 * `unused` 122 */ 123 @Override 124 public void ExitTrigger(CollisionInfo info) { 125 } 126 }