Coverage Summary for Class: Obstacle (com.mygdx.game.Entitys)
Class |
Class, %
|
Method, %
|
Line, %
|
Obstacle |
100%
(1/1)
|
87.5%
(7/8)
|
87.5%
(21/24)
|
1 package com.mygdx.game.Entitys;
2
3 import com.mygdx.game.Components.ObstacleControl;
4 import com.mygdx.game.Components.Renderable;
5 import com.mygdx.game.Components.RigidBody;
6 import com.mygdx.game.Components.Transform;
7 import com.mygdx.game.Managers.RenderLayer;
8 import com.mygdx.game.Managers.ResourceManager;
9 import com.mygdx.game.Physics.CollisionCallBack;
10 import com.mygdx.game.Physics.CollisionInfo;
11 import com.mygdx.game.Physics.PhysicsBodyType;
12
13
14 /**
15 * // Added for Assessment 2 Requirements //
16 * A class for obstacles in the game world, both trigger or contact.
17 */
18 public class Obstacle extends Entity implements CollisionCallBack {
19
20 private boolean doKill;
21 private boolean colliding;
22 private CollisionInfo info;
23
24 /**
25 * Generate an obstacle which only triggers a hit on initial collision and does not break.
26 * @param texName The texture to show for the obstacle.
27 * @param trigger True if the obstacle is trigger, otherwise is contact.
28 * @param damage The damage that the obstacle does per 'hit'
29 */
30 public Obstacle(String texName, boolean trigger, float damage) {
31 this(texName, trigger, damage, -1f, -1);
32 }
33
34 /**
35 * Generate an obstacle.
36 * @param texName The texture to show for the obstacle.
37 * @param trigger True if the obstacle is trigger, otherwise is contact.
38 * @param damage The damage that the obstacle does per 'hit'
39 * @param hitRate The rate at which 'hits' occur while colliding
40 * @param hitLimit The number of 'hits' required to break the obstacle
41 */
42 public Obstacle(String texName, boolean trigger, float damage, float hitRate, int hitLimit) {
43 super(4);
44
45 Transform t = new Transform();
46 Renderable r = new Renderable(ResourceManager.getId("obstacles.txt"), texName, RenderLayer.Transparent);
47 RigidBody rb = new RigidBody(PhysicsBodyType.Kinematic, r, t, trigger);
48 rb.setCallback(this);
49 ObstacleControl o = new ObstacleControl(damage, hitRate, hitLimit);
50
51 addComponents(t, r, rb, o);
52
53 doKill = false;
54 colliding = false;
55 }
56
57 /**
58 * Sets the obstacle to be removed on next update
59 */
60 public void kill() {
61 doKill = true;
62 }
63
64 /**
65 * Runs once per frame
66 */
67 @Override
68 public void update() {
69 super.update();
70
71 if (doKill) {
72 getComponent(Transform.class).setPosition(1000, -1000);
73 doKill = false;
74 }
75 if (colliding) getComponent(ObstacleControl.class).TryHit(info, false);
76 }
77
78 /**
79 * Takes the collision info and verifies the results of the collision
80 * @param info the info linked to the collision
81 */
82 @Override
83 public void BeginContact(CollisionInfo info) {
84 colliding = true;
85 this.info = info;
86 getComponent(ObstacleControl.class).TryHit(info, true);
87 }
88
89 /**
90 * Sets the obstacle's status as not colliding
91 */
92 @Override
93 public void EndContact(CollisionInfo info) {
94 colliding = false;
95 }
96
97 /**
98 * Takes the collision info and verifies the results of the collision
99 * @param info the info linked to the collision
100 */
101 @Override
102 public void EnterTrigger(CollisionInfo info) {
103 colliding = true;
104 this.info = info;
105 getComponent(ObstacleControl.class).TryHit(info, true);
106 }
107
108 /**
109 * Sets the obstacle's status as not colliding
110 */
111 @Override
112 public void ExitTrigger(CollisionInfo info) {
113 colliding = false;
114 }
115
116 // public Obstacle(String texName, boolean trigger, float damage, int hitLimit) {
117 // this(texName, trigger, damage, -1f, hitLimit);
118 // }
119
120 // public Obstacle(String texName, boolean trigger, float damage, float hitRate) {
121 // this(texName, trigger, damage, hitRate, -1);
122 // }
123 }