Coverage Summary for Class: GameScreen (com.mygdx.game.UI)
Class |
Method, %
|
Line, %
|
GameScreen |
0%
(0/7)
|
0%
(0/147)
|
GameScreen$1 |
0%
(0/2)
|
0%
(0/2)
|
GameScreen$2 |
0%
(0/2)
|
0%
(0/2)
|
GameScreen$3 |
0%
(0/2)
|
0%
(0/2)
|
GameScreen$4 |
0%
(0/2)
|
0%
(0/2)
|
GameScreen$5 |
0%
(0/2)
|
0%
(0/2)
|
GameScreen$6 |
0%
(0/2)
|
0%
(0/2)
|
GameScreen$7 |
0%
(0/2)
|
0%
(0/2)
|
Total |
0%
(0/21)
|
0%
(0/161)
|
1 package com.mygdx.game.UI;
2
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.Input;
5 import com.badlogic.gdx.graphics.OrthographicCamera;
6 import com.badlogic.gdx.graphics.Pixmap;
7 import com.badlogic.gdx.scenes.scene2d.Actor;
8 import com.badlogic.gdx.scenes.scene2d.ui.*;
9 import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
10 import com.badlogic.gdx.utils.JsonValue;
11 import com.badlogic.gdx.utils.ScreenUtils;
12 import com.mygdx.game.Components.ComponentEvent;
13 import com.mygdx.game.Components.PlayerController;
14 import com.mygdx.game.Entitys.Player;
15 import com.mygdx.game.Managers.*;
16 import com.mygdx.game.PirateGame;
17 import com.mygdx.game.PowerUps.PowerUp;
18 import com.mygdx.game.Quests.Quest;
19
20 import java.util.ArrayList;
21 import java.util.HashMap;
22
23 import static com.mygdx.utils.Constants.*;
24
25 public class GameScreen extends Page {
26 private Label healthLabel;
27 private Label money;
28 private Label points;
29 private Label ammo;
30 private final Label questDesc;
31 private final Label questName;
32
33 public ArrayList<TextButton> powerUpButtons; // Added for Assessment 2, keep track of Shop Buttons
34 public Pixmap pixmap;
35 private float accumulator;
36
37 /**
38 * Boots up the actual game: starts PhysicsManager, GameManager, EntityManager,
39 * loads texture atlases into ResourceManager. Draws quest and control info.
40 *
41 * @param parent PirateGame UI screen container
42 * @param id_map the resource id of the tile map
43 */
44 public GameScreen(PirateGame parent, int id_map) {
45 super(parent);
46 INIT_CONSTANTS();
47 PhysicsManager.Initialize(false);
48
49 /*int id_ship = ResourceManager.addTexture("ship.png");
50 int id_map = ResourceManager.addTileMap("Map.tmx");
51 int atlas_id = ResourceManager.addTextureAtlas("Boats.txt");
52 int extras_id = ResourceManager.addTextureAtlas("UISkin/skin.atlas");
53 int buildings_id = ResourceManager.addTextureAtlas("Buildings.txt");
54 ResourceManager.loadAssets();*/
55
56 GameManager.SpawnGame(id_map);
57 //QuestManager.addQuest(new KillQuest(c));
58
59 EntityManager.raiseEvents(ComponentEvent.Awake, ComponentEvent.Start);
60
61 Window questWindow = new Window("Current Quest", parent.skin);
62
63 Quest q = QuestManager.currentQuest();
64 Table t = new Table();
65 questName = new Label("NAME", parent.skin);
66 t.add(questName);
67 t.row();
68 questDesc = new Label("DESCRIPTION", parent.skin);
69 if (q != null) {
70 questName.setText(q.getName());
71 questDesc.setText(q.getDescription());
72 }
73
74 t.add(questDesc).left();
75 questWindow.add(t);
76 actors.add(questWindow);
77
78 Table t1 = new Table();
79 t1.top().right();
80 t1.setFillParent(true);
81 actors.add(t1);
82
83 Window tutWindow = new Window("Controls", parent.skin);
84 Table table = new Table();
85 tutWindow.add(table);
86 t1.add(tutWindow);
87
88 table.add(new Label("Move with", parent.skin)).top().left();
89 table.add(new Image(parent.skin, "key-w"));
90 table.add(new Image(parent.skin, "key-s"));
91 table.add(new Image(parent.skin, "key-a"));
92 table.add(new Image(parent.skin, "key-d"));
93 table.row();
94 table.add(new Label("Shoot in direction of mouse", parent.skin)).left();
95 //table.add(new Image(parent.skin, "space"));
96 table.add(new Image(parent.skin, "mouse"));
97 table.row();
98 table.add(new Label("Shoot in direction of ship", parent.skin)).left();
99 table.add(new Image(parent.skin, "space"));
100 table.row();
101 table.add(new Label("Pause", parent.skin)).left(); // changed to pause for assessment 2
102 table.add(new Image(parent.skin, "key-esc"));
103
104 HashMap<String, PowerUp> powerUps = new HashMap<>();
105
106 //create power ups
107 for (JsonValue powData : GameManager.getSettings().get("powerups")) {
108 PowerUp pow = new PowerUp(powData);
109 powerUps.put(powData.getString("id"), pow);
110 }
111
112 // start of addition for assessment 2 to add a shop to the UI
113 Table shop = new Table();
114 Window shopWin = new Window("Shop", parent.skin);
115 Table shopTable = new Table();
116
117 shop.bottom().right();
118 shop.setFillParent(true);
119 shop.add(shopWin);
120 shopWin.add(shopTable);
121 shopTable.pad(10);
122
123 powerUpButtons = new ArrayList<>();
124
125 //power up 1
126 PowerUp pow1 = powerUps.get("1");
127 TextButton powerUp1 = new TextButton(pow1.getName(), parent.skin);
128 powerUp1.addListener(new ChangeListener() {
129 @Override
130 public void changed(ChangeEvent event, Actor actor) {
131 pow1.buyPowerUp();
132 }
133 });
134 powerUpButtons.add(powerUp1);
135
136 //power up 2
137 PowerUp pow2 = powerUps.get("2");
138 TextButton powerUp2 = new TextButton(pow2.getName(), parent.skin);
139 powerUp2.addListener(new ChangeListener() {
140 @Override
141 public void changed(ChangeEvent event, Actor actor) {
142 pow2.buyPowerUp();
143 }
144 });
145 powerUpButtons.add(powerUp2);
146
147 //power up 3
148 PowerUp pow3 = powerUps.get("3");
149 TextButton powerUp3 = new TextButton(pow3.getName(), parent.skin);
150 powerUp3.addListener(new ChangeListener() {
151 @Override
152 public void changed(ChangeEvent event, Actor actor) {
153 pow3.buyPowerUp();
154 }
155 });
156 powerUpButtons.add(powerUp3);
157
158 //power up 4
159 PowerUp pow4 = powerUps.get("4");
160 TextButton powerUp4 = new TextButton(pow4.getName(), parent.skin);
161 powerUp4.addListener(new ChangeListener() {
162 @Override
163 public void changed(ChangeEvent event, Actor actor) {
164 pow4.buyPowerUp();
165 }
166 });
167 powerUpButtons.add(powerUp4);
168
169 //power up 5
170 PowerUp pow5 = powerUps.get("5");
171 TextButton powerUp5 = new TextButton(pow5.getName(), parent.skin);
172 powerUp5.addListener(new ChangeListener() {
173 @Override
174 public void changed(ChangeEvent event, Actor actor) {
175 pow5.buyPowerUp();
176 }
177 });
178 powerUpButtons.add(powerUp5);
179
180 //power up 6
181 PowerUp pow6 = powerUps.get("6");
182 TextButton powerUp6 = new TextButton(pow6.getName(), parent.skin);
183 powerUp6.addListener(new ChangeListener() {
184 @Override
185 public void changed(ChangeEvent event, Actor actor) {
186 pow6.buyPowerUp();
187 }
188 });
189 powerUpButtons.add(powerUp6);
190
191 //power up 7
192 PowerUp pow7 = powerUps.get("7");
193 TextButton powerUp7 = new TextButton(pow7.getName(), parent.skin);
194 powerUp7.addListener(new ChangeListener() {
195 @Override
196 public void changed(ChangeEvent event, Actor actor) {
197 pow7.buyPowerUp();
198 }
199 });
200 powerUpButtons.add(powerUp7);
201
202 //add power ups to shop table
203 for(TextButton button : powerUpButtons) {
204 shopTable.add(button).pad(10);
205 shopTable.row();
206 }
207
208 Player player = GameManager.getPlayer();
209 player.getComponent(PlayerController.class).setButtons(powerUpButtons);
210 actors.add(shop);
211 // end of addition for assessment 2
212 }
213
214 /**
215 * Called every frame calls all other functions that need to be called every frame by raising events and update methods
216 *
217 * @param delta delta time
218 */
219 @Override
220 public void render(float delta) {
221 ScreenUtils.clear(BACKGROUND_COLOUR.x, BACKGROUND_COLOUR.y, BACKGROUND_COLOUR.z, 1);
222 EntityManager.raiseEvents(ComponentEvent.Update, ComponentEvent.Render);
223
224 accumulator += EntityManager.getDeltaTime();
225
226 // fixed update loop so that physics manager is called regally rather than somewhat randomly
227 while (accumulator >= PHYSICS_TIME_STEP) {
228 PhysicsManager.update();
229 accumulator -= PHYSICS_TIME_STEP;
230 }
231
232 GameManager.update();
233 // show end screen if esc is pressed
234 if (Gdx.input.isKeyJustPressed(Input.Keys.ESCAPE)) {
235 parent.pause();
236 pixmap = Pixmap.createFromFrameBuffer(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
237 parent.setScreen(parent.pause);
238 }
239 super.render(delta);
240 }
241
242 /**
243 * disposed of all stuff it something is missing from this method you will get memory leaks
244 */
245 @Override
246 public void dispose() {
247 super.dispose();
248 ResourceManager.cleanUp();
249 EntityManager.cleanUp();
250 RenderingManager.cleanUp();
251 PhysicsManager.cleanUp();
252 }
253
254 /**
255 * Resize camera, effectively setting the viewport to display game assets
256 * at pixel ratios other than 1:1.
257 *
258 * @param width of camera viewport
259 * @param height of camera viewport
260 */
261 @Override
262 public void resize(int width, int height) {
263 //((Table) actors.get(0)).setFillParent(false);
264 super.resize(width, height);
265 OrthographicCamera cam = RenderingManager.getCamera();
266 cam.viewportWidth = width / ZOOM;
267 cam.viewportHeight = height / ZOOM;
268 cam.update();
269
270 // ((Table) actors.get(0)).setFillParent(true);
271 }
272
273 /**
274 * Update the UI with new values for health, quest status, etc.
275 * also called once per frame but used for actors by my own convention
276 */
277 //private String prevQuest = "";
278 @Override
279 protected void update() {
280 super.update();
281 Player p = GameManager.getPlayer();
282
283 healthLabel.setText(String.valueOf(p.getHealth()));
284 money.setText(String.valueOf(p.getPlunder()));
285 points.setText(String.valueOf(p.getPoints()));
286 ammo.setText(String.valueOf(p.getAmmo()));
287 if (!QuestManager.anyQuests()) {
288 parent.end.win();
289 parent.setScreen(parent.end);
290
291 } else {
292 Quest q = QuestManager.currentQuest();
293 /*if(Objects.equals(prevQuest, "")) {
294 prevQuest = q.getDescription();
295 }
296 if(!Objects.equals(prevQuest, q.getDescription())) {
297 questComplete.setText("Quest Competed");
298 prevQuest = "";
299 }*/
300 assert q != null;
301 questName.setText(q.getName());
302 questDesc.setText(q.getDescription());
303 }
304 if (!p.isAlive()) {
305 parent.setScreen(parent.end);
306 }
307 /*if(!questComplete.getText().equals("")) {
308 showTimer += EntityManager.getDeltaTime();
309 }
310 if(showTimer >= showDuration) {
311 showTimer = 0;
312 questComplete.setText("");
313 }*/
314 }
315
316 /**
317 * Draw UI elements showing player health, plunder, and ammo.
318 */
319 @Override
320 protected void CreateActors() {
321 Table table = new Table();
322 table.setFillParent(true);
323 actors.add(table);
324
325 table.add(new Image(parent.skin.getDrawable("heart"))).top().left().size(1.25f * TILE_SIZE);
326 healthLabel = new Label("N/A", parent.skin);
327 table.add(healthLabel).top().left().size(50);
328
329 table.row();
330 table.setDebug(false);
331
332 table.add(new Image(parent.skin.getDrawable("coin"))).top().left().size(1.25f * TILE_SIZE);
333 money = new Label("N/A", parent.skin);
334 table.add(money).top().left().size(50);
335
336 table.row();
337
338 table.add(new Image(parent.skin.getDrawable("point"))).top().left().size(1.25f * TILE_SIZE);
339 points = new Label("N/A", parent.skin);
340 table.add(points).top().left().size(50);
341
342 table.row();
343
344 table.add(new Image(parent.skin.getDrawable("ball"))).top().left().size(1.25f * TILE_SIZE);
345 ammo = new Label("N/A", parent.skin);
346 table.add(ammo).top().left().size(50);
347
348 table.top().left();
349 }
350 }