Coverage Summary for Class: CannonBall (com.mygdx.game.Entitys)
Class |
Class, %
|
Method, %
|
Line, %
|
CannonBall |
100%
(1/1)
|
100%
(11/11)
|
100%
(38/38)
|
1 package com.mygdx.game.Entitys;
2
3 import com.badlogic.gdx.math.Vector2;
4 import com.mygdx.game.Components.Pirate;
5 import com.mygdx.game.Components.Renderable;
6 import com.mygdx.game.Components.RigidBody;
7 import com.mygdx.game.Components.Transform;
8 import com.mygdx.game.Faction;
9 import com.mygdx.game.Managers.EntityManager;
10 import com.mygdx.game.Managers.GameManager;
11 import com.mygdx.game.Managers.RenderLayer;
12 import com.mygdx.game.Physics.CollisionCallBack;
13 import com.mygdx.game.Physics.CollisionInfo;
14 import com.mygdx.game.Physics.PhysicsBodyType;
15
16 import static com.mygdx.utils.Constants.TILE_SIZE;
17
18 /**
19 * Cannonball entity and the methods to get it flying.
20 */
21 public class CannonBall extends Entity implements CollisionCallBack {
22 private static float speed;
23 private boolean toggleLife;
24 private static final int MAX_AGE = 5;
25 private Entity shooter; // Changed for Assessment 2, type switched from Ship to Entity
26
27 /**
28 * Constructs the cannonball object by generating components
29 */
30 public CannonBall() {
31 super(3);
32 setName("ball");
33 toggleLife = false;
34 Transform t = new Transform();
35 t.setPosition(-100, 100);
36 t.setScale(0.5f, 0.5f);
37 Renderable r = new Renderable(4, "ball", RenderLayer.Transparent);
38 RigidBody rb = new RigidBody(PhysicsBodyType.Dynamic, r, t, true);
39 rb.setCallback(this);
40
41 addComponents(t, r, rb);
42
43 speed = GameManager.getSettings().get("starting").getFloat("cannonSpeed");
44 r.hide();
45 }
46
47 /**
48 * Called once per frame
49 */
50 @Override
51 public void update() {
52 super.update();
53 removeOnCollision();
54 }
55
56 /**
57 * Removes the cannonball offscreen once it hits a target.
58 */
59 private void removeOnCollision() {
60 if (toggleLife) {
61 getComponent(Renderable.class).hide();
62 Transform t = getComponent(Transform.class);
63 t.setPosition(10000, 10000);
64
65 RigidBody rb = getComponent(RigidBody.class);
66 rb.setPosition(t.getPosition());
67 rb.setVelocity(0, 0);
68 toggleLife = false;
69 }
70 /*else{
71 age += EntityManager.getDeltaTime();
72 }
73 if(age > MAX_AGE) {
74 age = 0;
75 kill();
76 }*/
77 }
78
79 /**
80 * Teleport the cannonball in from offscreen and send in flying away from the ship.
81 *
82 * @param pos 2D vector location from where it sets off
83 * @param dir 2D vector direction for its movement
84 * @param sender ship entity firing it
85 */
86 public void fire(Entity sender, Vector2 pos, Vector2 dir) {
87 Transform t = getComponent(Transform.class);
88 t.setPosition(pos);
89
90 RigidBody rb = getComponent(RigidBody.class);
91 Vector2 ta = dir.cpy().scl(speed * EntityManager.getDeltaTime());
92 Vector2 o = new Vector2(TILE_SIZE * t.getScale().x, TILE_SIZE * t.getScale().y);
93 Vector2 v = ta.cpy().sub(o);
94
95 rb.setVelocity(v);
96
97 getComponent(Renderable.class).show();
98 shooter = sender;
99 }
100
101 /**
102 * Marks cannonball for removal on next update.
103 */
104 public void kill() {
105 toggleLife = true;
106 }
107
108 /**
109 * Added for Assessment 2
110 * @return The Faction of the Pirate Component attached to this entity
111 */
112 public Faction getFaction() {
113 return shooter.getComponent(Pirate.class).getFaction();
114 }
115
116 /**
117 * Added for Assessment 2
118 * @return the damage dealt by the unit shooting this cannonball
119 */
120 public Float getAttackDmg() {
121 return shooter.getComponent(Pirate.class).getAttackDmg();
122 }
123
124 /**
125 * `unused`
126 */
127 @Override
128 public void BeginContact(CollisionInfo info) {
129
130 }
131
132 /**
133 * `unused`
134 */
135 @Override
136 public void EndContact(CollisionInfo info) {
137
138 }
139
140 /**
141 * `unused`
142 */
143 @Override
144 public void EnterTrigger(CollisionInfo info) {
145
146 }
147
148 /**
149 * `unused`
150 */
151 @Override
152 public void ExitTrigger(CollisionInfo info) {
153
154 }
155
156 // public Entity getShooter() {
157 // return shooter;
158 // }
159 }