mirror of
				https://github.com/inf112-v20/Fiasko.git
				synced 2025-11-03 03:03:43 +01:00 
			
		
		
		
	Rydder kraftig opp i koden
Legger til alle manglende kommentarer Fikser en del variabelnavn med feil camelCase Legger til en boks som gir beskjed om at et navn ikke kan være tomt Oppdaterer versjon i pom og readme Forenkler noen av testene Fjerner duplisert kode i tester Fikser problemer rapportert av Codacy Bytter navn på respons beholdere for å tydeliggjøre bruk Fjerner ubrukte metoder Fikser noen skrivefeil
This commit is contained in:
		@@ -4,11 +4,13 @@ import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
 | 
			
		||||
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.RoboRallyWrapper;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The mail class which runs the game
 | 
			
		||||
 */
 | 
			
		||||
public class Main {
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
 | 
			
		||||
        cfg.title = "Game Board";
 | 
			
		||||
        cfg.title = "Robo Rally";
 | 
			
		||||
        cfg.width = 900;
 | 
			
		||||
        cfg.height = 900;
 | 
			
		||||
        cfg.samples = 3;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ package inf112.fiasko.roborally.elementproperties;
 | 
			
		||||
public enum GameState {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * At the absolute start of the game, before anything has happended
 | 
			
		||||
     * At the absolute start of the game, before anything has happened
 | 
			
		||||
     */
 | 
			
		||||
    BEGINNING_OF_GAME,
 | 
			
		||||
    /**
 | 
			
		||||
@@ -45,9 +45,13 @@ public enum GameState {
 | 
			
		||||
     * Indicates that the game is no longer running
 | 
			
		||||
     */
 | 
			
		||||
    EXITED,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Indicates that the game is in the process of skipping the power down screen
 | 
			
		||||
     */
 | 
			
		||||
    SKIP_POWER_DOWN_SCREEN,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Indicates that the game is in the process of skipping the stay in power down screen
 | 
			
		||||
     */
 | 
			
		||||
    SKIP_STAY_IN_POWER_DOWN
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,8 @@
 | 
			
		||||
package inf112.fiasko.roborally.elementproperties;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This enum represents all possible particle types
 | 
			
		||||
 */
 | 
			
		||||
public enum ParticleType {
 | 
			
		||||
    /**
 | 
			
		||||
     * The beam emitting from a single laser
 | 
			
		||||
 
 | 
			
		||||
@@ -68,24 +68,81 @@ public enum TileType {
 | 
			
		||||
     * A fast conveyor belt with one entrance on the right and one from behind
 | 
			
		||||
     */
 | 
			
		||||
    CONVEYOR_BELT_FAST_SIDE_ENTRANCE_RIGHT(16),
 | 
			
		||||
    /**
 | 
			
		||||
     * The first flag a robot has to visit to win the game
 | 
			
		||||
     */
 | 
			
		||||
    FLAG_1(17),
 | 
			
		||||
    /**
 | 
			
		||||
     * The second flag a robot has to visit to win the game
 | 
			
		||||
     */
 | 
			
		||||
    FLAG_2(18),
 | 
			
		||||
    /**
 | 
			
		||||
     * The third flag a robot has to visit to win the game
 | 
			
		||||
     */
 | 
			
		||||
    FLAG_3(19),
 | 
			
		||||
    /**
 | 
			
		||||
     * The fourth flag a robot has to visit to win the game
 | 
			
		||||
     */
 | 
			
		||||
    FLAG_4(20),
 | 
			
		||||
    /**
 | 
			
		||||
     * A wrench which repairs a robot
 | 
			
		||||
     */
 | 
			
		||||
    WRENCH(21),
 | 
			
		||||
    /**
 | 
			
		||||
     * A wrench and hammer which repairs a robot
 | 
			
		||||
     */
 | 
			
		||||
    WRENCH_AND_HAMMER(22),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the first robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_1(23),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the second robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_2(24),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the third robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_3(25),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the fourth robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_4(26),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the fifth robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_5(27),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the sixth robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_6(28),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the seventh robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_7(29),
 | 
			
		||||
    /**
 | 
			
		||||
     * The spawn location belonging to the eight robot
 | 
			
		||||
     */
 | 
			
		||||
    ROBOT_SPAWN_8(30),
 | 
			
		||||
    /**
 | 
			
		||||
     * A pit without edges a robot may fall into
 | 
			
		||||
     */
 | 
			
		||||
    PIT_EMPTY(31),
 | 
			
		||||
    /**
 | 
			
		||||
     * A pit with all edges a robot may fall into
 | 
			
		||||
     */
 | 
			
		||||
    PIT_FULL(32),
 | 
			
		||||
    /**
 | 
			
		||||
     * A pit with one edge a robot may fall into
 | 
			
		||||
     */
 | 
			
		||||
    PIT_NORMAL(33),
 | 
			
		||||
    /**
 | 
			
		||||
     * A pit with two connected edges the robot may fall into
 | 
			
		||||
     */
 | 
			
		||||
    PIT_CORNER(34),
 | 
			
		||||
    /**
 | 
			
		||||
     * A pit with three edges the robot may fall into
 | 
			
		||||
     */
 | 
			
		||||
    PIT_U(35);
 | 
			
		||||
 | 
			
		||||
    private final int tileTypeID;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,21 @@ package inf112.fiasko.roborally.elementproperties;
 | 
			
		||||
 * This enum represents all possible wall types
 | 
			
		||||
 */
 | 
			
		||||
public enum WallType {
 | 
			
		||||
    /**
 | 
			
		||||
     * A normal wall
 | 
			
		||||
     */
 | 
			
