diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..3bf3f74 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,10 @@ + + + + + Fiasko pages + + + Javadoc + + \ No newline at end of file diff --git a/src/main/java/inf112/fiasko/roborally/Main.java b/src/main/java/inf112/fiasko/roborally/Main.java index bb47ba0..ac253b3 100644 --- a/src/main/java/inf112/fiasko/roborally/Main.java +++ b/src/main/java/inf112/fiasko/roborally/Main.java @@ -9,12 +9,12 @@ import inf112.fiasko.roborally.ui.RoboRallyWrapper; */ public class Main { public static void main(String[] args) { - LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); - cfg.title = "Robo Rally"; - cfg.width = 900; - cfg.height = 900; - cfg.samples = 3; + LwjglApplicationConfiguration configuration = new LwjglApplicationConfiguration(); + configuration.title = "Robo Rally"; + configuration.width = 900; + configuration.height = 900; + configuration.samples = 3; - new LwjglApplication(new RoboRallyWrapper(), cfg); + new LwjglApplication(new RoboRallyWrapper(), configuration); } } \ No newline at end of file diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java index 07e3bf0..105f64c 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClientListener.java @@ -104,7 +104,7 @@ class RoboRallyClientListener extends Listener { */ private void receiveHand(HandResponse newHand) { new Thread(() -> { - //Prevents a bug where the game + //Prevents a bug where the game enters an infinite loading screen while (wrapper.getGame().getGameState() != GameState.WAITING_FOR_CARDS_FROM_SERVER) { try { TimeUnit.MILLISECONDS.sleep(100); diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServerListener.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServerListener.java index 51e3227..fefcba7 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServerListener.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServerListener.java @@ -7,7 +7,7 @@ import inf112.fiasko.roborally.networking.containers.ErrorResponse; import inf112.fiasko.roborally.networking.containers.HurryResponse; import inf112.fiasko.roborally.networking.containers.OkayResponse; import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse; -import inf112.fiasko.roborally.networking.containers.ProgramAndPowerdownRequest; +import inf112.fiasko.roborally.networking.containers.ProgramAndPowerDownRequest; import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse; import inf112.fiasko.roborally.networking.containers.UsernameRequest; import inf112.fiasko.roborally.objects.ProgrammingCard; @@ -28,7 +28,7 @@ class RoboRallyServerListener extends Listener { private final RoboRallyServer server; private Connection host; private Map stayInPowerDown; - private Map programs; + private Map programs; private boolean gameStarted = false; /** @@ -111,8 +111,8 @@ class RoboRallyServerListener extends Listener { receivedUsername(connection, (UsernameRequest) object); } else if (object instanceof Boolean) { receiveContinuePowerDown(connection, (Boolean) object); - } else if (object instanceof ProgramAndPowerdownRequest) { - receiveProgramAndPowerDownRequest(connection, (ProgramAndPowerdownRequest) object); + } else if (object instanceof ProgramAndPowerDownRequest) { + receiveProgramAndPowerDownRequest(connection, (ProgramAndPowerDownRequest) object); } } @@ -157,14 +157,14 @@ class RoboRallyServerListener extends Listener { * @param connection The connection sending the program and power down request * @param request The program and power down request received */ - private void receiveProgramAndPowerDownRequest(Connection connection, ProgramAndPowerdownRequest request) { + private void receiveProgramAndPowerDownRequest(Connection connection, ProgramAndPowerDownRequest request) { programs.put(connection, request); connection.sendTCP(new OkayResponse()); if (receivedDataFromAllConnections(programs)) { Map powerDown = new HashMap<>(); Map> program = new HashMap<>(); for (Connection connected : programs.keySet()) { - powerDown.put(playerNames.get(connected), programs.get(connected).getPowerdown()); + powerDown.put(playerNames.get(connected), programs.get(connected).getPowerDown()); program.put(playerNames.get(connected), programs.get(connected).getProgram()); } server.sendToAllClients(new ProgramsContainerResponse(program, powerDown)); diff --git a/src/main/java/inf112/fiasko/roborally/networking/containers/ErrorResponse.java b/src/main/java/inf112/fiasko/roborally/networking/containers/ErrorResponse.java index 2b4a538..9f765c4 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/containers/ErrorResponse.java +++ b/src/main/java/inf112/fiasko/roborally/networking/containers/ErrorResponse.java @@ -21,7 +21,6 @@ public class ErrorResponse { * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!! */ public ErrorResponse() { - } /** diff --git a/src/main/java/inf112/fiasko/roborally/networking/containers/ProgramAndPowerDownRequest.java b/src/main/java/inf112/fiasko/roborally/networking/containers/ProgramAndPowerDownRequest.java new file mode 100644 index 0000000..684e6fe --- /dev/null +++ b/src/main/java/inf112/fiasko/roborally/networking/containers/ProgramAndPowerDownRequest.java @@ -0,0 +1,48 @@ +package inf112.fiasko.roborally.networking.containers; + +import inf112.fiasko.roborally.objects.ProgrammingCard; + +import java.util.List; + +/** + * A request containing a player's program and whether it wants to enter power down next round + */ +public class ProgramAndPowerDownRequest { + private Boolean powerDown; + private List program; + + /** + * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!! + */ + public ProgramAndPowerDownRequest() { + } + + /** + * Instantiates a new program and power down request + * + * @param powerDown Whether the player wants to enter power down next round + * @param program The program the player has programmed + */ + public ProgramAndPowerDownRequest(Boolean powerDown, List program) { + this.program = program; + this.powerDown = powerDown; + } + + /** + * Gets the program contained within this request + * + * @return The program sent by the player + */ + public List getProgram() { + return program; + } + + /** + * Gets the power down status contained within this request + * + * @return Whether the player wants to power down next round + */ + public Boolean getPowerDown() { + return powerDown; + } +} diff --git a/src/main/java/inf112/fiasko/roborally/networking/containers/ProgramAndPowerdownRequest.java b/src/main/java/inf112/fiasko/roborally/networking/containers/ProgramAndPowerdownRequest.java deleted file mode 100644 index 112e148..0000000 --- a/src/main/java/inf112/fiasko/roborally/networking/containers/ProgramAndPowerdownRequest.java +++ /dev/null @@ -1,29 +0,0 @@ -package inf112.fiasko.roborally.networking.containers; - -import inf112.fiasko.roborally.objects.ProgrammingCard; - -import java.util.List; - -public class ProgramAndPowerdownRequest { - private Boolean powerdown; - private List program; - - /** - * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!! - */ - public ProgramAndPowerdownRequest() { - } - - public ProgramAndPowerdownRequest(Boolean powerdown, List program) { - this.program = program; - this.powerdown = powerdown; - } - - public List getProgram() { - return program; - } - - public Boolean getPowerdown() { - return powerdown; - } -} diff --git a/src/main/java/inf112/fiasko/roborally/networking/containers/UsernameRequest.java b/src/main/java/inf112/fiasko/roborally/networking/containers/UsernameRequest.java index 472c225..96b57fc 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/containers/UsernameRequest.java +++ b/src/main/java/inf112/fiasko/roborally/networking/containers/UsernameRequest.java @@ -10,7 +10,6 @@ public class UsernameRequest { * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!! */ public UsernameRequest() { - } /** diff --git a/src/main/java/inf112/fiasko/roborally/objects/AbstractDeck.java b/src/main/java/inf112/fiasko/roborally/objects/AbstractDeck.java index c0a6b6a..f24ed1a 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/AbstractDeck.java +++ b/src/main/java/inf112/fiasko/roborally/objects/AbstractDeck.java @@ -10,6 +10,9 @@ import java.util.Random; public abstract class AbstractDeck implements Deck { private final List cardList; + /** + * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!! + */ public AbstractDeck() { this.cardList = new ArrayList<>(); } diff --git a/src/main/java/inf112/fiasko/roborally/objects/Board.java b/src/main/java/inf112/fiasko/roborally/objects/Board.java index c1807de..272ff04 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/Board.java +++ b/src/main/java/inf112/fiasko/roborally/objects/Board.java @@ -26,8 +26,8 @@ public class Board { private Map robots; private List deadRobots; private List realDeadRobots; - private List dangerousTiles; private List> wallLasers; + private List> repairTiles; /** * Initializes the board @@ -54,22 +54,10 @@ public class Board { this.particles = new ListGrid<>(tiles.getWidth(), tiles.getHeight()); this.deadRobots = new ArrayList<>(); this.realDeadRobots = new ArrayList<>(); - this.dangerousTiles = new ArrayList<>(); - loadDangerousTileTypes(); wallLasers = getPositionsOfWallsOnBoard(WallType.WALL_LASER_SINGLE, WallType.WALL_LASER_DOUBLE, WallType.WALL_LASER_TRIPLE); - } - - /** - * Adds tile types which will kill the robot to the dangerousTiles list - */ - private void loadDangerousTileTypes() { - dangerousTiles.add(TileType.HOLE); - dangerousTiles.add(TileType.PIT_CORNER); - dangerousTiles.add(TileType.PIT_EMPTY); - dangerousTiles.add(TileType.PIT_FULL); - dangerousTiles.add(TileType.PIT_NORMAL); - dangerousTiles.add(TileType.PIT_U); + repairTiles = getPositionsOfTilesOnBoard(TileType.WRENCH, + TileType.WRENCH_AND_HAMMER, TileType.FLAG_1, TileType.FLAG_2, TileType.FLAG_3, TileType.FLAG_4); } /** @@ -241,7 +229,7 @@ public class Board { /** * Removes one damage for a given robot given that it has taken som damage before * - * @param robotID the ID of the robot + * @param robotID The ID of the robot */ public void repairRobotOnTile(RobotID robotID) { Robot robot = robots.get(robotID); @@ -264,7 +252,7 @@ public class Board { * Get the damage of a specific robot * * @param robot The RobotID of a robot - * @return The amount of damage the robot has currently + * @return The amount of damage the robot currently has */ public int getRobotDamage(RobotID robot) { return robots.get(robot).getDamageTaken(); @@ -299,7 +287,7 @@ public class Board { } robot.setPosition(newPosition); //Some tiles may kill the robot if stepped on. - killRobotIfStepsOnDangerousTile(robot, newPosition); + killRobotIfStepsInHole(robot, newPosition); return true; } @@ -443,7 +431,7 @@ public class Board { /** * Moves all dead robots to their backups and makes them part of the board again, and if a robot has no lives - * it will be removed from the game. + * it will be removed from the game */ public void respawnRobots() { for (Robot robot : deadRobots) { @@ -478,14 +466,14 @@ public class Board { } return; } - int circleSize = 1; + int squareSize = 1; boolean hasRespawned = false; while (!hasRespawned) { - hasRespawned = tryRobotRespawn(robot, circleSize, startX, startY, Direction.NORTH) || - tryRobotRespawn(robot, circleSize, startX, startY, Direction.EAST) || - tryRobotRespawn(robot, circleSize, startX, startY, Direction.SOUTH) || - tryRobotRespawn(robot, circleSize, startX, startY, Direction.WEST); - circleSize++; + hasRespawned = tryRobotRespawn(robot, squareSize, startX, startY, Direction.NORTH) || + tryRobotRespawn(robot, squareSize, startX, startY, Direction.EAST) || + tryRobotRespawn(robot, squareSize, startX, startY, Direction.SOUTH) || + tryRobotRespawn(robot, squareSize, startX, startY, Direction.WEST); + squareSize++; } } @@ -560,8 +548,6 @@ public class Board { * Updates backup position of all robots on a repair tile */ public void updateRobotBackups() { - List> repairTiles = getPositionsOfTilesOnBoard(TileType.WRENCH, - TileType.WRENCH_AND_HAMMER, TileType.FLAG_1, TileType.FLAG_2, TileType.FLAG_3, TileType.FLAG_4); for (BoardElementContainer repairTile : repairTiles) { Position position = repairTile.getPosition(); if (hasRobotOnPosition(position)) { @@ -751,13 +737,8 @@ public class Board { * @param robot The robot attempting to move * @param newPosition The position the robot is attempting to move to */ - private void killRobotIfStepsOnDangerousTile(Robot robot, Position newPosition) { - Tile tileRobotStepsOn = tiles.getElement(newPosition.getXCoordinate(), newPosition.getYCoordinate()); - if (tileRobotStepsOn == null) { - throw new IllegalArgumentException("The game board is missing a tile. This should not happen."); - } - TileType tileTypeRobotStepsOn = tileRobotStepsOn.getType(); - if (dangerousTiles.contains(tileTypeRobotStepsOn)) { + private void killRobotIfStepsInHole(Robot robot, Position newPosition) { + if (hasHole(newPosition)) { killRobot(robot); } } @@ -815,12 +796,16 @@ public class Board { * @param wallLaser The wall laser being fired */ private void fireWallLaser(BoardElementContainer wallLaser) { + //Reverses direction since a laser points the opposite direction of the wall it's attached to Direction laserDirection = Direction.getReverseDirection(wallLaser.getElement().getDirection()); List laserTargets = new ArrayList<>(); + //Stores all positions visited by the laser beam in laserTargets getLaserTarget(laserDirection, wallLaser.getPosition(), laserTargets); Position hitPosition = laserTargets.get(laserTargets.size() - 1); WallType laserType = wallLaser.getElement().getType(); + //Displays the laser beam in the particle grid updateLaserDisplay(laserTargets, laserDirection, laserType); + //Applies damage if the laser stops because it hits a robot if (getRobotOnPosition(hitPosition) != null) { applyLaserDamage(laserType, robots.get(getRobotOnPosition(hitPosition))); } diff --git a/src/main/java/inf112/fiasko/roborally/objects/Phase.java b/src/main/java/inf112/fiasko/roborally/objects/Phase.java index 183dd31..5ef104d 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/Phase.java +++ b/src/main/java/inf112/fiasko/roborally/objects/Phase.java @@ -148,15 +148,22 @@ public class Phase { List playerProgram = player.getProgram(); if (!playerProgram.isEmpty()) { ProgrammingCard programmingCard = playerProgram.get(phase - 1); + //Stores the original priority of the program originalPriority.add(programmingCard.getPriority()); + //Stores the player's robot robotsToDoAction.add(player.getRobotID()); + //Stores the programming card to be run programToBeRun.add(programmingCard); } } + //Sorts the programming cards Collections.sort(programToBeRun); for (ProgrammingCard card : programToBeRun) { - int i = originalPriority.indexOf(card.getPriority()); - RobotID robot = robotsToDoAction.get(i); + //Gets the index of the priority of the card which is equal to the index of the robot + int robotIndex = originalPriority.indexOf(card.getPriority()); + //Gets the robot belonging to the player which played the programming card + RobotID robot = robotsToDoAction.get(robotIndex); + //Moves the robot according to the programming card makeMove(robot, card.getAction()); } } @@ -253,6 +260,7 @@ public class Phase { if (game != null) { game.setWinningPlayerName(player.getName()); game.setGameState(GameState.GAME_IS_WON); + //Sleeps to prevent the game state to change before the wrapper catches up try { Thread.sleep(1000 * cycleDelay); } catch (InterruptedException e) { diff --git a/src/main/java/inf112/fiasko/roborally/objects/Player.java b/src/main/java/inf112/fiasko/roborally/objects/Player.java index eae25b2..a473f42 100644 --- a/src/main/java/inf112/fiasko/roborally/objects/Player.java +++ b/src/main/java/inf112/fiasko/roborally/objects/Player.java @@ -30,7 +30,7 @@ public class Player { } /** - * Empty constructor required by kryo + * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!! */ public Player() { } diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/BoardActiveScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/BoardActiveScreen.java index af3acb7..40ff273 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/BoardActiveScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/BoardActiveScreen.java @@ -8,7 +8,6 @@ import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.viewport.ExtendViewport; import inf112.fiasko.roborally.objects.DrawableGame; -import inf112.fiasko.roborally.ui.DrawableObject; import inf112.fiasko.roborally.objects.InteractableGame; import inf112.fiasko.roborally.objects.Player; import inf112.fiasko.roborally.objects.Robot; @@ -17,6 +16,7 @@ import inf112.fiasko.roborally.objects.properties.Direction; import inf112.fiasko.roborally.objects.properties.GameState; import inf112.fiasko.roborally.objects.properties.RobotID; import inf112.fiasko.roborally.objects.properties.TileType; +import inf112.fiasko.roborally.ui.DrawableObject; import inf112.fiasko.roborally.ui.RoboRallyWrapper; import inf112.fiasko.roborally.utility.IOUtil; import inf112.fiasko.roborally.utility.TextureConverterUtil; diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/CardChoiceScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/CardChoiceScreen.java index aeed900..4e83f44 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/CardChoiceScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/CardChoiceScreen.java @@ -12,7 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.utils.viewport.FitViewport; -import inf112.fiasko.roborally.networking.containers.ProgramAndPowerdownRequest; +import inf112.fiasko.roborally.networking.containers.ProgramAndPowerDownRequest; import inf112.fiasko.roborally.objects.InteractableGame; import inf112.fiasko.roborally.objects.ProgrammingCard; import inf112.fiasko.roborally.objects.ProgrammingCardDeck; @@ -121,7 +121,9 @@ public class CardChoiceScreen extends InteractiveScreen { } /** - * Confirm cards and send to server if all are chosen + * Confirm cards and send to server together with power down choice if all are chosen + * + * @param requestPowerDown Whether the user wants to enter power down */ private void confirmCards(Boolean requestPowerDown) { if (chosenCards.size() == maxCards) { @@ -131,7 +133,7 @@ public class CardChoiceScreen extends InteractiveScreen { game.setProgram(newProgram); game.setGameState(GameState.WAITING_FOR_OTHER_PLAYERS_PROGRAMS); roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getLoadingScreen(this.roboRallyWrapper)); - roboRallyWrapper.client.sendElement(new ProgramAndPowerdownRequest(requestPowerDown, newProgram)); + roboRallyWrapper.client.sendElement(new ProgramAndPowerDownRequest(requestPowerDown, newProgram)); } else { JOptionPane.showMessageDialog(null, "You need to choose all your cards" + " before confirming."); diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/IPAddressScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/IPAddressScreen.java index a4ed368..1c098f7 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/IPAddressScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/IPAddressScreen.java @@ -51,7 +51,27 @@ public class IPAddressScreen extends AbstractScreen { stage.addActor(selectBox); - joinButton.addListener(new ClickListener() { + joinButton.addListener(getJoinButtonListener(selectBox)); + textInput = new TextField("", skin); + textInput.setPosition(applicationWidth / 2f - textInput.getWidth() / 2f, 250); + textInput.setSize(150, 40); + stage.addActor(textInput); + stage.addActor(joinButton); + + viewport = new FitViewport(applicationWidth, applicationHeight, camera); + this.roboRallyWrapper = roboRallyWrapper; + camera.setToOrtho(false, applicationWidth, applicationHeight); + stage.setViewport(viewport); + } + + /** + * Gets the listener to use for the join button + * + * @param selectBox The select box containing ip addresses of local servers + * @return A click listener to trigger on the join button + */ + private ClickListener getJoinButtonListener(SelectBox selectBox) { + return new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { return true; @@ -77,21 +97,11 @@ public class IPAddressScreen extends AbstractScreen { roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getUsernameScreen(roboRallyWrapper)); } catch (IOException | NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Could not connect to the server." - + " Please make sure the ip address you typed is correct, and that the server is online.", - "Error", JOptionPane.ERROR_MESSAGE); + + " Please make sure the ip address you typed is correct, and that the server is " + + "online.", "Error", JOptionPane.ERROR_MESSAGE); } } - }); - textInput = new TextField("", skin); - textInput.setPosition(applicationWidth / 2f - textInput.getWidth() / 2f, 250); - textInput.setSize(150, 40); - stage.addActor(textInput); - stage.addActor(joinButton); - - viewport = new FitViewport(applicationWidth, applicationHeight, camera); - this.roboRallyWrapper = roboRallyWrapper; - camera.setToOrtho(false, applicationWidth, applicationHeight); - stage.setViewport(viewport); + }; } @Override diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/LoadingScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/LoadingScreen.java index 6fbf83c..8d1dbf2 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/LoadingScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/LoadingScreen.java @@ -3,7 +3,7 @@ package inf112.fiasko.roborally.ui.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.utils.viewport.ExtendViewport; -import inf112.fiasko.roborally.networking.containers.ProgramAndPowerdownRequest; +import inf112.fiasko.roborally.networking.containers.ProgramAndPowerDownRequest; import inf112.fiasko.roborally.objects.properties.GameState; import inf112.fiasko.roborally.ui.RoboRallyWrapper; @@ -68,7 +68,7 @@ public class LoadingScreen extends AbstractScreen { case SKIP_STAY_IN_POWER_DOWN: return "Waiting for players to choose whether to stay in power down..."; default: - return "Waiting for something..."; + return "Loading..."; } } @@ -94,7 +94,7 @@ public class LoadingScreen extends AbstractScreen { case SKIP_POWER_DOWN_SCREEN: roboRallyWrapper.roboRallyGame.setGameState(GameState.WAITING_FOR_OTHER_PLAYERS_PROGRAMS); roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getLoadingScreen(this.roboRallyWrapper)); - roboRallyWrapper.client.sendElement(new ProgramAndPowerdownRequest(false, new ArrayList<>())); + roboRallyWrapper.client.sendElement(new ProgramAndPowerDownRequest(false, new ArrayList<>())); break; default: //Ignored diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/StartMenuScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/StartMenuScreen.java index c53f4e0..95e179d 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/StartMenuScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/StartMenuScreen.java @@ -42,7 +42,32 @@ public class StartMenuScreen extends AbstractScreen { textInput.setText(String.valueOf(roboRallyWrapper.networkPort)); stage.addActor(textInput); - serverButton.addListener(new ClickListener() { + serverButton.addListener(getCreateButtonListener()); + + TextButton clientButton = new SimpleButton("Join", roboRallyWrapper.font).getButton(); + stage.addActor(clientButton); + clientButton.setY(applicationHeight / 2f); + camera.setToOrtho(false, applicationWidth, applicationHeight); + Gdx.input.setInputProcessor(stage); + clientButton.addListener(getJoinButtonListener()); + + TextButton quitButton = new SimpleButton("Quit", roboRallyWrapper.font).getButton(); + stage.addActor(quitButton); + quitButton.setY(applicationHeight / 2f); + camera.setToOrtho(false, applicationWidth, applicationHeight); + quitButton.addListener(getQuitButtonListener()); + serverButton.setX(applicationWidth / 2f - serverButton.getWidth() - clientButton.getWidth() / 2 - 10); + clientButton.setX(applicationWidth / 2f - clientButton.getWidth() / 2); + quitButton.setX(applicationWidth / 2f + clientButton.getWidth() / 2 + 10); + } + + /** + * Gets the listener for the create button + * + * @return A click listener to trigger on the create button + */ + private ClickListener getCreateButtonListener() { + return new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { return true; @@ -61,14 +86,16 @@ public class StartMenuScreen extends AbstractScreen { roboRallyWrapper.quit("Server could not be started"); } } - }); + }; + } - TextButton clientButton = new SimpleButton("Join", roboRallyWrapper.font).getButton(); - stage.addActor(clientButton); - clientButton.setY(applicationHeight / 2f); - camera.setToOrtho(false, applicationWidth, applicationHeight); - Gdx.input.setInputProcessor(stage); - clientButton.addListener(new ClickListener() { + /** + * Gets the listener for the join button + * + * @return A click listener to trigger on the join button + */ + private ClickListener getJoinButtonListener() { + return new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { return true; @@ -78,13 +105,16 @@ public class StartMenuScreen extends AbstractScreen { public void touchUp(InputEvent event, float x, float y, int pointer, int button) { roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getIPAddressScreen(roboRallyWrapper)); } - }); + }; + } - TextButton quitButton = new SimpleButton("Quit", roboRallyWrapper.font).getButton(); - stage.addActor(quitButton); - quitButton.setY(applicationHeight / 2f); - camera.setToOrtho(false, applicationWidth, applicationHeight); - quitButton.addListener(new ClickListener() { + /** + * Gets the listener for the quit button + * + * @return A click listener to trigger on the quit button + */ + private ClickListener getQuitButtonListener() { + return new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { return true; @@ -94,10 +124,7 @@ public class StartMenuScreen extends AbstractScreen { public void touchUp(InputEvent event, float x, float y, int pointer, int button) { roboRallyWrapper.quit(); } - }); - serverButton.setX(applicationWidth / 2f - serverButton.getWidth() - clientButton.getWidth() / 2 - 10); - clientButton.setX(applicationWidth / 2f - clientButton.getWidth() / 2); - quitButton.setX(applicationWidth / 2f + clientButton.getWidth() / 2 + 10); + }; } @Override diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/UsernameScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/UsernameScreen.java index f0bf907..ca3717b 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/UsernameScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/UsernameScreen.java @@ -32,7 +32,26 @@ public class UsernameScreen extends AbstractScreen { TextButton confirm = new TextButton("Confirm", skin); confirm.setSize(300, 60); confirm.setPosition(applicationWidth / 2f - confirm.getWidth() / 2, 300); - confirm.addListener(new ClickListener() { + confirm.addListener(getConfirmButtonClickListener()); + textInput = new TextField("", skin); + textInput.setPosition(applicationWidth / 2f - textInput.getWidth() / 2, 250); + textInput.setSize(150, 40); + stage.addActor(textInput); + stage.addActor(confirm); + + viewport = new FitViewport(applicationWidth, applicationHeight, camera); + this.roboRallyWrapper = roboRallyWrapper; + camera.setToOrtho(false, applicationWidth, applicationHeight); + stage.setViewport(viewport); + } + + /** + * Gets the listener for the confirm button + * + * @return A click listener to trigger on the confirm button + */ + private ClickListener getConfirmButtonClickListener() { + return new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { return true; @@ -52,17 +71,7 @@ public class UsernameScreen extends AbstractScreen { } } - }); - textInput = new TextField("", skin); - textInput.setPosition(applicationWidth / 2f - textInput.getWidth() / 2, 250); - textInput.setSize(150, 40); - stage.addActor(textInput); - stage.addActor(confirm); - - viewport = new FitViewport(applicationWidth, applicationHeight, camera); - this.roboRallyWrapper = roboRallyWrapper; - camera.setToOrtho(false, applicationWidth, applicationHeight); - stage.setViewport(viewport); + }; } /** diff --git a/src/main/java/inf112/fiasko/roborally/ui/screens/WinnerScreen.java b/src/main/java/inf112/fiasko/roborally/ui/screens/WinnerScreen.java index d9dee33..0925e4c 100644 --- a/src/main/java/inf112/fiasko/roborally/ui/screens/WinnerScreen.java +++ b/src/main/java/inf112/fiasko/roborally/ui/screens/WinnerScreen.java @@ -26,7 +26,19 @@ public class WinnerScreen extends AbstractScreen { stage.addActor(quitButton); quitButton.setY(applicationHeight / 2f); camera.setToOrtho(false, applicationWidth, applicationHeight); - quitButton.addListener(new ClickListener() { + quitButton.addListener(getQuitButtonListener()); + quitButton.setX(applicationWidth / 2f + quitButton.getWidth() / 2); + this.roboRallyWrapper = roboRallyWrapper; + camera.setToOrtho(false, applicationWidth, applicationHeight); + } + + /** + * Gets the listener for the quit button + * + * @return A click listener to trigger on the quit button + */ + private ClickListener getQuitButtonListener() { + return new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { return true; @@ -36,10 +48,7 @@ public class WinnerScreen extends AbstractScreen { public void touchUp(InputEvent event, float x, float y, int pointer, int button) { Gdx.app.exit(); } - }); - quitButton.setX(applicationWidth / 2f + quitButton.getWidth() / 2); - this.roboRallyWrapper = roboRallyWrapper; - camera.setToOrtho(false, applicationWidth, applicationHeight); + }; } @Override diff --git a/src/main/java/inf112/fiasko/roborally/utility/DeckLoaderUtil.java b/src/main/java/inf112/fiasko/roborally/utility/DeckLoaderUtil.java index 5b0e363..7759231 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/DeckLoaderUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/DeckLoaderUtil.java @@ -15,6 +15,9 @@ import java.util.List; */ public final class DeckLoaderUtil { + private DeckLoaderUtil() { + } + /** * Returns a programming card deck containing all official programming cards * diff --git a/src/main/java/inf112/fiasko/roborally/utility/GridUtil.java b/src/main/java/inf112/fiasko/roborally/utility/GridUtil.java index 5de6498..5683592 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/GridUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/GridUtil.java @@ -13,6 +13,9 @@ import java.util.List; */ public final class GridUtil { + private GridUtil() { + } + /** * Gets all elements in a grid * diff --git a/src/main/java/inf112/fiasko/roborally/utility/IOUtil.java b/src/main/java/inf112/fiasko/roborally/utility/IOUtil.java index 641eb17..7f1d2b4 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/IOUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/IOUtil.java @@ -3,7 +3,6 @@ package inf112.fiasko.roborally.utility; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.esotericsoftware.kryonet.Connection; import inf112.fiasko.roborally.objects.DrawableGame; -import inf112.fiasko.roborally.ui.DrawableObject; import inf112.fiasko.roborally.objects.Particle; import inf112.fiasko.roborally.objects.Player; import inf112.fiasko.roborally.objects.Robot; @@ -12,6 +11,7 @@ import inf112.fiasko.roborally.objects.Wall; import inf112.fiasko.roborally.objects.properties.Direction; import inf112.fiasko.roborally.objects.properties.Position; import inf112.fiasko.roborally.objects.properties.RobotID; +import inf112.fiasko.roborally.ui.DrawableObject; import java.util.ArrayList; import java.util.List; @@ -21,6 +21,7 @@ import java.util.Map; * This class helps with tasks which mix primitive classes and classes from external libraries */ public final class IOUtil { + private IOUtil() { } diff --git a/src/main/java/inf112/fiasko/roborally/utility/LaserHelper.java b/src/main/java/inf112/fiasko/roborally/utility/LaserHelper.java index 8186cf5..cadadfb 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/LaserHelper.java +++ b/src/main/java/inf112/fiasko/roborally/utility/LaserHelper.java @@ -10,6 +10,9 @@ import inf112.fiasko.roborally.objects.properties.WallType; */ public final class LaserHelper { + private LaserHelper() { + } + /** * Gets the correct particle type from a laser type * diff --git a/src/main/java/inf112/fiasko/roborally/utility/NetworkUtil.java b/src/main/java/inf112/fiasko/roborally/utility/NetworkUtil.java index fe49400..20d22a3 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/NetworkUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/NetworkUtil.java @@ -7,7 +7,7 @@ import inf112.fiasko.roborally.networking.containers.HandResponse; import inf112.fiasko.roborally.networking.containers.HurryResponse; import inf112.fiasko.roborally.networking.containers.OkayResponse; import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse; -import inf112.fiasko.roborally.networking.containers.ProgramAndPowerdownRequest; +import inf112.fiasko.roborally.networking.containers.ProgramAndPowerDownRequest; import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse; import inf112.fiasko.roborally.networking.containers.UsernameRequest; import inf112.fiasko.roborally.objects.Deck; @@ -25,6 +25,9 @@ import java.util.HashMap; */ public final class NetworkUtil { + private NetworkUtil() { + } + /** * Registers all classes which can be sent between a server and a client * @@ -40,7 +43,7 @@ public final class NetworkUtil { kryo.register(RobotID.class); kryo.register(ProgrammingCardDeck.class); kryo.register(Action.class); - kryo.register(ProgramAndPowerdownRequest.class); + kryo.register(ProgramAndPowerDownRequest.class); kryo.register(ProgramsContainerResponse.class); kryo.register(PowerDownContainerResponse.class); kryo.register(HashMap.class); diff --git a/src/main/java/inf112/fiasko/roborally/utility/ResourceUtil.java b/src/main/java/inf112/fiasko/roborally/utility/ResourceUtil.java index 01723aa..fd80d20 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/ResourceUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/ResourceUtil.java @@ -6,6 +6,7 @@ import java.io.InputStream; * This class helps with tasks related to resource loading */ public final class ResourceUtil { + private ResourceUtil() { } diff --git a/src/main/java/inf112/fiasko/roborally/utility/StringUtil.java b/src/main/java/inf112/fiasko/roborally/utility/StringUtil.java index 24ea79e..d798ec3 100644 --- a/src/main/java/inf112/fiasko/roborally/utility/StringUtil.java +++ b/src/main/java/inf112/fiasko/roborally/utility/StringUtil.java @@ -1,7 +1,13 @@ package inf112.fiasko.roborally.utility; +/** + * This class helps with tasks related to string manipulation + */ public final class StringUtil { + private StringUtil() { + } + /** * Adds zeros to a number until it reaches a set length and converts it to a string *