Merge branch 'development' into 'dev/test'
merge Development into test See merge request progproj/gruppen-ht24/Gruppe-01!27
This commit is contained in:
		@@ -6,6 +6,10 @@
 | 
			
		||||
import pp.mdga.client.animation.AnimationHandler;
 | 
			
		||||
import com.jme3.system.AppSettings;
 | 
			
		||||
import pp.mdga.client.view.*;
 | 
			
		||||
import pp.mdga.message.server.ServerInterpreter;
 | 
			
		||||
 | 
			
		||||
import java.util.concurrent.ExecutorService;
 | 
			
		||||
import java.util.concurrent.Executors;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Main application class for the MdgaApp game.
 | 
			
		||||
@@ -49,6 +53,18 @@ public class MdgaApp extends SimpleApplication {
 | 
			
		||||
    /** The ceremony view. */
 | 
			
		||||
    private MdgaView ceremonyView;
 | 
			
		||||
 | 
			
		||||
    /** The client game logic. */
 | 
			
		||||
    private final ClientGameLogic clientGameLogic;
 | 
			
		||||
 | 
			
		||||
    private ExecutorService executor;
 | 
			
		||||
 | 
			
		||||
    private ServerConnection networkConnection;
 | 
			
		||||
 | 
			
		||||
    private MdgaApp() {
 | 
			
		||||
        networkConnection = new NetworkSupport(this);
 | 
			
		||||
        this.clientGameLogic = new ClientGameLogic(networkConnection);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Main entry point for the application.
 | 
			
		||||
     * Configures settings and starts the application.
 | 
			
		||||
@@ -59,8 +75,8 @@ public static void main(String[] args) {
 | 
			
		||||
        AppSettings settings = new AppSettings(true);
 | 
			
		||||
        settings.setSamples(128);
 | 
			
		||||
        settings.setCenterWindow(true);
 | 
			
		||||
        settings.setWidth(1920);
 | 
			
		||||
        settings.setHeight(1080);
 | 
			
		||||
        settings.setWidth(1080);
 | 
			
		||||
        settings.setHeight(720);
 | 
			
		||||
        settings.setVSync(false);
 | 
			
		||||
 | 
			
		||||
        MdgaApp app = new MdgaApp();
 | 
			
		||||
@@ -219,5 +235,22 @@ public NotificationSynchronizer getNotificationSynchronizer() {
 | 
			
		||||
    public void setup() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ClientGameLogic getGameLogic() {
 | 
			
		||||
        return clientGameLogic;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public ExecutorService getExecutor() {
 | 
			
		||||
        if (this.executor == null) {
 | 
			
		||||
            this.executor = Executors.newCachedThreadPool();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this.executor;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ServerConnection getNetworkSupport() {
 | 
			
		||||
        return networkConnection;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package pp.mdga.client;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.client.acoustic.MdgaSound;
 | 
			
		||||
import pp.mdga.client.server.MdgaServer;
 | 
			
		||||
import pp.mdga.client.view.CeremonyView;
 | 
			
		||||
import pp.mdga.client.view.GameView;
 | 
			
		||||
import pp.mdga.client.view.LobbyView;
 | 
			
		||||
@@ -31,7 +32,7 @@ public class ModelSynchronizer {
 | 
			
		||||
    private int test = 0;
 | 
			
		||||
 | 
			
		||||
    public void animationEnd() {
 | 
			
		||||
 | 
			
		||||
        app.getGameLogic().selectAnimationEnd();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectSwap(UUID a, UUID b) {
 | 
			
		||||
@@ -82,13 +83,14 @@ public void confirm() {
 | 
			
		||||
        GameView gameView = (GameView) app.getView();
 | 
			
		||||
 | 
			
		||||
        if(a != null && b != null) {
 | 
			
		||||
            //swap
 | 
			
		||||
            selectPiece(a);
 | 
			
		||||
            selectPiece(b);
 | 
			
		||||
            gameView.getBoardHandler().clearSelectable();
 | 
			
		||||
        } else if (a != null) {
 | 
			
		||||
            //piece
 | 
			
		||||
            selectPiece(a);
 | 
			
		||||
            gameView.getBoardHandler().clearSelectable();
 | 
			
		||||
        } else if (card != null){
 | 
			
		||||
            //card
 | 
			
		||||
            selectCard(card);
 | 
			
		||||
            gameView.getGuiHandler().clearSelectableCards();
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new RuntimeException("nothing to confirm");
 | 
			
		||||
@@ -98,50 +100,33 @@ public void confirm() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectTsk(Color color) {
 | 
			
		||||
        // TODO call from somewhere
 | 
			
		||||
        LOGGER.log(Level.INFO, "selectTsk: {0}", color);
 | 
			
		||||
        LobbyView view = (LobbyView) app.getView();
 | 
			
		||||
        view.setTaken(color, true, true, "OwnPlayerName");
 | 
			
		||||
        testColor = color;
 | 
			
		||||
        app.getGameLogic().selectTsk(color);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void unselectTsk() {
 | 
			
		||||
        // TODO call from somewhere
 | 
			
		||||
        LOGGER.log(Level.INFO, "unselectTsk");
 | 
			
		||||
        app.getGameLogic().selectTsk(Color.NONE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void rolledDice() {
 | 
			
		||||
        // TODO call from somewhere
 | 
			
		||||
        LOGGER.log(Level.INFO, "rolledDice");
 | 
			
		||||
        app.getGameLogic().selectDice();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setName(String name) {
 | 
			
		||||
        // TODO call from somewhere
 | 
			
		||||
        LOGGER.log(Level.INFO, "setName: {0}", name);
 | 
			
		||||
        app.getGameLogic().selectName(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setReady(boolean ready) {
 | 
			
		||||
        LOGGER.log(Level.INFO, "setReady");
 | 
			
		||||
        LobbyView view = (LobbyView) app.getView();
 | 
			
		||||
        view.setReady(testColor, ready);
 | 
			
		||||
        test++;
 | 
			
		||||
 | 
			
		||||
        if(test > 2) {
 | 
			
		||||
            test = 0;
 | 
			
		||||
            enter(MdgaState.GAME);
 | 
			
		||||
        }
 | 
			
		||||
        app.getGameLogic().selectReady(ready);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHost(int port) {
 | 
			
		||||
        // TODO call from somewhere
 | 
			
		||||
        LOGGER.log(Level.INFO, "setHost: {0}", port);
 | 
			
		||||
        enter(MdgaState.LOBBY);
 | 
			
		||||
        app.getGameLogic().selectJoin("");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setJoin(String ip, int port) {
 | 
			
		||||
        // TODO call from somewhere
 | 
			
		||||
        LOGGER.log(Level.INFO, "setJoin with IP: {0}, Port: {1}", new Object[]{ip, port});
 | 
			
		||||
        enter(MdgaState.LOBBY);
 | 
			
		||||
        app.getGameLogic().selectJoin(ip);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void leave() {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,91 @@
 | 
			
		||||
package pp.mdga.client;
 | 
			
		||||
 | 
			
		||||
import com.jme3.network.*;
 | 
			
		||||
import pp.mdga.message.client.ClientMessage;
 | 
			
		||||
import pp.mdga.message.server.ServerMessage;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
 | 
			
		||||
public class NetworkSupport implements MessageListener<Client>, ClientStateListener, ServerConnection {
 | 
			
		||||
    private static final System.Logger LOGGER = System.getLogger(NetworkSupport.class.getName());
 | 
			
		||||
    private final MdgaApp app;
 | 
			
		||||
    private Client client;
 | 
			
		||||
 | 
			
		||||
    public NetworkSupport(MdgaApp app) {
 | 
			
		||||
        this.app = app;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public MdgaApp getApp() {
 | 
			
		||||
        return this.app;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isConnected() {
 | 
			
		||||
        return this.client != null && this.client.isConnected();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void connect() {
 | 
			
		||||
        if (this.client != null) {
 | 
			
		||||
            throw new IllegalStateException("trying to join a game again");
 | 
			
		||||
        } else {
 | 
			
		||||
            try {
 | 
			
		||||
                this.initNetwork("localhost", 2345);
 | 
			
		||||
            } catch (IOException e) {
 | 
			
		||||
                LOGGER.log(System.Logger.Level.ERROR, "could not connect to server", e);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void disconnect() {
 | 
			
		||||
        if (this.client != null) {
 | 
			
		||||
            this.client.close();
 | 
			
		||||
            this.client = null;
 | 
			
		||||
            LOGGER.log(System.Logger.Level.INFO, "client closed");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void initNetwork(String host, int port) throws IOException {
 | 
			
		||||
        if (this.client != null) {
 | 
			
		||||
            throw new IllegalStateException("trying to join a game again");
 | 
			
		||||
        } else {
 | 
			
		||||
            this.client = Network.connectToServer(host, port);
 | 
			
		||||
            this.client.start();
 | 
			
		||||
            this.client.addMessageListener(this);
 | 
			
		||||
            this.client.addClientStateListener(this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void messageReceived(Client client, Message message) {
 | 
			
		||||
        LOGGER.log(System.Logger.Level.INFO, "message received from server: {0}", new Object[]{message});
 | 
			
		||||
        if (message instanceof ServerMessage serverMessage) {
 | 
			
		||||
            this.app.enqueue(() -> serverMessage.accept(this.app.getGameLogic()));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void clientConnected(Client client) {
 | 
			
		||||
        LOGGER.log(System.Logger.Level.INFO, "Client connected: {0}", new Object[]{client});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void clientDisconnected(Client client, ClientStateListener.DisconnectInfo disconnectInfo) {
 | 
			
		||||
        LOGGER.log(System.Logger.Level.INFO, "Client {0} disconnected: {1}", new Object[]{client, disconnectInfo});
 | 
			
		||||
        if (this.client != client) {
 | 
			
		||||
            throw new IllegalArgumentException("parameter value must be client");
 | 
			
		||||
        } else {
 | 
			
		||||
            LOGGER.log(System.Logger.Level.INFO, "client still connected: {0}", new Object[]{client.isConnected()});
 | 
			
		||||
            this.client = null;
 | 
			
		||||
            this.disconnect();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void send(ClientMessage message) {
 | 
			
		||||
        LOGGER.log(System.Logger.Level.INFO, "sending {0}", new Object[]{message});
 | 
			
		||||
        if (this.client == null) {
 | 
			
		||||
            LOGGER.log(System.Logger.Level.WARNING, "client not connected");
 | 
			
		||||
        } else {
 | 
			
		||||
            this.client.send(message);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -24,8 +24,8 @@ public void addTestNotification(Notification n) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void update() {
 | 
			
		||||
        //TODO fetch model notifications
 | 
			
		||||
        for (Notification n : notifications) {
 | 
			
		||||
        Notification n = app.getGameLogic().getNotification();
 | 
			
		||||
        if(n != null) {
 | 
			
		||||
            switch (app.getState()) {
 | 
			
		||||
                case MAIN:
 | 
			
		||||
                    handleMain(n);
 | 
			
		||||
@@ -43,14 +43,13 @@ public void update() {
 | 
			
		||||
                    throw new RuntimeException("no notification expected: " + n.toString());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        notifications.clear();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void handleMain(Notification notification) {
 | 
			
		||||
        if (notification instanceof LobbyDialogNotification) {
 | 
			
		||||
            app.enter(MdgaState.LOBBY);
 | 
			
		||||
        } else {
 | 
			
		||||
            throw new RuntimeException("notification not expected: " + notification.toString());
 | 
			
		||||
            throw new RuntimeException("notification not expected: ");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -62,8 +61,8 @@ private void handleLobby(Notification notification) {
 | 
			
		||||
            lobbyView.setTaken(n.getColor(), true, false, n.getName());
 | 
			
		||||
        } else if (notification instanceof TskUnselectNotification n) {
 | 
			
		||||
            lobbyView.setTaken(n.getColor(), false, false, null);
 | 
			
		||||
            //} else if(notification instanceof LobbyReadyNotification lobbyReadyNotification) {
 | 
			
		||||
            //lobbyView.setReady(lobbyReadyNotification.getColor(), lobbyReadyNotification.isReady()):
 | 
			
		||||
            } else if(notification instanceof LobbyReadyNotification lobbyReadyNotification) {
 | 
			
		||||
            lobbyView.setReady(lobbyReadyNotification.getColor(), lobbyReadyNotification.isReady());
 | 
			
		||||
        } else if (notification instanceof GameNotification) {
 | 
			
		||||
            app.enter(MdgaState.GAME);
 | 
			
		||||
        } else {
 | 
			
		||||
@@ -165,7 +164,7 @@ private void handleGame(Notification notification) {
 | 
			
		||||
        } else if (notification instanceof WaitMoveNotification) {
 | 
			
		||||
            //TODO ???
 | 
			
		||||
        } else if (notification instanceof SelectableMoveNotification n) {
 | 
			
		||||
            boardHandler.outlineMove(n.getPieces(), n.getMoveIndexe(), n.getHomeMoves());
 | 
			
		||||
            boardHandler.outlineMove(n.getPieces(), n.getMoveIndices(), n.getHomeMoves());
 | 
			
		||||
        } else if (notification instanceof SelectableSwapNotification n) {
 | 
			
		||||
            boardHandler.outlineSwap(n.getOwnPieces(), n.getEnemyPieces());
 | 
			
		||||
       // } //else if (notification instanceof SelectableShieldNotification n) {
 | 
			
		||||
 
 | 
			
		||||
@@ -317,7 +317,6 @@ public void setTaken(Taken taken, String name) {
 | 
			
		||||
        } else {
 | 
			
		||||
            label.setText(name);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        onUnHover();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
import com.jme3.math.Vector2f;
 | 
			
		||||
import com.jme3.scene.Node;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
import pp.mdga.client.NetworkSupport;
 | 
			
		||||
import pp.mdga.client.button.ButtonLeft;
 | 
			
		||||
import pp.mdga.client.button.ButtonRight;
 | 
			
		||||
import pp.mdga.client.button.InputButton;
 | 
			
		||||
@@ -11,7 +12,7 @@
 | 
			
		||||
 | 
			
		||||
import java.util.prefs.Preferences;
 | 
			
		||||
 | 
			
		||||
public class HostDialog  extends Dialog {
 | 
			
		||||
public class HostDialog  extends NetworkDialog {
 | 
			
		||||
    private InputButton portInput;
 | 
			
		||||
 | 
			
		||||
    private ButtonRight hostButton;
 | 
			
		||||
@@ -22,7 +23,7 @@ public class HostDialog  extends Dialog {
 | 
			
		||||
    private Preferences prefs = Preferences.userNodeForPackage(JoinDialog.class);
 | 
			
		||||
 | 
			
		||||
    public HostDialog(MdgaApp app, Node node, MainView view) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
        super(app, node, (NetworkSupport) app.getNetworkSupport());
 | 
			
		||||
 | 
			
		||||
        this.view = view;
 | 
			
		||||
 | 
			
		||||
@@ -58,6 +59,7 @@ public void update() {
 | 
			
		||||
 | 
			
		||||
    public String getPort() {
 | 
			
		||||
        prefs.put("hostPort", portInput.getString());
 | 
			
		||||
        setPortNumber(Integer.parseInt(portInput.getString()));
 | 
			
		||||
        return portInput.getString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -65,4 +67,13 @@ public void resetPort() {
 | 
			
		||||
        portInput.reset();
 | 
			
		||||
        prefs.put("hostPort", "11111");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void hostServer() {
 | 
			
		||||
        startServer();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void connectServerAsClient() {
 | 
			
		||||
        connectServer();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
import com.jme3.math.Vector2f;
 | 
			
		||||
import com.jme3.scene.Node;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
import pp.mdga.client.NetworkSupport;
 | 
			
		||||
import pp.mdga.client.acoustic.AcousticHandler;
 | 
			
		||||
import pp.mdga.client.button.ButtonLeft;
 | 
			
		||||
import pp.mdga.client.button.ButtonRight;
 | 
			
		||||
@@ -12,7 +13,7 @@
 | 
			
		||||
 | 
			
		||||
import java.util.prefs.Preferences;
 | 
			
		||||
 | 
			
		||||
public class JoinDialog extends Dialog {
 | 
			
		||||
public class JoinDialog extends NetworkDialog {
 | 
			
		||||
    private InputButton ipInput;
 | 
			
		||||
    private InputButton portInput;
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +25,7 @@ public class JoinDialog extends Dialog {
 | 
			
		||||
    private Preferences prefs = Preferences.userNodeForPackage(JoinDialog.class);
 | 
			
		||||
 | 
			
		||||
    public JoinDialog(MdgaApp app, Node node, MainView view) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
        super(app, node, (NetworkSupport) app.getNetworkSupport());
 | 
			
		||||
 | 
			
		||||
        this.view = view;
 | 
			
		||||
 | 
			
		||||
@@ -68,6 +69,7 @@ public void update() {
 | 
			
		||||
 | 
			
		||||
    public String getIpt() {
 | 
			
		||||
        prefs.put("joinIp", ipInput.getString());
 | 
			
		||||
        setHostname(ipInput.getString());
 | 
			
		||||
        return ipInput.getString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -78,6 +80,7 @@ public void resetIp() {
 | 
			
		||||
 | 
			
		||||
    public String getPort() {
 | 
			
		||||
        prefs.put("joinPort", portInput.getString());
 | 
			
		||||
        setPortNumber(Integer.parseInt(portInput.getString()));
 | 
			
		||||
        return portInput.getString();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -85,4 +88,8 @@ public void resetPort() {
 | 
			
		||||
        portInput.reset();
 | 
			
		||||
        prefs.put("joinPort", "11111");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void connectToServer() {
 | 
			
		||||
        connectServer();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,73 @@
 | 
			
		||||
package pp.mdga.client.dialog;
 | 
			
		||||
 | 
			
		||||
import com.jme3.scene.Node;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
import pp.mdga.client.NetworkSupport;
 | 
			
		||||
import pp.mdga.client.server.MdgaServer;
 | 
			
		||||
 | 
			
		||||
import java.util.concurrent.ExecutionException;
 | 
			
		||||
import java.util.concurrent.Future;
 | 
			
		||||
 | 
			
		||||
public abstract class NetworkDialog extends Dialog {
 | 
			
		||||
 | 
			
		||||
    private NetworkSupport network;
 | 
			
		||||
    private String hostname;
 | 
			
		||||
    private int portNumber;
 | 
			
		||||
    private Future<Object> connectionFuture;
 | 
			
		||||
 | 
			
		||||
    public NetworkDialog(MdgaApp app, Node node, NetworkSupport network) {
 | 
			
		||||
        super(app, node);
 | 
			
		||||
        this.network = network;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setHostname(String hostname) {
 | 
			
		||||
        this.hostname = hostname;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPortNumber(int portNumber) {
 | 
			
		||||
        this.portNumber = portNumber;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    protected Object initNetwork() {
 | 
			
		||||
        try {
 | 
			
		||||
            this.network.initNetwork(this.hostname, this.portNumber);
 | 
			
		||||
            return null;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void connectServer() {
 | 
			
		||||
 | 
			
		||||
        try {
 | 
			
		||||
            connectionFuture = this.network.getApp().getExecutor().submit(this::initNetwork);
 | 
			
		||||
        } catch (NumberFormatException var2) {
 | 
			
		||||
            throw new NumberFormatException("Port must be a number");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void startServer() {
 | 
			
		||||
        (new Thread(() -> {
 | 
			
		||||
            try {
 | 
			
		||||
                MdgaServer mdgaServer = new MdgaServer(portNumber);
 | 
			
		||||
                mdgaServer.run();
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                throw new RuntimeException(e);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        })).start();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void update(float delta) {
 | 
			
		||||
        if (this.connectionFuture != null && this.connectionFuture.isDone()) {
 | 
			
		||||
            try {
 | 
			
		||||
                this.connectionFuture.get();
 | 
			
		||||
            } catch (ExecutionException ignored) {
 | 
			
		||||
            } catch (InterruptedException e) {
 | 
			
		||||
                Thread.currentThread().interrupt();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -7,6 +7,7 @@
 | 
			
		||||
import com.jme3.texture.Texture2D;
 | 
			
		||||
import pp.mdga.client.MdgaApp;
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
import pp.mdga.game.BonusCard;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@@ -70,7 +71,7 @@ public void hideDice() {
 | 
			
		||||
        cardLayerHandler.hideDice();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addCard(pp.mdga.game.BonusCard card) {
 | 
			
		||||
    public void addCard(BonusCard card) {
 | 
			
		||||
        cardLayerHandler.addCard(card);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -78,7 +79,7 @@ public void clearSelectableCards() {
 | 
			
		||||
        cardLayerHandler.clearSelectableCards();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSelectableCards(List<pp.mdga.game.BonusCard> select) {
 | 
			
		||||
    public void setSelectableCards(List<BonusCard> select) {
 | 
			
		||||
        cardLayerHandler.setSelectableCards(select);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@
 | 
			
		||||
import com.jme3.network.serializing.Serializer;
 | 
			
		||||
import pp.mdga.game.Game;
 | 
			
		||||
import pp.mdga.game.Player;
 | 
			
		||||
import pp.mdga.game.Statistic;
 | 
			
		||||
import pp.mdga.message.client.*;
 | 
			
		||||
import pp.mdga.message.server.*;
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
@@ -13,8 +14,8 @@
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.lang.System.Logger;
 | 
			
		||||
import java.lang.System.Logger.Level;
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.concurrent.BlockingQueue;
 | 
			
		||||
import java.util.concurrent.LinkedBlockingQueue;
 | 
			
		||||
import java.util.logging.LogManager;
 | 
			
		||||
@@ -51,7 +52,6 @@ public MdgaServer(int port) {
 | 
			
		||||
        LOGGER.log(Level.INFO, "Creating MdgaServer"); //NON-NLS
 | 
			
		||||
        logic = new ServerGameLogic(this, new Game());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *
 | 
			
		||||
     */
 | 
			
		||||
@@ -89,6 +89,7 @@ private void processNextMessage() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void initializeSerializables() {
 | 
			
		||||
        Serializer.registerClass(UUID.class, new UUIDSerializer());
 | 
			
		||||
        Serializer.registerClass(AnimationEndMessage.class);
 | 
			
		||||
        Serializer.registerClass(ClientStartGameMessage.class);
 | 
			
		||||
        Serializer.registerClass(DeselectTSKMessage.class);
 | 
			
		||||
@@ -106,7 +107,6 @@ private void initializeSerializables() {
 | 
			
		||||
        Serializer.registerClass(SelectCardMessage.class);
 | 
			
		||||
        Serializer.registerClass(SelectedPiecesMessage.class);
 | 
			
		||||
        Serializer.registerClass(SelectTSKMessage.class);
 | 
			
		||||
 | 
			
		||||
        Serializer.registerClass(ActivePlayerMessage.class);
 | 
			
		||||
        Serializer.registerClass(AnyPieceMessage.class);
 | 
			
		||||
        Serializer.registerClass(BriefingMessage.class);
 | 
			
		||||
@@ -134,12 +134,15 @@ private void initializeSerializables() {
 | 
			
		||||
        Serializer.registerClass(UpdateReadyMessage.class);
 | 
			
		||||
        Serializer.registerClass(UpdateTSKMessage.class);
 | 
			
		||||
        Serializer.registerClass(WaitPieceMessage.class);
 | 
			
		||||
        Serializer.registerClass(Player.class);
 | 
			
		||||
        Serializer.registerClass(Statistic.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void registerListeners() {
 | 
			
		||||
        myServer.addMessageListener(this, AnimationEndMessage.class);
 | 
			
		||||
        myServer.addMessageListener(this, ClientStartGameMessage.class);
 | 
			
		||||
        myServer.addMessageListener(this, DeselectTSKMessage.class);
 | 
			
		||||
        myServer.addMessageListener(this, DisconnectedMessage.class);
 | 
			
		||||
        myServer.addMessageListener(this, ForceContinueGameMessage.class);
 | 
			
		||||
        myServer.addMessageListener(this, StartGameMessage.class);
 | 
			
		||||
        myServer.addMessageListener(this, JoinedLobbyMessage.class);
 | 
			
		||||
@@ -187,7 +190,7 @@ private void messageReceived(HostedConnection source, ClientMessage message) {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void connectionAdded(Server server, HostedConnection hostedConnection) {
 | 
			
		||||
        LOGGER.log(Level.INFO, "new connection {0}", hostedConnection); //NON-NLS
 | 
			
		||||
        LOGGER.log(Level.DEBUG, "new connection {0}", hostedConnection); //NON-NLS
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
package pp.mdga.client.server;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.nio.ByteBuffer;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.jme3.network.serializing.Serializer;
 | 
			
		||||
 | 
			
		||||
public class UUIDSerializer extends Serializer
 | 
			
		||||
{
 | 
			
		||||
    @Override
 | 
			
		||||
    public <T> T readObject(ByteBuffer data, Class<T> c) throws IOException
 | 
			
		||||
{
 | 
			
		||||
    byte[] uuid = new byte[36];
 | 
			
		||||
    data.get(uuid);
 | 
			
		||||
 | 
			
		||||
    return (T) UUID.fromString(new String(uuid));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void writeObject(ByteBuffer buffer, Object object) throws IOException
 | 
			
		||||
    {
 | 
			
		||||
        UUID uuid = (UUID) object;
 | 
			
		||||
        buffer.put(uuid.toString().getBytes());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -7,6 +7,9 @@
 | 
			
		||||
import pp.mdga.client.dialog.JoinDialog;
 | 
			
		||||
import pp.mdga.client.dialog.StartDialog;
 | 
			
		||||
 | 
			
		||||
import java.net.Inet4Address;
 | 
			
		||||
import java.net.UnknownHostException;
 | 
			
		||||
 | 
			
		||||
public class MainView extends MdgaView {
 | 
			
		||||
    private enum SubState {
 | 
			
		||||
        HOST,
 | 
			
		||||
@@ -99,12 +102,25 @@ private void tryHost() {
 | 
			
		||||
 | 
			
		||||
            if(port >= 1 && port <= 65535) {
 | 
			
		||||
                app.getModelSynchronize().setName(startDialog.getName());
 | 
			
		||||
                hostDialog.setHostname(Inet4Address.getLocalHost().getHostAddress());
 | 
			
		||||
                hostDialog.hostServer();
 | 
			
		||||
                try {
 | 
			
		||||
                    Thread.sleep(1000);
 | 
			
		||||
                } catch (InterruptedException ignored) {
 | 
			
		||||
                }
 | 
			
		||||
                hostDialog.connectServerAsClient();
 | 
			
		||||
                try {
 | 
			
		||||
                    Thread.sleep(1000);
 | 
			
		||||
                } catch (InterruptedException ignored) {
 | 
			
		||||
                }
 | 
			
		||||
                app.getModelSynchronize().setHost(port);
 | 
			
		||||
                //app.getAcousticHandler().playSound(MdgaSound.WRONG_INPUT);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        } catch (NumberFormatException e) {
 | 
			
		||||
            //nothing
 | 
			
		||||
        } catch (UnknownHostException e) {
 | 
			
		||||
            throw new RuntimeException(e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        hostDialog.resetPort();
 | 
			
		||||
@@ -127,6 +143,7 @@ private void tryJoin() {
 | 
			
		||||
            if (isValidIpAddress(ip)) {
 | 
			
		||||
                app.getModelSynchronize().setName(startDialog.getName());
 | 
			
		||||
                app.getModelSynchronize().setJoin(ip, port);
 | 
			
		||||
                joinDialog.connectToServer();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        } catch (IllegalArgumentException e) {
 | 
			
		||||
 
 | 
			
		||||
@@ -28,9 +28,10 @@ public class ClientGameLogic implements ServerInterpreter {
 | 
			
		||||
    private final InterruptState interruptState = new InterruptState(null, this);
 | 
			
		||||
    private final SettingsState settingsState = new SettingsState(null, this);
 | 
			
		||||
 | 
			
		||||
    public ClientGameLogic(Game game, ClientSender clientSender) {
 | 
			
		||||
        this.game = game;
 | 
			
		||||
    public ClientGameLogic(ClientSender clientSender) {
 | 
			
		||||
        this.game = new Game();
 | 
			
		||||
        this.clientSender = clientSender;
 | 
			
		||||
        dialogsState.enter();
 | 
			
		||||
        state = dialogsState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -244,7 +245,11 @@ public void selectName(String name){
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectReady(boolean ready){
 | 
			
		||||
        state.selectReady(ready);
 | 
			
		||||
        if(ready){
 | 
			
		||||
            state.selectReady();
 | 
			
		||||
        } else {
 | 
			
		||||
            state.selectUnready();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectHost(String name){
 | 
			
		||||
@@ -304,7 +309,11 @@ public SettingsState getSettings(){
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Notification getNotification(){
 | 
			
		||||
        return notifications.remove(0);
 | 
			
		||||
        if(!notifications.isEmpty()){
 | 
			
		||||
            return notifications.remove(0);
 | 
			
		||||
        } else {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void addNotification(Notification notification){
 | 
			
		||||
 
 | 
			
		||||
@@ -200,7 +200,7 @@ public void setName(String name) {
 | 
			
		||||
        LOGGER.log(Level.DEBUG, "Setting name not allowed.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectReady(boolean ready) {
 | 
			
		||||
    public void selectReady() {
 | 
			
		||||
        LOGGER.log(Level.DEBUG, "Selecting ready not allowed.");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ public void enter(){
 | 
			
		||||
 | 
			
		||||
    public void setState(DialogStates newState){
 | 
			
		||||
        currentState.exit();
 | 
			
		||||
        currentState.enter();
 | 
			
		||||
        newState.enter();
 | 
			
		||||
        currentState = newState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -75,6 +75,11 @@ public void selectLeave(){
 | 
			
		||||
        currentState.selectLeave();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setName(String name){
 | 
			
		||||
        currentState.setName(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void selectTSK(Color color){
 | 
			
		||||
        currentState.selectTSK(color);
 | 
			
		||||
@@ -86,8 +91,8 @@ public void deselectTSK(Color color){
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void selectReady(boolean ready){
 | 
			
		||||
        currentState.selectReady(ready);
 | 
			
		||||
    public void selectReady(){
 | 
			
		||||
        currentState.selectReady();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -8,10 +8,19 @@ public class InterruptState extends ClientState {
 | 
			
		||||
 | 
			
		||||
    private ClientState previousState;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new InterruptState
 | 
			
		||||
     *
 | 
			
		||||
     * @param parent the parent state
 | 
			
		||||
     * @param logic the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public InterruptState(ClientState parent, ClientGameLogic logic) {
 | 
			
		||||
        super(parent, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enters the new state machine
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
        previousState = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
package pp.mdga.client;
 | 
			
		||||
 | 
			
		||||
public interface ServerConnection extends ClientSender {
 | 
			
		||||
    boolean isConnected();
 | 
			
		||||
 | 
			
		||||
    void connect();
 | 
			
		||||
 | 
			
		||||
    void disconnect();
 | 
			
		||||
}
 | 
			
		||||
@@ -7,26 +7,44 @@
 | 
			
		||||
 | 
			
		||||
public class SettingsState extends ClientState {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The current state of the settings
 | 
			
		||||
     */
 | 
			
		||||
    private SettingStates currentState;
 | 
			
		||||
 | 
			
		||||
    private final MainSettingsState mainSettingsState = new MainSettingsState(this, logic);
 | 
			
		||||
    private final AudioSettingsState audioSettingsState = new AudioSettingsState(this, logic);
 | 
			
		||||
    private final VideoSettingsState videoSettingsState = new VideoSettingsState(this, logic);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new SettingsState
 | 
			
		||||
     *
 | 
			
		||||
     * @param parent the parent state
 | 
			
		||||
     * @param logic the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public SettingsState(ClientState parent, ClientGameLogic logic) {
 | 
			
		||||
        super(parent, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Enters the current state
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
        currentState = mainSettingsState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Exits the current state
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public void exit() {
 | 
			
		||||
        currentState.exit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Changes the current state
 | 
			
		||||
     */
 | 
			
		||||
    public SettingStates getState(){
 | 
			
		||||
        return currentState;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@
 | 
			
		||||
import pp.mdga.message.server.ServerStartGameMessage;
 | 
			
		||||
import pp.mdga.message.server.UpdateReadyMessage;
 | 
			
		||||
import pp.mdga.message.server.UpdateTSKMessage;
 | 
			
		||||
import pp.mdga.notification.LobbyReadyNotification;
 | 
			
		||||
import pp.mdga.notification.TskSelectNotification;
 | 
			
		||||
import pp.mdga.notification.TskUnselectNotification;
 | 
			
		||||
 | 
			
		||||
@@ -35,6 +36,7 @@ public void exit() {
 | 
			
		||||
    @Override
 | 
			
		||||
    public void selectLeave() {
 | 
			
		||||
        parent.setState(parent.getStartDialog());
 | 
			
		||||
        logic.send(new LeaveGameMessage());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -48,7 +50,7 @@ public void deselectTSK(Color color) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void selectReady(boolean ready) {
 | 
			
		||||
    public void selectReady() {
 | 
			
		||||
        logic.send(new LobbyReadyMessage());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -75,6 +77,7 @@ public void received(ServerStartGameMessage msg){
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void received(LobbyPlayerJoinedMessage msg){
 | 
			
		||||
        logic.addNotification(new TskSelectNotification(msg.getPlayer().getColor(), msg.getPlayer().getName(), parent.getOwnPlayerId()== msg.getId()));
 | 
			
		||||
        logic.getGame().getPlayers().put(msg.getId(), msg.getPlayer());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -93,6 +96,7 @@ public void received(LobbyPlayerLeaveMessage msg){
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void received(UpdateReadyMessage msg){
 | 
			
		||||
        logic.addNotification(new LobbyReadyNotification(logic.getGame().getPlayers().get(msg.getPlayerId()).getColor(), msg.isReady()));
 | 
			
		||||
        logic.getGame().getPlayers().get(msg.getPlayerId()).setReady(msg.isReady());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@
 | 
			
		||||
import pp.mdga.client.ClientGameLogic;
 | 
			
		||||
import pp.mdga.client.ClientState;
 | 
			
		||||
import pp.mdga.client.DialogsState;
 | 
			
		||||
import pp.mdga.notification.LobbyDialogNotification;
 | 
			
		||||
 | 
			
		||||
public class NetworkDialogState extends DialogStates {
 | 
			
		||||
 | 
			
		||||
@@ -55,9 +56,7 @@ public void selectLeave() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void selectJoin(String IP) {
 | 
			
		||||
        if(checkIP(IP)){
 | 
			
		||||
            parent.setState(parent.getLobby());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        parent.setState(parent.getLobby());
 | 
			
		||||
        logic.addNotification(new LobbyDialogNotification());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,12 @@ public void selectHost(String name) {
 | 
			
		||||
        logic.setHost(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setName(String name) {
 | 
			
		||||
        parent.setState(parent.getNetworkDialog());
 | 
			
		||||
        parent.setOwnPlayerName(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void selectLeave() {
 | 
			
		||||
        parent.exit();
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,8 @@
 | 
			
		||||
import pp.mdga.notification.WaitMoveNotification;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
public class NoPieceState extends ChoosePieceStates {
 | 
			
		||||
@@ -49,7 +51,13 @@ public void received(WaitPieceMessage msg){
 | 
			
		||||
    @Override
 | 
			
		||||
    public void received(StartPieceMessage msg){
 | 
			
		||||
        Piece piece = logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier());
 | 
			
		||||
        //TODO: logic.addNotification(null);
 | 
			
		||||
        List<UUID> listPiece = new ArrayList<>();
 | 
			
		||||
        List<Integer> listIndex = new ArrayList<>();
 | 
			
		||||
        List<Boolean> homeMove = new ArrayList<>();
 | 
			
		||||
        listPiece.add(piece.getUuid());
 | 
			
		||||
        listIndex.add(msg.getTargetIndex());
 | 
			
		||||
        homeMove.add(false);
 | 
			
		||||
        logic.addNotification(new SelectableMoveNotification(listPiece, listIndex, homeMove));
 | 
			
		||||
        parent.setState(parent.getStartPiece());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,13 @@
 | 
			
		||||
package pp.mdga.game;
 | 
			
		||||
 | 
			
		||||
import com.jme3.network.serializing.Serializable;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class will be used to handle general PlayerData
 | 
			
		||||
 */
 | 
			
		||||
@Serializable
 | 
			
		||||
public class Player {
 | 
			
		||||
    /**
 | 
			
		||||
     * The name of the player.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
package pp.mdga.game;
 | 
			
		||||
 | 
			
		||||
import com.jme3.network.serializing.Serializable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class will be used to store Statistics during the Game;
 | 
			
		||||
 */
 | 
			
		||||
@Serializable
 | 
			
		||||
public class Statistic {
 | 
			
		||||
    /**
 | 
			
		||||
     * The number of cards played.
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ public StartGameMessage(boolean forceStartGame){
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a new ForceStartGame message.
 | 
			
		||||
     */
 | 
			
		||||
    public StartGameMessage() {
 | 
			
		||||
    private StartGameMessage() {
 | 
			
		||||
        super();
 | 
			
		||||
        forceStartGame = false;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,13 +7,20 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that is sent when a card is acquired.
 | 
			
		||||
 */
 | 
			
		||||
public class AcquireCardNotification extends Notification{
 | 
			
		||||
public class AcquireCardNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The id of the card that was acquired.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID cardId;
 | 
			
		||||
 | 
			
		||||
    private UUID cardId;
 | 
			
		||||
    private BonusCard bonusCard;
 | 
			
		||||
    /**
 | 
			
		||||
     * The bonus card that was acquired.
 | 
			
		||||
     */
 | 
			
		||||
    private final BonusCard bonusCard;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param cardId The id of the card that was acquired.
 | 
			
		||||
     */
 | 
			
		||||
    public AcquireCardNotification(BonusCard bonusCard, UUID cardId) {
 | 
			
		||||
@@ -23,6 +30,7 @@ public AcquireCardNotification(BonusCard bonusCard, UUID cardId) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the id of the card that was acquired.
 | 
			
		||||
     *
 | 
			
		||||
     * @return The id of the card that was acquired.
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getCardId() {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,12 +6,16 @@
 | 
			
		||||
 * Notification that the active player has changed
 | 
			
		||||
 */
 | 
			
		||||
public class ActivePlayerNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the active player
 | 
			
		||||
     */
 | 
			
		||||
    private Color color;
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color the color of the active player
 | 
			
		||||
     */
 | 
			
		||||
    public ActivePlayerNotification(Color color) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Class CeremonyNotification
 | 
			
		||||
 * Represents a notification for a ceremony in the game.
 | 
			
		||||
 *
 | 
			
		||||
 * <p>
 | 
			
		||||
 * Index mapping:
 | 
			
		||||
 * index = 0 ==> winner
 | 
			
		||||
 * index = 1 ==> 2nd
 | 
			
		||||
@@ -16,6 +16,9 @@
 | 
			
		||||
 * index = 4 ==> total
 | 
			
		||||
 */
 | 
			
		||||
public class CeremonyNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * Attributes.
 | 
			
		||||
     */
 | 
			
		||||
    private ArrayList<Color> colors;
 | 
			
		||||
    private ArrayList<String> names;
 | 
			
		||||
    private ArrayList<Integer> piecesThrown;
 | 
			
		||||
@@ -40,8 +43,6 @@ public CeremonyNotification() {
 | 
			
		||||
        this.bonusNodes = new ArrayList<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Getters and Setters
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return the list of colors
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
 * Notification that the dice is now.
 | 
			
		||||
 */
 | 
			
		||||
public class DiceNowNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,15 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that is sent when a player has diced.
 | 
			
		||||
 */
 | 
			
		||||
public class DicingNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
public class DicingNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player that diced.
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color The color of the player that diced.
 | 
			
		||||
     */
 | 
			
		||||
    public DicingNotification(Color color) {
 | 
			
		||||
@@ -19,6 +22,7 @@ public DicingNotification(Color color) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color of the player that diced.
 | 
			
		||||
     *
 | 
			
		||||
     * @return The color of the player that diced.
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,14 +6,20 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that a card has been drawn
 | 
			
		||||
 */
 | 
			
		||||
public class DrawCardNotification extends Notification  {
 | 
			
		||||
public class DrawCardNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player who drew the card
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    private BonusCard card;
 | 
			
		||||
    /**
 | 
			
		||||
     * The card that was drawn
 | 
			
		||||
     */
 | 
			
		||||
    private final BonusCard card;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param color the color of the player who drew the card
 | 
			
		||||
     * @param card the card that was drawn
 | 
			
		||||
     * @param card  the card that was drawn
 | 
			
		||||
     */
 | 
			
		||||
    public DrawCardNotification(Color color, BonusCard card) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * GameNotification class
 | 
			
		||||
 */
 | 
			
		||||
public class GameNotification extends Notification{
 | 
			
		||||
public class GameNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -6,14 +6,20 @@
 | 
			
		||||
 * Notification that a piece has moved to a home.
 | 
			
		||||
 */
 | 
			
		||||
public class HomeMoveNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The unique identifier of the piece.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID pieceId;
 | 
			
		||||
 | 
			
		||||
    private UUID pieceId;
 | 
			
		||||
    private int homeIndex;
 | 
			
		||||
    /**
 | 
			
		||||
     * The index of the home position.
 | 
			
		||||
     */
 | 
			
		||||
    private final int homeIndex;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param pieceId the piece id
 | 
			
		||||
     * @param pieceId   the piece id
 | 
			
		||||
     * @param homeIndex the home index
 | 
			
		||||
     */
 | 
			
		||||
    public HomeMoveNotification(UUID pieceId, int homeIndex) {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,10 @@
 | 
			
		||||
 * Notification that a card has been drawn
 | 
			
		||||
 */
 | 
			
		||||
public class InterruptNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player who disconnected
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param color the color of the player who disconnected
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,5 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that a dialog has been started
 | 
			
		||||
 */
 | 
			
		||||
public class LobbyDialogNotification extends Notification{
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     */
 | 
			
		||||
    public LobbyDialogNotification() {
 | 
			
		||||
    }
 | 
			
		||||
public class LobbyDialogNotification extends Notification {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,43 @@
 | 
			
		||||
package pp.mdga.notification;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
 | 
			
		||||
public class LobbyReadyNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player.
 | 
			
		||||
     */
 | 
			
		||||
    private Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Indicates if the player is ready.
 | 
			
		||||
     */
 | 
			
		||||
    private boolean ready;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     */
 | 
			
		||||
    public LobbyReadyNotification(Color color, boolean ready) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
        this.ready = ready;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method is used to get the color of the player
 | 
			
		||||
     *
 | 
			
		||||
     * @return the color of the player
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
        return color;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method is used to get the ready state of the player
 | 
			
		||||
     *
 | 
			
		||||
     * @return the ready state of the player
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isReady() {
 | 
			
		||||
        return ready;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,14 +1,11 @@
 | 
			
		||||
package pp.mdga.notification;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that a piece has been moved.
 | 
			
		||||
 */
 | 
			
		||||
public class MovePieceNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The unique identifier of the piece being moved.
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,10 @@
 | 
			
		||||
 * Notification that a piece has no shield.
 | 
			
		||||
 */
 | 
			
		||||
public class NoShieldNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private UUID pieceId;
 | 
			
		||||
    /**
 | 
			
		||||
     * The id of the piece that has no shield.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID pieceId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,7 @@
 | 
			
		||||
package pp.mdga.notification;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a notification that can be sent to a player.
 | 
			
		||||
 */
 | 
			
		||||
public abstract class Notification {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,14 +7,21 @@
 | 
			
		||||
 * Notification that a card has been played.
 | 
			
		||||
 */
 | 
			
		||||
public class PlayCardNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player that played the card.
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    private BonusCard card;
 | 
			
		||||
    /**
 | 
			
		||||
     * The card that was played.
 | 
			
		||||
     */
 | 
			
		||||
    private final BonusCard card;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color the color of the player that played the card.
 | 
			
		||||
     * @param card the card that was played.
 | 
			
		||||
     * @param card  the card that was played.
 | 
			
		||||
     */
 | 
			
		||||
    public PlayCardNotification(Color color, BonusCard card) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
@@ -23,6 +30,7 @@ public PlayCardNotification(Color color, BonusCard card) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color of the player that played the card.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the color of the player that played the card.
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
@@ -31,6 +39,7 @@ public Color getColor() {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the card that was played.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the card that was played.
 | 
			
		||||
     */
 | 
			
		||||
    public BonusCard getCard() {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,17 +9,28 @@
 | 
			
		||||
 * Notification that a player is in the game.
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerInGameNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    private String name;
 | 
			
		||||
    private List<UUID> piecesList;
 | 
			
		||||
    /**
 | 
			
		||||
     * The name of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    private final String name;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The list of piece IDs associated with the player.
 | 
			
		||||
     */
 | 
			
		||||
    private final List<UUID> piecesList;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color the color of the player that is in the game.
 | 
			
		||||
     * @param name the name of the player that is in the game.
 | 
			
		||||
     * @param name  the name of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerInGameNotification(Color color,  List<UUID> piecesList, String name) {
 | 
			
		||||
    public PlayerInGameNotification(Color color, List<UUID> piecesList, String name) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
        this.name = name;
 | 
			
		||||
        this.piecesList = piecesList;
 | 
			
		||||
@@ -27,6 +38,7 @@ public PlayerInGameNotification(Color color,  List<UUID> piecesList, String name
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color of the player that is in the game.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
@@ -35,12 +47,18 @@ public Color getColor() {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the name of the player that is in the game.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the name of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the list of piece IDs associated with the player.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the list of piece IDs associated with the player.
 | 
			
		||||
     */
 | 
			
		||||
    public List<UUID> getPiecesList() {
 | 
			
		||||
        return piecesList;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -6,11 +6,14 @@
 | 
			
		||||
 * Notification that a player is in the game.
 | 
			
		||||
 */
 | 
			
		||||
public class ResumeNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color the color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public ResumeNotification(Color color) {
 | 
			
		||||
@@ -19,6 +22,7 @@ public ResumeNotification(Color color) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color of the player that is in the game.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,16 +5,27 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that a die has been rolled.
 | 
			
		||||
 */
 | 
			
		||||
public class RollDiceNotification extends Notification{
 | 
			
		||||
public class RollDiceNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player that rolled the die.
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
    private int eyes;
 | 
			
		||||
    private int moveNumber;
 | 
			
		||||
    /**
 | 
			
		||||
     * The number of eyes that were rolled.
 | 
			
		||||
     */
 | 
			
		||||
    private final int eyes;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The number of the move that was made.
 | 
			
		||||
     */
 | 
			
		||||
    private final int moveNumber;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     * @param color the color of the player that rolled the die.
 | 
			
		||||
     * @param eyes the number of eyes that were rolled.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color      the color of the player that rolled the die.
 | 
			
		||||
     * @param eyes       the number of eyes that were rolled.
 | 
			
		||||
     * @param moveNumber the number of the move that was made.
 | 
			
		||||
     */
 | 
			
		||||
    public RollDiceNotification(Color color, int eyes, int moveNumber) {
 | 
			
		||||
@@ -25,6 +36,7 @@ public RollDiceNotification(Color color, int eyes, int moveNumber) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color of the player that rolled the die.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the color of the player that rolled the die.
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
@@ -33,6 +45,7 @@ public Color getColor() {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the number of eyes that were rolled.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the number of eyes that were rolled.
 | 
			
		||||
     */
 | 
			
		||||
    public int getEyes() {
 | 
			
		||||
@@ -41,6 +54,7 @@ public int getEyes() {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the number of the move that was made.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the number of the move that was made.
 | 
			
		||||
     */
 | 
			
		||||
    public int getMoveNumber() {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,8 +7,10 @@
 | 
			
		||||
 * Notification that contains a list of cards that the player can choose from.
 | 
			
		||||
 */
 | 
			
		||||
public class SelectableCardsNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    private List<BonusCard> cards;
 | 
			
		||||
    /**
 | 
			
		||||
     * The list of cards that the player can choose from.
 | 
			
		||||
     */
 | 
			
		||||
    private final List<BonusCard> cards;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification for selecting pieces and their possible moves.
 | 
			
		||||
 */
 | 
			
		||||
public class SelectableMoveNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
public class SelectableMoveNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * List of UUIDs representing the pieces that can be moved based on the dice roll.
 | 
			
		||||
     */
 | 
			
		||||
@@ -16,7 +15,7 @@ public class SelectableMoveNotification extends Notification{
 | 
			
		||||
    /**
 | 
			
		||||
     * List of integers representing the target nodes the pieces can move to.
 | 
			
		||||
     */
 | 
			
		||||
    private final List<Integer> moveIndexe;
 | 
			
		||||
    private final List<Integer> moveIndices;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * List of booleans indicating whether the corresponding target nodes are in the home area.
 | 
			
		||||
@@ -28,12 +27,12 @@ public class SelectableMoveNotification extends Notification{
 | 
			
		||||
     * Constructs a notification for selectable piece moves.
 | 
			
		||||
     *
 | 
			
		||||
     * @param pieces     the list of pieces that can be moved
 | 
			
		||||
     * @param moveIndexe the list of target nodes for the moves
 | 
			
		||||
     * @param moveIndices the list of target nodes for the moves
 | 
			
		||||
     * @param homeMoves  the list indicating if the target nodes are in the home area
 | 
			
		||||
     */
 | 
			
		||||
    public SelectableMoveNotification(List<UUID> pieces, List<Integer> moveIndexe, List<Boolean> homeMoves) {
 | 
			
		||||
    public SelectableMoveNotification(List<UUID> pieces, List<Integer> moveIndices, List<Boolean> homeMoves) {
 | 
			
		||||
        this.pieces = pieces;
 | 
			
		||||
        this.moveIndexe = moveIndexe;
 | 
			
		||||
        this.moveIndices = moveIndices;
 | 
			
		||||
        this.homeMoves = homeMoves;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -51,8 +50,8 @@ public List<UUID> getPieces() {
 | 
			
		||||
     *
 | 
			
		||||
     * @return a list of integers representing the target nodes
 | 
			
		||||
     */
 | 
			
		||||
    public List<Integer> getMoveIndexe() {
 | 
			
		||||
        return moveIndexe;
 | 
			
		||||
    public List<Integer> getMoveIndices() {
 | 
			
		||||
        return moveIndices;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,7 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification for selecting pieces for swapcard.
 | 
			
		||||
 */
 | 
			
		||||
public class SelectableSwapNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
public class SelectableSwapNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * List of UUIDs representing the player's own pieces available for selection.
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -5,9 +5,11 @@
 | 
			
		||||
/**
 | 
			
		||||
 * This class will be used to hold all ShieldActiveNotification relevant data.
 | 
			
		||||
 */
 | 
			
		||||
public class ShieldActiveNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private UUID pieceId;
 | 
			
		||||
public class ShieldActiveNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The pieceId
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID pieceId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This constructor is used to create a new ShieldActiveNotification
 | 
			
		||||
 
 | 
			
		||||
@@ -6,8 +6,10 @@
 | 
			
		||||
 * This class will be used to hold all ShieldSuppressedNotification relevant data.
 | 
			
		||||
 */
 | 
			
		||||
public class ShieldSuppressedNotification extends Notification {
 | 
			
		||||
 | 
			
		||||
    private UUID pieceId;
 | 
			
		||||
    /**
 | 
			
		||||
     * The pieceId
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID pieceId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This constructor is used to create a new ShieldSuppressedNotification
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,5 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that a dialog has been started
 | 
			
		||||
 */
 | 
			
		||||
public class StartDialogNotification extends Notification{
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     */
 | 
			
		||||
    public StartDialogNotification() {
 | 
			
		||||
    }
 | 
			
		||||
public class StartDialogNotification extends Notification {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,23 +6,31 @@
 | 
			
		||||
 * Notification that two pieces have been swapped.
 | 
			
		||||
 */
 | 
			
		||||
public class SwapPieceNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The UUID of the first piece that has been swapped.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID firstPiece;
 | 
			
		||||
 | 
			
		||||
    private UUID firstPiece;
 | 
			
		||||
    private UUID secondPiece;
 | 
			
		||||
    /**
 | 
			
		||||
     * The UUID of the second piece that has been swapped.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID secondPiece;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     * @param firstPiece the UUID of the first piece that has been swapped.
 | 
			
		||||
     *
 | 
			
		||||
     * @param firstPiece  the UUID of the first piece that has been swapped.
 | 
			
		||||
     * @param secondPiece the UUID of the second piece that has been swapped.
 | 
			
		||||
     */
 | 
			
		||||
    public SwapPieceNotification(UUID firstPiece, UUID secondPiece) {
 | 
			
		||||
        assert(!firstPiece.equals(secondPiece));
 | 
			
		||||
        assert (!firstPiece.equals(secondPiece));
 | 
			
		||||
        this.firstPiece = firstPiece;
 | 
			
		||||
        this.secondPiece = secondPiece;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the UUID of the first piece that has been swapped.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the UUID of the first piece that has been swapped.
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getFirstPiece() {
 | 
			
		||||
@@ -31,6 +39,7 @@ public UUID getFirstPiece() {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the UUID of the second piece that has been swapped.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the UUID of the second piece that has been swapped.
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getSecondPiece() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,15 @@
 | 
			
		||||
package pp.mdga.notification;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
public class ThrowPieceNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private UUID pieceId;
 | 
			
		||||
/**
 | 
			
		||||
 * Notification that is sent when a piece is thrown.
 | 
			
		||||
 */
 | 
			
		||||
public class ThrowPieceNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The id of the piece that was thrown.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID pieceId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This constructor is used to create a new ThrowPieceNotification
 | 
			
		||||
@@ -15,6 +18,11 @@ public ThrowPieceNotification(UUID pieceId) {
 | 
			
		||||
        this.pieceId = pieceId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the id of the piece that was thrown.
 | 
			
		||||
     *
 | 
			
		||||
     * @return The id of the piece that was thrown.
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getPieceId() {
 | 
			
		||||
        return pieceId;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -5,16 +5,27 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Class TskSelectNotification
 | 
			
		||||
 */
 | 
			
		||||
public class TskSelectNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
public class TskSelectNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The name of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    private final String name;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Indicates if the select notification affects the own user.
 | 
			
		||||
     */
 | 
			
		||||
    private final boolean isSelf;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param color the color of the player that is in the game.
 | 
			
		||||
     * @param name the name of the player that is in the game.
 | 
			
		||||
     * @param name  the name of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public TskSelectNotification(Color color, String name, boolean isSelf) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
@@ -24,6 +35,7 @@ public TskSelectNotification(Color color, String name, boolean isSelf) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color of the player that is in the game.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the color of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
@@ -32,6 +44,7 @@ public Color getColor() {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the name of the player that is in the game.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the name of the player that is in the game.
 | 
			
		||||
     */
 | 
			
		||||
    public String getName() {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,20 +2,27 @@
 | 
			
		||||
 | 
			
		||||
import pp.mdga.game.Color;
 | 
			
		||||
 | 
			
		||||
public class TskUnselectNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private Color color;
 | 
			
		||||
/**
 | 
			
		||||
 * Notification for unselecting a player
 | 
			
		||||
 */
 | 
			
		||||
public class TskUnselectNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The color of the player
 | 
			
		||||
     */
 | 
			
		||||
    private final Color color;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     * @param color
 | 
			
		||||
     *
 | 
			
		||||
     * @param color the color of the player
 | 
			
		||||
     */
 | 
			
		||||
    public TskUnselectNotification(Color color){
 | 
			
		||||
    public TskUnselectNotification(Color color) {
 | 
			
		||||
        this.color = color;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the color
 | 
			
		||||
     *
 | 
			
		||||
     * @return color
 | 
			
		||||
     */
 | 
			
		||||
    public Color getColor() {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,15 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Notification to inform the player that he has to wait for the other player to move.
 | 
			
		||||
 */
 | 
			
		||||
public class WaitMoveNotification extends Notification{
 | 
			
		||||
 | 
			
		||||
    private UUID pieceId;
 | 
			
		||||
public class WaitMoveNotification extends Notification {
 | 
			
		||||
    /**
 | 
			
		||||
     * The id of the piece that has to move.
 | 
			
		||||
     */
 | 
			
		||||
    private final UUID pieceId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
     *
 | 
			
		||||
     * @param pieceId the id of the piece that has to move.
 | 
			
		||||
     */
 | 
			
		||||
    public WaitMoveNotification(UUID pieceId) {
 | 
			
		||||
@@ -19,6 +22,7 @@ public WaitMoveNotification(UUID pieceId) {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the id of the piece that has to move.
 | 
			
		||||
     *
 | 
			
		||||
     * @return the id of the piece that has to move.
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getPieceId() {
 | 
			
		||||
 
 | 
			
		||||
@@ -25,10 +25,10 @@ public class ServerGameLogic implements ClientInterpreter  {
 | 
			
		||||
     * States
 | 
			
		||||
     */
 | 
			
		||||
    private ServerState currentState;
 | 
			
		||||
    private final ServerState lobbyState;
 | 
			
		||||
    private final ServerState gameState;
 | 
			
		||||
    private final ServerState interruptState;
 | 
			
		||||
    private final ServerState ceremonyState;
 | 
			
		||||
    private final LobbyState lobbyState;
 | 
			
		||||
    private final GameState gameState;
 | 
			
		||||
    private final InterruptState interruptState;
 | 
			
		||||
    private final CeremonyState ceremonyState;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor.
 | 
			
		||||
@@ -167,36 +167,36 @@ public ServerState getCurrentState() {
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return lobbyState attribute of ServerGameLogic class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return lobbyState as a ServerState object.
 | 
			
		||||
     * @return lobbyState as a LobbyState object.
 | 
			
		||||
     */
 | 
			
		||||
    public ServerState getLobbyState() {
 | 
			
		||||
    public LobbyState getLobbyState() {
 | 
			
		||||
        return this.lobbyState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return gameState attribute of ServerGameLogic class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return gameState as a ServerState object.
 | 
			
		||||
     * @return gameState as a GameState object.
 | 
			
		||||
     */
 | 
			
		||||
    public ServerState getGameState() {
 | 
			
		||||
    public GameState getGameState() {
 | 
			
		||||
        return this.gameState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return interruptState attribute of ServerGameLogic class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return interruptState as a ServerState object.
 | 
			
		||||
     * @return interruptState as a InterruptState object.
 | 
			
		||||
     */
 | 
			
		||||
    public ServerState getInterruptState() {
 | 
			
		||||
    public InterruptState getInterruptState() {
 | 
			
		||||
        return this.interruptState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return ceremonyState attribute of ServerGameLogic class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return ceremonyState as a ServerState object.
 | 
			
		||||
     * @return ceremonyState as a CeremonyState object.
 | 
			
		||||
     */
 | 
			
		||||
    public ServerState getCeremonyState() {
 | 
			
		||||
    public CeremonyState getCeremonyState() {
 | 
			
		||||
        return this.ceremonyState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ public abstract class GameAutomatonState extends ServerState {
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param gameAutomaton as the automaton of the game state as a GameState object.
 | 
			
		||||
     * @param logic the game logic
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public GameAutomatonState(GameState gameAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,23 @@
 | 
			
		||||
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.GameState;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.*;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class represents the turn state of the server state automaton.
 | 
			
		||||
 * It will also be used as the turn automaton.
 | 
			
		||||
 */
 | 
			
		||||
public class TurnState extends GameAutomatonState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create TurnState states.
 | 
			
		||||
     */
 | 
			
		||||
    private TurnAutomatonState currentState;
 | 
			
		||||
    private final PowerCardState powerCardState;
 | 
			
		||||
    private final PlayPowerCardState playPowerCardState;
 | 
			
		||||
    private final RollDiceState rollDiceState;
 | 
			
		||||
    private final ChoosePieceState choosePieceState;
 | 
			
		||||
    private final MovePieceState movePieceState;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
@@ -12,6 +27,11 @@ public class TurnState extends GameAutomatonState {
 | 
			
		||||
     */
 | 
			
		||||
    public TurnState(GameState gameAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(gameAutomaton, logic);
 | 
			
		||||
        this.powerCardState = new PowerCardState(this, logic);
 | 
			
		||||
        this.playPowerCardState = new PlayPowerCardState(this, logic);
 | 
			
		||||
        this.rollDiceState = new RollDiceState(this, logic);
 | 
			
		||||
        this.choosePieceState = new ChoosePieceState(this, logic);
 | 
			
		||||
        this.movePieceState = new MovePieceState(this, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -23,4 +43,72 @@ public void enter() {
 | 
			
		||||
    public void exit() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return currentState attribute of TurnState class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return currentState as a TurnAutomatonState object.
 | 
			
		||||
     */
 | 
			
		||||
    public TurnAutomatonState getCurrentState() {
 | 
			
		||||
        return this.currentState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return powerCardState attribute of TurnState class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return powerCardState as a PowerCardState object.
 | 
			
		||||
     */
 | 
			
		||||
    public PowerCardState getPowerCardState() {
 | 
			
		||||
        return this.powerCardState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return playPowerCardState attribute of TurnState class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return playPowerState as a PlayPowerCardState object.
 | 
			
		||||
     */
 | 
			
		||||
    public PlayPowerCardState getPlayPowerCardState() {
 | 
			
		||||
        return this.playPowerCardState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return rollDiceState attribute of TurnState class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return rollDiceState as a RollDiceState object.
 | 
			
		||||
     */
 | 
			
		||||
    public RollDiceState getRollDiceState() {
 | 
			
		||||
        return this.rollDiceState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return choosePieceState attribute of TurnState class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return choosePieceState as a ChoosePieceState object.
 | 
			
		||||
     */
 | 
			
		||||
    public ChoosePieceState getChoosePieceState() {
 | 
			
		||||
        return this.choosePieceState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to return movePieceState attribute of TurnState class.
 | 
			
		||||
     *
 | 
			
		||||
     * @return movePieceState as a MovePieceState object.
 | 
			
		||||
     */
 | 
			
		||||
    public MovePieceState getMovePieceState() {
 | 
			
		||||
        return this.movePieceState;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This method will be used to set currentState attribute of TurnState class to the given state parameter.
 | 
			
		||||
     * In Addition, the currentState will be exited, changed and entered.
 | 
			
		||||
     *
 | 
			
		||||
     * @param state as the new currentState attribute as a TurnAutomatonState object.
 | 
			
		||||
     */
 | 
			
		||||
    public void setCurrentState(TurnAutomatonState state) {
 | 
			
		||||
        if (this.currentState != null) {
 | 
			
		||||
            this.currentState.exit();
 | 
			
		||||
        }
 | 
			
		||||
        this.currentState = state;
 | 
			
		||||
        this.currentState.enter();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,24 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.TurnState;
 | 
			
		||||
 | 
			
		||||
public class ChoosePieceState extends TurnState {
 | 
			
		||||
    public ChoosePieceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
public class ChoosePieceState extends TurnAutomatonState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param turnAutomaton as the automaton of the turn state as a GameState object.
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public ChoosePieceState(TurnState turnAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(turnAutomaton, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void exit() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,25 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.TurnState;
 | 
			
		||||
 | 
			
		||||
public class MovePieceState extends TurnState {
 | 
			
		||||
    public MovePieceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
public class MovePieceState extends TurnAutomatonState {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param turnAutomaton as the automaton of the turn state as a GameState object.
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public MovePieceState(TurnState turnAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(turnAutomaton, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void exit() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
package pp.mdga.server.automaton.game.turn;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.TurnState;
 | 
			
		||||
 | 
			
		||||
public class PlayPowerCardState extends TurnAutomatonState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param turnAutomaton as the automaton of the turn state as a GameState object.
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public PlayPowerCardState(TurnState turnAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(turnAutomaton, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void exit() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -3,8 +3,24 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.TurnState;
 | 
			
		||||
 | 
			
		||||
public class PowerCardState extends TurnState {
 | 
			
		||||
    public PowerCardState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
public class PowerCardState extends TurnAutomatonState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param turnAutomaton as the automaton of the turn state as a GameState object.
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public PowerCardState(TurnState turnAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(turnAutomaton, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void exit() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,24 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.TurnState;
 | 
			
		||||
 | 
			
		||||
public class RollDiceState extends TurnState {
 | 
			
		||||
    public RollDiceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
public class RollDiceState extends TurnAutomatonState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param turnAutomaton as the automaton of the turn state as a GameState object.
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public RollDiceState(TurnState turnAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(turnAutomaton, logic);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void enter() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void exit() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,23 @@
 | 
			
		||||
package pp.mdga.server.automaton.game.turn;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.ServerState;
 | 
			
		||||
import pp.mdga.server.automaton.game.TurnState;
 | 
			
		||||
 | 
			
		||||
public abstract class TurnAutomatonState extends ServerState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create TurnAutomatonState attributes.
 | 
			
		||||
     */
 | 
			
		||||
    protected final TurnState turnAutomaton;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param turnAutomaton as the automaton of the turn state as a GameState object.
 | 
			
		||||
     * @param logic         the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public TurnAutomatonState(TurnState turnAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
        this.turnAutomaton = turnAutomaton;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,22 @@
 | 
			
		||||
package pp.mdga.server.automaton.game.turn.choosepiece;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.ServerState;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.ChoosePieceState;
 | 
			
		||||
 | 
			
		||||
public abstract class ChoosePieceAutomatonState extends ServerState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create ChoosePieceAutomatonState attributes.
 | 
			
		||||
     */
 | 
			
		||||
    protected final ChoosePieceState choosePieceAutomaton;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param logic the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public ChoosePieceAutomatonState(ChoosePieceState choosePieceAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
        this.choosePieceAutomaton = choosePieceAutomaton;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.ChoosePieceState;
 | 
			
		||||
 | 
			
		||||
public class NoPieceState extends ChoosePieceState {
 | 
			
		||||
    public NoPieceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class NoPieceState {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.ChoosePieceState;
 | 
			
		||||
 | 
			
		||||
public class NoTurnState extends ChoosePieceState {
 | 
			
		||||
    public NoTurnState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class NoTurnState {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,6 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.ChoosePieceState;
 | 
			
		||||
 | 
			
		||||
public class SelectPieceState extends ChoosePieceState {
 | 
			
		||||
    public SelectPieceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class SelectPieceState {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.ChoosePieceState;
 | 
			
		||||
 | 
			
		||||
public class StartPieceState extends ChoosePieceState {
 | 
			
		||||
    public StartPieceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class StartPieceState {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.ChoosePieceState;
 | 
			
		||||
 | 
			
		||||
public class WaitingPieceState extends ChoosePieceState {
 | 
			
		||||
    public WaitingPieceState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class WaitingPieceState {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.RollDiceState;
 | 
			
		||||
 | 
			
		||||
public class FirstRollStateState extends RollDiceState {
 | 
			
		||||
    public FirstRollStateState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class FirstRollStateState  {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,22 @@
 | 
			
		||||
package pp.mdga.server.automaton.game.turn.rolldice;
 | 
			
		||||
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.ServerState;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.RollDiceState;
 | 
			
		||||
 | 
			
		||||
public abstract class RollDiceAutomatonState extends ServerState {
 | 
			
		||||
    /**
 | 
			
		||||
     * Create RollDiceAutomatonState attributes.
 | 
			
		||||
     */
 | 
			
		||||
    protected final RollDiceState rollDiceAutomaton;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructs a server state of the specified game logic.
 | 
			
		||||
     *
 | 
			
		||||
     * @param logic the game logic
 | 
			
		||||
     */
 | 
			
		||||
    public RollDiceAutomatonState(RollDiceState rollDiceAutomaton, ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
        this.rollDiceAutomaton = rollDiceAutomaton;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.RollDiceState;
 | 
			
		||||
 | 
			
		||||
public class SecondRollState extends RollDiceState {
 | 
			
		||||
    public SecondRollState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class SecondRollState {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,5 @@
 | 
			
		||||
import pp.mdga.server.ServerGameLogic;
 | 
			
		||||
import pp.mdga.server.automaton.game.turn.RollDiceState;
 | 
			
		||||
 | 
			
		||||
public class ThirdRollState extends RollDiceState {
 | 
			
		||||
    public ThirdRollState(ServerGameLogic logic) {
 | 
			
		||||
        super(logic);
 | 
			
		||||
    }
 | 
			
		||||
public class ThirdRollState {
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user