		||||
    WALL_NORMAL(1),
 | 
			
		||||
    /**
 | 
			
		||||
     * A wall which consists of two connected walls
 | 
			
		||||
     */
 | 
			
		||||
    WALL_CORNER(2),
 | 
			
		||||
    /**
 | 
			
		||||
     * A wall with a laser
 | 
			
		||||
     */
 | 
			
		||||
    WALL_LASER_SINGLE(3),
 | 
			
		||||
    /**
 | 
			
		||||
     * A wall with two lasers
 | 
			
		||||
     */
 | 
			
		||||
    WALL_LASER_DOUBLE(4);
 | 
			
		||||
 | 
			
		||||
    private final int wallTypeID;
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ import inf112.fiasko.roborally.gamewrapper.screens.WinnerScreen;
 | 
			
		||||
 */
 | 
			
		||||
public class ScreenManager {
 | 
			
		||||
    private BoardActiveScreen boardActiveScreen;
 | 
			
		||||
    private PowerDownScreen powerDownScreen;
 | 
			
		||||
    private LoadingScreen loadingScreen;
 | 
			
		||||
    private UsernameScreen usernameScreen;
 | 
			
		||||
    private IPAddressScreen ipAddressScreen;
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,6 @@ public class BoardActiveScreen extends AbstractScreen implements InputProcessor
 | 
			
		||||
                roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getPowerDownScreen(roboRallyWrapper));
 | 
			
		||||
                break;
 | 
			
		||||
            case SKIP_STAY_IN_POWER_DOWN:
 | 
			
		||||
                System.out.println("Sent false to server");
 | 
			
		||||
                roboRallyWrapper.client.sendElement(false);
 | 
			
		||||
                roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getLoadingScreen(roboRallyWrapper));
 | 
			
		||||
                break;
 | 
			
		||||
@@ -212,6 +211,12 @@ public class BoardActiveScreen extends AbstractScreen implements InputProcessor
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the robot with the corresponding robot id
 | 
			
		||||
     *
 | 
			
		||||
     * @param robotID The robot id to get robot for
 | 
			
		||||
     * @return The robot with the robot id
 | 
			
		||||
     */
 | 
			
