Coverage Summary for Class: PlayerController (com.mygdx.game.Components)
Class |
Class, %
|
Method, %
|
Line, %
|
PlayerController |
100%
(1/1)
|
40%
(2/5)
|
15%
(6/40)
|
1 package com.mygdx.game.Components;
2
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.Input;
5 import com.badlogic.gdx.math.Vector2;
6 import com.badlogic.gdx.math.Vector3;
7 import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
8 import com.mygdx.game.Entitys.Player;
9 import com.mygdx.game.Entitys.Ship;
10 import com.mygdx.game.Managers.RenderingManager;
11 import com.mygdx.game.UI.GameScreen;
12
13 import java.util.ArrayList;
14
15 import static com.mygdx.utils.Constants.HALF_DIMENSIONS;
16
17 /**
18 * Responsible for the keyboard/mouse control of the player
19 */
20 public class PlayerController extends Component {
21 private Player player;
22 private float speed;
23 private ArrayList<TextButton> buttons; //Added for Assessment 2, stores list of Shop UI buttons
24
25 /**
26 * Creates the base PlayerController Component, setting up its initial values
27 */
28 public PlayerController() {
29 super();
30 type = ComponentType.PlayerController;
31 setRequirements(ComponentType.RigidBody);
32 }
33
34 /**
35 * @param player the parent
36 * @param speed speed
37 */
38 public PlayerController(Player player, float speed) {
39 this();
40 this.player = player;
41 this.speed = speed;
42 }
43
44 /**
45 * Amended for Assessment 2, added check for Shop UI elements being pressed before shooting
46 * Reads keyboard and mouse inputs, moving and shooting as required.
47 */
48 @Override
49 public void update() {
50 super.update();
51 final float s = speed;
52
53 Vector2 dir = getDirFromWASDInput();
54 ((Ship) parent).setShipDirection(dir);
55 dir.scl(s);
56
57 RigidBody rb = parent.getComponent(RigidBody.class);
58 rb.setVelocity(dir);
59
60 RenderingManager.getCamera().position.set(new Vector3(player.getPosition(), 0.0f));
61 RenderingManager.getCamera().update();
62
63 if (Gdx.input.isButtonJustPressed(Input.Buttons.LEFT)) {
64 if(buttons != null){
65 for(TextButton button : buttons){
66 if(button.isPressed()){
67 return;
68 }
69 }
70 }
71
72 int x = Gdx.input.getX();
73 int y = Gdx.input.getY();
74
75 // in range 0 to VIEWPORT 0, 0 bottom left
76 Vector2 delta = new Vector2(x, y);
77 delta.sub(HALF_DIMENSIONS); // center 0, 0
78 delta.nor();
79 delta.y *= -1;
80 // unit dir to fire
81 ((Ship) parent).shoot(delta);
82 }
83
84 if (Gdx.input.isKeyJustPressed(Input.Keys.SPACE)) {
85 // unit dir to fire
86 ((Ship) parent).shoot();
87 }
88 }
89
90 /**
91 * Converts WASD or arrows to direction of travel
92 * @return -1 <= (x, y) <= 1
93 */
94 private Vector2 getDirFromWASDInput() {
95 Vector2 dir = new Vector2(0, 0);
96
97 if (Gdx.input.isKeyPressed(Input.Keys.W) || Gdx.input.isKeyPressed(Input.Keys.DPAD_UP)) {
98 dir.y += 1;
99 }
100
101 if (Gdx.input.isKeyPressed(Input.Keys.S) || Gdx.input.isKeyPressed(Input.Keys.DPAD_DOWN)) {
102 dir.y -= 1;
103 }
104
105 if (Gdx.input.isKeyPressed(Input.Keys.A) || Gdx.input.isKeyPressed(Input.Keys.DPAD_LEFT)) {
106 dir.x -= 1;
107 }
108
109 if (Gdx.input.isKeyPressed(Input.Keys.D) || Gdx.input.isKeyPressed(Input.Keys.DPAD_RIGHT)) {
110 dir.x += 1;
111 }
112 return dir;
113 }
114
115 /**
116 * @param buttons the list of ShopUI buttons
117 */
118 public void setButtons(ArrayList<TextButton> buttons) {
119 this.buttons = buttons;
120 }
121 }