		||||
    private Robot getPlayersRobot(RobotID robotID) {
 | 
			
		||||
        for (Robot robot : roboRallyWrapper.roboRallyGame.getAllRobots()) {
 | 
			
		||||
            if (robot.getRobotId() == robotID) {
 | 
			
		||||
 
 | 
			
		||||
@@ -98,8 +98,6 @@ public class CardChoiceScreen extends InputAdapter implements Screen {
 | 
			
		||||
                    for (int i = 4; i > (4 - lockedCardsInt); i--) {
 | 
			
		||||
                        newProgram.add(oldProgram.get(i));
 | 
			
		||||
                    }
 | 
			
		||||
                    System.out.println("fuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuasdasdasda234234234: " + newProgram.size());
 | 
			
		||||
                    System.out.println(newProgram);
 | 
			
		||||
 | 
			
		||||
                    roboRallyWrapper.roboRallyGame.setProgram(newProgram);
 | 
			
		||||
                    roboRallyWrapper.roboRallyGame.setGameState(GameState.CHOOSING_POWER_DOWN);
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ public class IPAddressScreen extends AbstractScreen {
 | 
			
		||||
    private final OrthographicCamera camera;
 | 
			
		||||
    private final Viewport viewport;
 | 
			
		||||
    private final Stage stage;
 | 
			
		||||
    private TextField txtinput;
 | 
			
		||||
    private TextField textInput;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new ip address screen
 | 
			
		||||
@@ -50,7 +50,7 @@ public class IPAddressScreen extends AbstractScreen {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void touchUp(InputEvent e, float x, float y, int point, int button) {
 | 
			
		||||
                try {
 | 
			
		||||
                    roboRallyWrapper.client = new RoboRallyClient(txtinput.getText(), roboRallyWrapper);
 | 
			
		||||
                    roboRallyWrapper.client = new RoboRallyClient(textInput.getText(), roboRallyWrapper);
 | 
			
		||||
                    roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getUsernameScreen(roboRallyWrapper));
 | 
			
		||||
                } catch (IOException ex) {
 | 
			
		||||
                    ex.printStackTrace();
 | 
			
		||||
@@ -59,10 +59,10 @@ public class IPAddressScreen extends AbstractScreen {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        txtinput = new TextField("", skin);
 | 
			
		||||
        txtinput.setPosition(applicationWidth / 2f - txtinput.getWidth() / 2f, 250);
 | 
			
		||||
        txtinput.setSize(150, 40);
 | 
			
		||||
        stage.addActor(txtinput);
 | 
			
		||||
        textInput = new TextField("", skin);
 | 
			
		||||
        textInput.setPosition(applicationWidth / 2f - textInput.getWidth() / 2f, 250);
 | 
			
		||||
        textInput.setSize(150, 40);
 | 
			
		||||
        stage.addActor(textInput);
 | 
			
		||||
        stage.addActor(joinButton);
 | 
			
		||||
 | 
			
		||||
        camera = new OrthographicCamera();
 | 
			
		||||
 
 | 
			
		||||
@@ -46,7 +46,6 @@ public class LoadingScreen extends AbstractScreen {
 | 
			
		||||
 | 
			
		||||
        if (roboRallyWrapper.roboRallyGame != null) {
 | 
			
		||||
            GameState gameState = roboRallyWrapper.roboRallyGame.getGameState();
 | 
			
		||||
            System.out.println(gameState);
 | 
			
		||||
            if (gameState != GameState.LOADING) {
 | 
			
		||||
                handleScreenChange(gameState);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import com.badlogic.gdx.utils.viewport.FitViewport;
 | 
			
		||||
import com.badlogic.gdx.utils.viewport.Viewport;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.RoboRallyWrapper;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.SimpleButton;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.GameStartInfo;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.GameStartInfoResponse;
 | 
			
		||||
import inf112.fiasko.roborally.objects.Player;
 | 
			
		||||
import inf112.fiasko.roborally.utility.IOUtil;
 | 
			
		||||
import com.esotericsoftware.kryonet.Connection;
 | 
			
		||||
@@ -48,12 +48,12 @@ public class LobbyScreen extends AbstractScreen {
 | 
			
		||||
            @Override
 | 
			
		||||
            public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
 | 
			
		||||
                roboRallyWrapper.server.startGame();
 | 
			
		||||
                Map<Connection, String> playernames = roboRallyWrapper.server.getPlayerNames();
 | 
			
		||||
                List<Player> playerlist = IOUtil.playerGenerator(playernames,
 | 
			
		||||
                Map<Connection, String> playerNames = roboRallyWrapper.server.getPlayerNames();
 | 
			
		||||
                List<Player> playerList = IOUtil.playerGenerator(playerNames,
 | 
			
		||||
                        roboRallyWrapper.server.getRobotID());
 | 
			
		||||
                for (Connection connection : playernames.keySet()) {
 | 
			
		||||
                    roboRallyWrapper.server.sendToClient(connection, new GameStartInfo("Checkmate.txt"
 | 
			
		||||
                            , playerlist, playernames.get(connection)));
 | 
			
		||||
                for (Connection connection : playerNames.keySet()) {
 | 
			
		||||
                    roboRallyWrapper.server.sendToClient(connection, new GameStartInfoResponse("Checkmate.txt"
 | 
			
		||||
                            , playerList, playerNames.get(connection)));
 | 
			
		||||
                }
 | 
			
		||||
                roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getLoadingScreen(roboRallyWrapper));
 | 
			
		||||
                return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -53,30 +53,30 @@ public class PowerDownScreen extends AbstractScreen {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void render(float delta) {
 | 
			
		||||
        Gdx.gl.glClearColor(0.2f, 1f, 0.2f, 1);
 | 
			
		||||
        Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
 | 
			
		||||
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
 | 
			
		||||
        camera.update();
 | 
			
		||||
        roboRallyWrapper.batch.setProjectionMatrix(camera.combined);
 | 
			
		||||
        String descriptiontext;
 | 
			
		||||
        String descriptionText;
 | 
			
		||||
        if (roboRallyWrapper.roboRallyGame.getGameState() == GameState.CHOOSING_POWER_DOWN) {
 | 
			
		||||
            descriptiontext = "click the button to enter powerdown next round";
 | 
			
		||||
            descriptionText = "Click the button to enter power down next round";
 | 
			
		||||
        } else {
 | 
			
		||||
            descriptiontext = "continue powerdown?";
 | 
			
		||||
            descriptionText = "Click the button to continue your power down the next round";
 | 
			
		||||
        }
 | 
			
		||||
        int elapsedTime = (int) Math.floor((System.currentTimeMillis() - startTime) / 1000f);
 | 
			
		||||
 | 
			
		||||
        roboRallyWrapper.batch.begin();
 | 
			
		||||
 | 
			
		||||
        roboRallyWrapper.font.draw(roboRallyWrapper.batch, descriptiontext,
 | 
			
		||||
        roboRallyWrapper.font.draw(roboRallyWrapper.batch, descriptionText,
 | 
			
		||||
                applicationWidth / 2f - 380 / 2f, applicationHeight / 2f + 100, 380, 1,
 | 
			
		||||
                true);
 | 
			
		||||
        roboRallyWrapper.font.draw(roboRallyWrapper.batch, String.valueOf(10 - elapsedTime),
 | 
			
		||||
        roboRallyWrapper.font.draw(roboRallyWrapper.batch, String.valueOf(5 - elapsedTime),
 | 
			
		||||
                applicationWidth / 2f - 40 / 2f, applicationHeight / 2f - 100, 40, 1,
 | 
			
		||||
                true);
 | 
			
		||||
        roboRallyWrapper.batch.end();
 | 
			
		||||
        stage.draw();
 | 
			
		||||
 | 
			
		||||
        if (elapsedTime > 10) {
 | 
			
		||||
        if (elapsedTime > 5) {
 | 
			
		||||
            sendPowerDownStatus(Boolean.FALSE);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,8 @@ import com.badlogic.gdx.utils.viewport.FitViewport;
 | 
			
		||||
import com.badlogic.gdx.utils.viewport.Viewport;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.RoboRallyWrapper;
 | 
			
		||||
 | 
			
		||||
import javax.swing.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This screen allows a user to choose their player name
 | 
			
		||||
 */
 | 
			
		||||
@@ -46,6 +48,7 @@ public class UsernameScreen extends AbstractScreen {
 | 
			
		||||
            public void touchUp(InputEvent e, float x, float y, int point, int button) {
 | 
			
		||||
                String userName = textInput.getText();
 | 
			
		||||
                if (nameInvalid(userName)) {
 | 
			
		||||
                    JOptionPane.showMessageDialog(null, "Username cannot be empty.");
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                roboRallyWrapper.client.sendElement(userName);
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,10 @@ import com.badlogic.gdx.utils.viewport.FitViewport;
 | 
			
		||||
import com.badlogic.gdx.utils.viewport.Viewport;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.RoboRallyWrapper;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.SimpleButton;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.screens.AbstractScreen;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This screen shows which player won the game
 | 
			
		||||
 */
 | 
			
		||||
public class WinnerScreen extends AbstractScreen {
 | 
			
		||||
    private final RoboRallyWrapper roboRallyWrapper;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,9 @@ import com.esotericsoftware.kryonet.Listener;
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.GameState;
 | 
			
		||||
import inf112.fiasko.roborally.gamewrapper.RoboRallyWrapper;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ErrorResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.GameStartInfo;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgamsContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.GameStartInfoResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.objects.ProgrammingCardDeck;
 | 
			
		||||
import inf112.fiasko.roborally.objects.RoboRallyGame;
 | 
			
		||||
 | 
			
		||||
@@ -42,14 +42,14 @@ class RoboRallyClientListener extends Listener {
 | 
			
		||||
                wrapper.quit(errorResponse.getErrorMessage());
 | 
			
		||||
            }
 | 
			
		||||
            System.out.println(errorResponse.getErrorMessage());
 | 
			
		||||
        } else if (object instanceof GameStartInfo) {
 | 
			
		||||
            GameStartInfo info = (GameStartInfo) object;
 | 
			
		||||
        } else if (object instanceof GameStartInfoResponse) {
 | 
			
		||||
            GameStartInfoResponse info = (GameStartInfoResponse) object;
 | 
			
		||||
            wrapper.roboRallyGame = new RoboRallyGame(info.getPlayerList(), info.getBoardName(),
 | 
			
		||||
                    wrapper.server != null, info.getPlayerName(), wrapper.server);
 | 
			
		||||
        } else if (object instanceof ProgrammingCardDeck) {
 | 
			
		||||
            if (((ProgrammingCardDeck) object).isEmpty()) {
 | 
			
		||||
                wrapper.roboRallyGame.setProgram(new ArrayList<>());
 | 
			
		||||
                if (wrapper.roboRallyGame.getRobotPowerdown()) {
 | 
			
		||||
                if (wrapper.roboRallyGame.getRobotPowerDown()) {
 | 
			
		||||
                    wrapper.roboRallyGame.setGameState(GameState.SKIP_POWER_DOWN_SCREEN);
 | 
			
		||||
                } else {
 | 
			
		||||
                    wrapper.roboRallyGame.setGameState(GameState.CHOOSING_POWER_DOWN);
 | 
			
		||||
@@ -58,16 +58,16 @@ class RoboRallyClientListener extends Listener {
 | 
			
		||||
                wrapper.roboRallyGame.setGameState(GameState.CHOOSING_CARDS);
 | 
			
		||||
            }
 | 
			
		||||
            new Thread(() -> wrapper.roboRallyGame.setPlayerHand((ProgrammingCardDeck) object)).start();
 | 
			
		||||
        } else if (object instanceof ProgamsContainer) {
 | 
			
		||||
        } else if (object instanceof ProgramsContainerResponse) {
 | 
			
		||||
            new Thread(() -> {
 | 
			
		||||
                try {
 | 
			
		||||
                    wrapper.roboRallyGame.receiveAllPrograms((ProgamsContainer) object);
 | 
			
		||||
                    wrapper.roboRallyGame.receiveAllPrograms((ProgramsContainerResponse) object);
 | 
			
		||||
                } catch (InterruptedException e) {
 | 
			
		||||
                    e.printStackTrace();
 | 
			
		||||
                }
 | 
			
		||||
            }).start();
 | 
			
		||||
        } else if (object instanceof PowerDownContainer) {
 | 
			
		||||
            new Thread(() -> wrapper.roboRallyGame.receiveStayInPowerDown((PowerDownContainer) object)).start();
 | 
			
		||||
        } else if (object instanceof PowerDownContainerResponse) {
 | 
			
		||||
            new Thread(() -> wrapper.roboRallyGame.receiveStayInPowerDown((PowerDownContainerResponse) object)).start();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,8 +5,8 @@ import com.esotericsoftware.kryonet.Connection;
 | 
			
		||||
import com.esotericsoftware.kryonet.Listener;
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.RobotID;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ErrorResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgamsContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramAndPowerdownRequest;
 | 
			
		||||
import inf112.fiasko.roborally.objects.ProgrammingCard;
 | 
			
		||||
 | 
			
		||||
@@ -136,7 +136,7 @@ class RoboRallyServerListener extends Listener {
 | 
			
		||||
            for (Connection connected : stayInPowerDown.keySet()) {
 | 
			
		||||
                powerDowns.put(playerNames.get(connected), stayInPowerDown.get(connected));
 | 
			
		||||
            }
 | 
			
		||||
            server.sendToAllClients(new PowerDownContainer(powerDowns));
 | 
			
		||||
            server.sendToAllClients(new PowerDownContainerResponse(powerDowns));
 | 
			
		||||
            stayInPowerDown = new HashMap<>();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -156,7 +156,7 @@ class RoboRallyServerListener extends Listener {
 | 
			
		||||
                powerDown.put(playerNames.get(connected), programs.get(connected).getPowerdown());
 | 
			
		||||
                program.put(playerNames.get(connected), programs.get(connected).getProgram());
 | 
			
		||||
            }
 | 
			
		||||
            server.sendToAllClients(new ProgamsContainer(program, powerDown));
 | 
			
		||||
            server.sendToAllClients(new ProgramsContainerResponse(program, powerDown));
 | 
			
		||||
            programs = new HashMap<>();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,9 @@ public class ErrorResponse {
 | 
			
		||||
        this.critical = false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public ErrorResponse() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,25 +7,25 @@ import java.util.List;
 | 
			
		||||
/**
 | 
			
		||||
 * This class contains information about the game board to be used and the game's players
 | 
			
		||||
 */
 | 
			
		||||
public class GameStartInfo {
 | 
			
		||||
public class GameStartInfoResponse {
 | 
			
		||||
    private String boardName;
 | 
			
		||||
    private List<Player> playerList;
 | 
			
		||||
    private String playerName;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Empty initialization method required by kryo
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public GameStartInfo() {
 | 
			
		||||
    public GameStartInfoResponse() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new GameStartInfo object
 | 
			
		||||
     * Instantiates a new GameStartInfoResponse object
 | 
			
		||||
     *
 | 
			
		||||
     * @param boardName  The name of the board to be used, with extension
 | 
			
		||||
     * @param playerList List of players for the game
 | 
			
		||||
     * @param playerName The player name of the receiver
 | 
			
		||||
     */
 | 
			
		||||
    public GameStartInfo(String boardName, List<Player> playerList, String playerName) {
 | 
			
		||||
    public GameStartInfoResponse(String boardName, List<Player> playerList, String playerName) {
 | 
			
		||||
        this.playerName = playerName;
 | 
			
		||||
        this.boardName = boardName;
 | 
			
		||||
        this.playerList = playerList;
 | 
			
		||||
@@ -40,15 +40,6 @@ public class GameStartInfo {
 | 
			
		||||
        return playerName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the player name of the current player
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerName The player name of the current player
 | 
			
		||||
     */
 | 
			
		||||
    public void setPlayerName(String playerName) {
 | 
			
		||||
        this.playerName = playerName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the list of players
 | 
			
		||||
     *
 | 
			
		||||
@@ -58,15 +49,6 @@ public class GameStartInfo {
 | 
			
		||||
        return playerList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the list of players for the game
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerList List of players for the game
 | 
			
		||||
     */
 | 
			
		||||
    public void setPlayerList(List<Player> playerList) {
 | 
			
		||||
        this.playerList = playerList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the board name
 | 
			
		||||
     *
 | 
			
		||||
@@ -76,13 +58,4 @@ public class GameStartInfo {
 | 
			
		||||
        return boardName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the name of the board to be used
 | 
			
		||||
     *
 | 
			
		||||
     * @param boardName The name of the board to be used, with extension
 | 
			
		||||
     */
 | 
			
		||||
    public void setBoardName(String boardName) {
 | 
			
		||||
        this.boardName = boardName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -5,15 +5,13 @@ import java.util.Map;
 | 
			
		||||
/**
 | 
			
		||||
 * This class is used to contain power down status for all players
 | 
			
		||||
 */
 | 
			
		||||
public class PowerDownContainer {
 | 
			
		||||
public class PowerDownContainerResponse {
 | 
			
		||||
    private Map<String, Boolean> powerDown;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * IMPORTANT!!!
 | 
			
		||||
     * DO NOT USE!
 | 
			
		||||
     * Kryonet demands a no args constructor or else it throws a exception
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public PowerDownContainer() {
 | 
			
		||||
    public PowerDownContainerResponse() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -21,7 +19,7 @@ public class PowerDownContainer {
 | 
			
		||||
     *
 | 
			
		||||
     * @param powerDown A map between player names and whether they should remain in power down
 | 
			
		||||
     */
 | 
			
		||||
    public PowerDownContainer(Map<String, Boolean> powerDown) {
 | 
			
		||||
    public PowerDownContainerResponse(Map<String, Boolean> powerDown) {
 | 
			
		||||
        this.powerDown = powerDown;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
package inf112.fiasko.roborally.networking.containers;
 | 
			
		||||
 | 
			
		||||
import inf112.fiasko.roborally.objects.ProgrammingCard;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
public class ProgamsContainer {
 | 
			
		||||
    private Map<String, List<ProgrammingCard>> program;
 | 
			
		||||
    private Map<String, Boolean> powerdown;
 | 
			
		||||
 | 
			
		||||
    public ProgamsContainer() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ProgamsContainer(Map<String, List<ProgrammingCard>> program, Map<String, Boolean> powerdown) {
 | 
			
		||||
        this.program = program;
 | 
			
		||||
        this.powerdown = powerdown;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, List<ProgrammingCard>> getProgram() {
 | 
			
		||||
        return program;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, Boolean> getPowerdown() {
 | 
			
		||||
        return powerdown;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -8,6 +8,9 @@ public class ProgramAndPowerdownRequest {
 | 
			
		||||
    private Boolean powerdown;
 | 
			
		||||
    private List<ProgrammingCard> program;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public ProgramAndPowerdownRequest() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
package inf112.fiasko.roborally.networking.containers;
 | 
			
		||||
 | 
			
		||||
import inf112.fiasko.roborally.objects.ProgrammingCard;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class contains information about all players' programs and whether they want to enter power down
 | 
			
		||||
 */
 | 
			
		||||
public class ProgramsContainerResponse {
 | 
			
		||||
    private Map<String, List<ProgrammingCard>> programsMap;
 | 
			
		||||
    private Map<String, Boolean> powerDownMap;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public ProgramsContainerResponse() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new programs container
 | 
			
		||||
     *
 | 
			
		||||
     * @param programsMap  A map between a player name and a player's program
 | 
			
		||||
     * @param powerDownMap A map between a player name and power down
 | 
			
		||||
     */
 | 
			
		||||
    public ProgramsContainerResponse(Map<String, List<ProgrammingCard>> programsMap, Map<String, Boolean> powerDownMap) {
 | 
			
		||||
        this.programsMap = programsMap;
 | 
			
		||||
        this.powerDownMap = powerDownMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the map of programs
 | 
			
		||||
     *
 | 
			
		||||
     * @return A map between a player name and a player's program
 | 
			
		||||
     */
 | 
			
		||||
    public Map<String, List<ProgrammingCard>> getProgramsMap() {
 | 
			
		||||
        return programsMap;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the map of power down
 | 
			
		||||
     *
 | 
			
		||||
     * @return A map between a player name and power down
 | 
			
		||||
     */
 | 
			
		||||
    public Map<String, Boolean> getPowerDownMap() {
 | 
			
		||||
        return powerDownMap;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -11,6 +11,7 @@ import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class represents a board
 | 
			
		||||
@@ -179,10 +180,16 @@ public class Board {
 | 
			
		||||
        if (robots.containsKey(robotID)) {
 | 
			
		||||
            robots.get(robotID).setPowerDown(powerDown);
 | 
			
		||||
        } else if (getRobotFromDeadRobots(robotID) != null) {
 | 
			
		||||
            getRobotFromDeadRobots(robotID).setPowerDown(powerDown);
 | 
			
		||||
            Objects.requireNonNull(getRobotFromDeadRobots(robotID)).setPowerDown(powerDown);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the backup position of a given robot to a given position
 | 
			
		||||
     *
 | 
			
		||||
     * @param robotID The robot to change backup position for
 | 
			
		||||
     * @param pos     The robot's new backup position
 | 
			
		||||
     */
 | 
			
		||||
    public void setBackupPositionOfRobot(RobotID robotID, Position pos) {
 | 
			
		||||
        robots.get(robotID).setBackupPosition(pos);
 | 
			
		||||
    }
 | 
			
		||||
@@ -197,11 +204,17 @@ public class Board {
 | 
			
		||||
        if (robots.containsKey(robotID)) {
 | 
			
		||||
            return robots.get(robotID).isInPowerDown();
 | 
			
		||||
        } else if (getRobotFromDeadRobots(robotID) != null) {
 | 
			
		||||
            return getRobotFromDeadRobots(robotID).isInPowerDown();
 | 
			
		||||
            return Objects.requireNonNull(getRobotFromDeadRobots(robotID)).isInPowerDown();
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets a robot from the list of dead robots
 | 
			
		||||
     *
 | 
			
		||||
     * @param robotID The id of the robot to get
 | 
			
		||||
     * @return The dead robot
 | 
			
		||||
     */
 | 
			
		||||
    private Robot getRobotFromDeadRobots(RobotID robotID) {
 | 
			
		||||
        for (Robot robot : deadRobots) {
 | 
			
		||||
            if (robot.getRobotId() == robotID) {
 | 
			
		||||
@@ -223,7 +236,7 @@ public class Board {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * sets the damage taken of robots in powerdown to 0
 | 
			
		||||
     * sets the damage taken of robots in power down to 0
 | 
			
		||||
     */
 | 
			
		||||
    public void executePowerDown() {
 | 
			
		||||
        for (Robot robot : robots.values()) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
package inf112.fiasko.roborally.objects;
 | 
			
		||||
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.GameState;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgamsContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This interface describes
 | 
			
		||||
 * This interface describes a game which can be interacted with
 | 
			
		||||
 */
 | 
			
		||||
public interface InteractableGame {
 | 
			
		||||
    /**
 | 
			
		||||
@@ -44,14 +44,14 @@ public interface InteractableGame {
 | 
			
		||||
     * @param programs The programs container received from the server
 | 
			
		||||
     * @throws InterruptedException If interrupted during sleep
 | 
			
		||||
     */
 | 
			
		||||
    void receiveAllPrograms(ProgamsContainer programs) throws InterruptedException;
 | 
			
		||||
    void receiveAllPrograms(ProgramsContainerResponse programs) throws InterruptedException;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Continues turn when stay in power down is received from all players
 | 
			
		||||
     *
 | 
			
		||||
     * @param powerDowns The power down container received from the server
 | 
			
		||||
     */
 | 
			
		||||
    void receiveStayInPowerDown(PowerDownContainer powerDowns);
 | 
			
		||||
    void receiveStayInPowerDown(PowerDownContainerResponse powerDowns);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the hand of this player
 | 
			
		||||
 
 | 
			
		||||
@@ -25,7 +25,7 @@ public class Phase {
 | 
			
		||||
    private List<BoardElementContainer<Tile>> conveyorBelts;
 | 
			
		||||
    private List<BoardElementContainer<Tile>> fastConveyorBelts;
 | 
			
		||||
    private List<BoardElementContainer<Tile>> flags;
 | 
			
		||||
    private InteractableGame game;
 | 
			
		||||
    private final InteractableGame game;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new phase
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@ public class Player {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives you the RobotID of a player
 | 
			
		||||
     * Gets the RobotID of a player
 | 
			
		||||
     *
 | 
			
		||||
     * @return A RobotID
 | 
			
		||||
     */
 | 
			
		||||
@@ -45,7 +45,7 @@ public class Player {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives you the Name of the player
 | 
			
		||||
     * Gets the name of the player
 | 
			
		||||
     *
 | 
			
		||||
     * @return A player Name
 | 
			
		||||
     */
 | 
			
		||||
@@ -54,16 +54,7 @@ public class Player {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets the name of the robot
 | 
			
		||||
     *
 | 
			
		||||
     * @param name The new name of the robot
 | 
			
		||||
     */
 | 
			
		||||
    public void setName(String name) {
 | 
			
		||||
        this.name = name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives you the players program
 | 
			
		||||
     * Gets the players program
 | 
			
		||||
     *
 | 
			
		||||
     * @return A list of programming cards
 | 
			
		||||
     */
 | 
			
		||||
@@ -85,16 +76,16 @@ public class Player {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives you the player hand/deck
 | 
			
		||||
     * Gets the player hand/deck
 | 
			
		||||
     *
 | 
			
		||||
     * @return a deck
 | 
			
		||||
     * @return A deck
 | 
			
		||||
     */
 | 
			
		||||
    public ProgrammingCardDeck getProgrammingCardDeck() {
 | 
			
		||||
        return playerDeck;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the players deck to the given deck
 | 
			
		||||
     * Sets the players deck to the given deck
 | 
			
		||||
     *
 | 
			
		||||
     * @param playerDeck A deck of cards given to the player
 | 
			
		||||
     */
 | 
			
		||||
@@ -103,7 +94,7 @@ public class Player {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives you the player deck with locked cards
 | 
			
		||||
     * Gets the player deck with locked cards
 | 
			
		||||
     *
 | 
			
		||||
     * @return a deck with locked cards
 | 
			
		||||
     */
 | 
			
		||||
@@ -112,7 +103,7 @@ public class Player {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gives you the players power down status
 | 
			
		||||
     * Gets the players power down status
 | 
			
		||||
     *
 | 
			
		||||
     * @return Whether the player is to power down
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,10 @@ public class ProgrammingCard implements Comparable<ProgrammingCard> {
 | 
			
		||||
        this.cardAction = cardAction;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public ProgrammingCard() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,9 @@ public class ProgrammingCardDeck extends AbstractDeck<ProgrammingCard> {
 | 
			
		||||
        super(cardList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Empty constructor required by KryoNet. DO NOT REMOVE THIS!!!
 | 
			
		||||
     */
 | 
			
		||||
    public ProgrammingCardDeck() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,8 @@ import inf112.fiasko.roborally.elementproperties.Position;
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.RobotID;
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.TileType;
 | 
			
		||||
import inf112.fiasko.roborally.networking.RoboRallyServer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgamsContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.utility.BoardLoaderUtil;
 | 
			
		||||
import inf112.fiasko.roborally.utility.DeckLoaderUtil;
 | 
			
		||||
 | 
			
		||||
@@ -32,7 +32,7 @@ public class RoboRallyGame implements DrawableGame, InteractableGame {
 | 
			
		||||
    private String winningPlayerName;
 | 
			
		||||
    private List<ProgrammingCard> program;
 | 
			
		||||
    private ProgrammingCardDeck playerHand;
 | 
			
		||||
    private Phase phase;
 | 
			
		||||
    private final Phase phase;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new Robo Rally game
 | 
			
		||||
@@ -53,7 +53,12 @@ public class RoboRallyGame implements DrawableGame, InteractableGame {
 | 
			
		||||
        this.phase = new Phase(gameBoard, playerList, 600, this);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Boolean getRobotPowerdown() {
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the power down status of the client playing this instance of the game
 | 
			
		||||
     *
 | 
			
		||||
     * @return Whether this player's robot is in power down
 | 
			
		||||
     */
 | 
			
		||||
    public Boolean getRobotPowerDown() {
 | 
			
		||||
        if (getPlayerFromName(this.playerName) != null) {
 | 
			
		||||
            return gameBoard.getPowerDown(Objects.requireNonNull(getPlayerFromName(this.playerName)).getRobotID());
 | 
			
		||||
        }
 | 
			
		||||
@@ -140,10 +145,10 @@ public class RoboRallyGame implements DrawableGame, InteractableGame {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void receiveAllPrograms(ProgamsContainer programs) throws InterruptedException {
 | 
			
		||||
    public void receiveAllPrograms(ProgramsContainerResponse programs) throws InterruptedException {
 | 
			
		||||
        //Reads data from server and updates player objects
 | 
			
		||||
        Map<String, List<ProgrammingCard>> programMap = programs.getProgram();
 | 
			
		||||
        Map<String, Boolean> powerDown = programs.getPowerdown();
 | 
			
		||||
        Map<String, List<ProgrammingCard>> programMap = programs.getProgramsMap();
 | 
			
		||||
        Map<String, Boolean> powerDown = programs.getPowerDownMap();
 | 
			
		||||
        String playerName;
 | 
			
		||||
        for (Player player : playerList) {
 | 
			
		||||
            playerName = player.getName();
 | 
			
		||||
@@ -175,7 +180,7 @@ public class RoboRallyGame implements DrawableGame, InteractableGame {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void receiveStayInPowerDown(PowerDownContainer powerDowns) {
 | 
			
		||||
    public void receiveStayInPowerDown(PowerDownContainerResponse powerDowns) {
 | 
			
		||||
        for (Player player : playerList) {
 | 
			
		||||
            if (gameBoard.getPowerDown(player.getRobotID())) {
 | 
			
		||||
                player.setPowerDownNextRound(powerDowns.getPowerDown().get(player.getName()));
 | 
			
		||||
@@ -198,26 +203,6 @@ public class RoboRallyGame implements DrawableGame, InteractableGame {
 | 
			
		||||
        this.winningPlayerName = winningPlayerName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initializes the game with a debugging board
 | 
			
		||||
     */
 | 
			
		||||
    private void initializeDebugMode() {
 | 
			
		||||
        List<Robot> robots = new ArrayList<>();
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_1, new Position(0, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_2, new Position(1, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_3, new Position(2, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_4, new Position(3, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_5, new Position(4, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_6, new Position(5, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_7, new Position(6, 18)));
 | 
			
		||||
        robots.add(new Robot(RobotID.ROBOT_8, new Position(7, 18)));
 | 
			
		||||
        try {
 | 
			
		||||
            gameBoard = BoardLoaderUtil.loadBoard("boards/all_tiles_test_board.txt", robots);
 | 
			
		||||
        } catch (IOException e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initializes the game with a playable board
 | 
			
		||||
     */
 | 
			
		||||
@@ -255,7 +240,7 @@ public class RoboRallyGame implements DrawableGame, InteractableGame {
 | 
			
		||||
            RobotID robotID = player.getRobotID();
 | 
			
		||||
            TileType robotSpawn = TileType.getTileTypeFromID(robotID.getRobotIDID() + 22);
 | 
			
		||||
            List<BoardElementContainer<Tile>> spawnTileContainerList = gameBoard.getPositionsOfTileOnBoard(robotSpawn);
 | 
			
		||||
            if (spawnTileContainerList.size() != 1) {
 | 
			
		||||
            if (spawnTileContainerList.size() < 1) {
 | 
			
		||||
                throw new IllegalArgumentException("The chosen board seems to be missing a robot spawn");
 | 
			
		||||
            }
 | 
			
		||||
            BoardElementContainer<Tile> spawnTileContainer = spawnTileContainerList.get(0);
 | 
			
		||||
 
 | 
			
		||||
@@ -132,9 +132,9 @@ public class Robot {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * setBackupPosition
 | 
			
		||||
     * Sets the backup position of the robot
 | 
			
		||||
     *
 | 
			
		||||
     * @param backupPosition
 | 
			
		||||
     * @param backupPosition The new backup position of the robot
 | 
			
		||||
     */
 | 
			
		||||
    public void setBackupPosition(Position backupPosition) {
 | 
			
		||||
        this.backupPosition = backupPosition;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,9 +4,9 @@ import com.esotericsoftware.kryo.Kryo;
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.Action;
 | 
			
		||||
import inf112.fiasko.roborally.elementproperties.RobotID;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ErrorResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.GameStartInfo;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgamsContainer;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.GameStartInfoResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.PowerDownContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramsContainerResponse;
 | 
			
		||||
import inf112.fiasko.roborally.networking.containers.ProgramAndPowerdownRequest;
 | 
			
		||||
import inf112.fiasko.roborally.objects.Deck;
 | 
			
		||||
import inf112.fiasko.roborally.objects.Player;
 | 
			
		||||
@@ -30,17 +30,15 @@ public final class NetworkUtil {
 | 
			
		||||
        kryo.register(ErrorResponse.class);
 | 
			
		||||
        kryo.register(Deck.class);
 | 
			
		||||
        kryo.register(ProgrammingCard.class);
 | 
			
		||||
        kryo.register(GameStartInfo.class);
 | 
			
		||||
        kryo.register(GameStartInfoResponse.class);
 | 
			
		||||
        kryo.register(ArrayList.class);
 | 
			
		||||
        kryo.register(Player.class);
 | 
			
		||||
        kryo.register(RobotID.class);
 | 
			
		||||
        kryo.register(ProgrammingCardDeck.class);
 | 
			
		||||
        kryo.register(Action.class);
 | 
			
		||||
        kryo.register(ProgramAndPowerdownRequest.class);
 | 
			
		||||
        kryo.register(ProgamsContainer.class);
 | 
			
		||||
        kryo.register(PowerDownContainer.class);
 | 
			
		||||
        kryo.register(ProgramsContainerResponse.class);
 | 
			
		||||
        kryo.register(PowerDownContainerResponse.class);
 | 
			
		||||
        kryo.register(HashMap.class);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -366,6 +366,18 @@ public final class TextureConverterUtil {
 | 
			
		||||
        private final int xWest;
 | 
			
		||||
        private final int yWest;
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Instantiates a new texture converter container
 | 
			
		||||
         *
 | 
			
		||||
         * @param xNorth The x position of the texture for a north-facing instance of the object
 | 
			
		||||
         * @param yNorth The y position of the texture for a north-facing instance of the object
 | 
			
		||||
         * @param xEast  The x position of the texture for a east-facing instance of the object
 | 
			
		||||
         * @param yEast  The y position of the texture for a east-facing instance of the object
 | 
			
		||||
         * @param xSouth The x position of the texture for a south-facing instance of the object
 | 
			
		||||
         * @param ySouth The y position of the texture for a south-facing instance of the object
 | 
			
		||||
         * @param xWest  The x position of the texture for a west-facing instance of the object
 | 
			
		||||
         * @param yWest  The y position of the texture for a west-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        TextureConverterContainer(int xNorth, int yNorth, int xEast, int yEast, int xSouth, int ySouth,
 | 
			
		||||
                                  int xWest, int yWest) {
 | 
			
		||||
            this.xNorth = xNorth;
 | 
			
		||||
@@ -378,34 +390,74 @@ public final class TextureConverterUtil {
 | 
			
		||||
            this.yWest = yWest;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the x position of the texture for a north-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The x position of the texture for a north-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getXNorth() {
 | 
			
		||||
            return xNorth;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the y position of the texture for a north-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The y position of the texture for a north-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getYNorth() {
 | 
			
		||||
            return yNorth;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the x position of the texture for a east-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The x position of the texture for a east-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getXEast() {
 | 
			
		||||
            return xEast;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the y position of the texture for a east-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The y position of the texture for a east-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getYEast() {
 | 
			
		||||
            return yEast;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the x position of the texture for a south-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The x position of the texture for a south-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getXSouth() {
 | 
			
		||||
            return xSouth;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the y position of the texture for a south-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The y position of the texture for a south-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getYSouth() {
 | 
			
		||||
            return ySouth;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the x position of the texture for a west-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The x position of the texture for a west-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getXWest() {
 | 
			
		||||
            return xWest;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * Gets the y position of the texture for a west-facing instance of the object
 | 
			
		||||
         *
 | 
			
		||||
         * @return The y position of the texture for a west-facing instance of the object
 | 
			
		||||
         */
 | 
			
		||||
        public int getYWest() {
 | 
			
		||||
            return yWest;
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user