From 76e2606847e1e79fd7bd2b186fe0b0e030387dfd Mon Sep 17 00:00:00 2001 From: Fleischer Hanno Date: Sun, 1 Dec 2024 22:47:13 +0100 Subject: [PATCH] reverted the client state machine --- .../java/pp/mdga/client/view/MainView.java | 8 +- .../java/pp/mdga/client/CeremonyState.java | 7 +- .../java/pp/mdga/client/DialogsState.java | 8 +- .../main/java/pp/mdga/client/GameState.java | 2 +- .../java/pp/mdga/client/SettingsState.java | 8 +- .../client/ceremonyState/CeremonyStates.java | 10 ++ .../client/ceremonyState/PodiumState.java | 30 ++++ .../client/ceremonyState/StatisticsState.java | 25 +++ .../mdga/client/dialogState/DialogStates.java | 11 ++ .../mdga/client/dialogState/LobbyState.java | 102 ++++++++++++ .../dialogState/NetworkDialogState.java | 62 +++++++ .../client/dialogState/StartDialogState.java | 50 ++++++ .../mdga/client/gameState/AnimationState.java | 32 ++++ .../gameState/DetermineStartPlayerState.java | 77 +++++++++ .../pp/mdga/client/gameState/GameStates.java | 51 ++++++ .../mdga/client/gameState/SpectatorState.java | 84 ++++++++++ .../pp/mdga/client/gameState/TurnState.java | 155 ++++++++++++++++++ .../mdga/client/gameState/WaitingState.java | 97 +++++++++++ .../DetermineStartPlayerStates.java | 12 ++ .../RollRankingDiceState.java | 38 +++++ .../WaitRankingState.java | 40 +++++ .../gameState/turnState/ChoosePieceState.java | 95 +++++++++++ .../gameState/turnState/MovePieceState.java | 56 +++++++ .../turnState/PlayPowerCardState.java | 41 +++++ .../gameState/turnState/PowerCardState.java | 97 +++++++++++ .../gameState/turnState/RollDiceState.java | 41 +++++ .../gameState/turnState/TurnStates.java | 11 ++ .../choosePieceState/ChoosePieceStates.java | 11 ++ .../choosePieceState/NoPieceState.java | 68 ++++++++ .../choosePieceState/SelectPieceState.java | 62 +++++++ .../choosePieceState/StartPieceState.java | 42 +++++ .../choosePieceState/WaitingPieceState.java | 43 +++++ .../powerCardState/ChoosePowerCardState.java | 113 +++++++++++++ .../powerCardState/PowerCardStates.java | 11 ++ .../turnState/powerCardState/ShieldState.java | 54 ++++++ .../turnState/powerCardState/SwapState.java | 68 ++++++++ .../settingsState/AudioSettingsState.java | 20 +++ .../settingsState/MainSettingsState.java | 20 +++ .../client/settingsState/SettingStates.java | 10 ++ .../settingsState/VideoSettingsState.java | 20 +++ .../pp/mdga/server/automaton/LobbyState.java | 2 +- 41 files changed, 1779 insertions(+), 15 deletions(-) create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/PodiumState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/StatisticsState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialogState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialogState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/AnimationState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayerState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/SpectatorState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/TurnState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/WaitingState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDiceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRankingState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePieceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCardState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDiceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPieceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPieceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPieceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPieceState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCardState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ShieldState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/SwapState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettingsState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettingsState.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java create mode 100644 Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettingsState.java diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/view/MainView.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/view/MainView.java index b7c77dc2..6aefa85f 100644 --- a/Projekte/mdga/client/src/main/java/pp/mdga/client/view/MainView.java +++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/view/MainView.java @@ -139,10 +139,14 @@ private void tryJoin() { joinDialog.setPortNumber(port); // Validate the IP address if (isValidIpAddress(ip)) { - joinDialog.setHostname(ip); app.getModelSynchronize().setName(startDialog.getName()); - app.getModelSynchronize().setJoin(ip, port); + joinDialog.setHostname(ip); joinDialog.connectToServer(); + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + } + app.getModelSynchronize().setJoin(ip, port); return; } } catch (IllegalArgumentException e) { diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyState.java index 62e8dee8..38541512 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyState.java @@ -1,8 +1,9 @@ package pp.mdga.client; -import pp.mdga.client.ceremonystate.CeremonyStates; -import pp.mdga.client.ceremonystate.PodiumState; -import pp.mdga.client.ceremonystate.StatisticsState; +import pp.mdga.client.ceremonyState.CeremonyStates; +import pp.mdga.client.ceremonyState.PodiumState; +import pp.mdga.client.ceremonyState.StatisticsState; +import pp.mdga.notification.CeremonyNotification; public class CeremonyState extends ClientState { diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsState.java index 1f85a05a..b72c1294 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsState.java @@ -1,9 +1,9 @@ package pp.mdga.client; -import pp.mdga.client.dialogstate.DialogStates; -import pp.mdga.client.dialogstate.LobbyState; -import pp.mdga.client.dialogstate.NetworkDialogState; -import pp.mdga.client.dialogstate.StartDialogState; +import pp.mdga.client.dialogState.DialogStates; +import pp.mdga.client.dialogState.LobbyState; +import pp.mdga.client.dialogState.NetworkDialogState; +import pp.mdga.client.dialogState.StartDialogState; import pp.mdga.game.Color; import pp.mdga.message.server.*; diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java index 8fa95337..7f04f8a8 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java @@ -1,6 +1,6 @@ package pp.mdga.client; -import pp.mdga.client.gamestate.*; +import pp.mdga.client.gameState.*; import pp.mdga.game.BonusCard; import pp.mdga.game.Piece; import pp.mdga.message.server.*; diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsState.java index 1536ed5c..5c399750 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsState.java @@ -1,9 +1,9 @@ package pp.mdga.client; -import pp.mdga.client.settingsstate.AudioSettingsState; -import pp.mdga.client.settingsstate.MainSettingsState; -import pp.mdga.client.settingsstate.SettingStates; -import pp.mdga.client.settingsstate.VideoSettingsState; +import pp.mdga.client.settingsState.AudioSettingsState; +import pp.mdga.client.settingsState.MainSettingsState; +import pp.mdga.client.settingsState.SettingStates; +import pp.mdga.client.settingsState.VideoSettingsState; public class SettingsState extends ClientState { diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java new file mode 100644 index 00000000..8bd888c7 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java @@ -0,0 +1,10 @@ +package pp.mdga.client.ceremonyState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public abstract class CeremonyStates extends ClientState { + protected CeremonyStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/PodiumState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/PodiumState.java new file mode 100644 index 00000000..4410d8c0 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/PodiumState.java @@ -0,0 +1,30 @@ +package pp.mdga.client.ceremonyState; + +import pp.mdga.client.CeremonyState; +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public class PodiumState extends CeremonyStates { + + private final CeremonyState parent; + + public PodiumState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (CeremonyState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void selectNext(){ + parent.setState(parent.getStatisticsState()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/StatisticsState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/StatisticsState.java new file mode 100644 index 00000000..89c5e8a1 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/StatisticsState.java @@ -0,0 +1,25 @@ +package pp.mdga.client.ceremonyState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public class StatisticsState extends CeremonyStates { + public StatisticsState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void selectNext(){ + logic.setState(logic.getDialogs()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java new file mode 100644 index 00000000..f4c549d2 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java @@ -0,0 +1,11 @@ +package pp.mdga.client.dialogState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public abstract class DialogStates extends ClientState { + + public DialogStates(ClientState parent, ClientGameLogic logic){ + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java new file mode 100644 index 00000000..9064fee0 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/LobbyState.java @@ -0,0 +1,102 @@ +package pp.mdga.client.dialogState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.DialogsState; +import pp.mdga.game.Color; +import pp.mdga.game.Player; +import pp.mdga.message.client.*; +import pp.mdga.message.server.LobbyPlayerJoinedMessage; +import pp.mdga.message.server.LobbyPlayerLeaveMessage; +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; + +public class LobbyState extends DialogStates { + + private final DialogsState parent; + + public LobbyState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (DialogsState) parent; + } + + @Override + public void enter() { + logic.send(new JoinedLobbyMessage(parent.getOwnPlayerName())); + } + + @Override + public void exit() { + } + + @Override + public void selectLeave() { + parent.setState(parent.getStartDialog()); + logic.send(new LeaveGameMessage()); + } + + @Override + public void selectTSK(Color color) { + logic.send(new SelectTSKMessage(color)); + } + + @Override + public void deselectTSK(Color color) { + logic.send(new DeselectTSKMessage(color)); + } + + @Override + public void selectReady() { + logic.send(new LobbyReadyMessage()); + } + + @Override + public void selectUnready(){ + logic.send(new LobbyNotReadyMessage()); + } + + @Override + public void selectStart(){ + if(logic.isHost() && logic.getGame().allReady()){ + logic.send(new StartGameMessage(false)); + } else if(logic.isHost() && !logic.getGame().allReady()) { + logic.send(new StartGameMessage(true)); + } else { + LOGGER.log(System.Logger.Level.ERROR, "You are not the host"); + } + } + + @Override + public void received(ServerStartGameMessage msg){ + parent.startGame(); + } + + @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()); + } + + @Override + public void received(UpdateTSKMessage msg){ + logic.addNotification(new TskUnselectNotification(logic.getGame().getPlayers().get(msg.getId()).getColor())); + logic.getGame().getPlayers().get(msg.getId()).setColor(msg.getColor()); + logic.addNotification(new TskSelectNotification(msg.getColor(), logic.getGame().getPlayers().get(msg.getId()).getName(), parent.getOwnPlayerId()== msg.getId())); + } + + @Override + public void received(LobbyPlayerLeaveMessage msg){ + logic.addNotification(new TskUnselectNotification(logic.getGame().getPlayers().get(msg.getId()).getColor())); + logic.getGame().getPlayers().remove(msg.getId()); + } + + @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()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialogState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialogState.java new file mode 100644 index 00000000..09212dee --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialogState.java @@ -0,0 +1,62 @@ +package pp.mdga.client.dialogState; + +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 { + + private final DialogsState parent; + + public NetworkDialogState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (DialogsState) parent; + } + + private boolean checkIP(String IP){ + String[] parts = IP.split("\\."); + + // Step 2: Check if there are exactly 4 parts + if (parts.length != 4) { + return false; + } + + // Step 3: Check each part for valid number + for (String part : parts) { + try { + // Step 4: Convert each part into a number + int num = Integer.parseInt(part); + + // Step 5: Check whether the number lies in between 0 and 255 + if (num < 0 || num > 255) { + return false; + } + } catch (NumberFormatException e) { + // If parsing fails, it's not a valid number + return false; + } + } + + // If all checks passed, return true + return true; + } + + @Override + public void enter() { + } + + @Override + public void exit() { + } + + @Override + public void selectLeave() { + parent.setState(parent.getStartDialog()); + } + + public void selectJoin(String IP) { + parent.setState(parent.getLobby()); + logic.addNotification(new LobbyDialogNotification()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialogState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialogState.java new file mode 100644 index 00000000..47b9944a --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialogState.java @@ -0,0 +1,50 @@ +package pp.mdga.client.dialogState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.DialogsState; + +public class StartDialogState extends DialogStates { + + private final DialogsState parent; + + public StartDialogState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (DialogsState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void selectJoin(String name) { + parent.setOwnPlayerName(name); + parent.setState(parent.getNetworkDialog()); + logic.setHost(false); + } + + @Override + public void selectHost(String name) { + parent.setOwnPlayerName(name); + parent.setState(parent.getLobby()); + logic.setHost(true); + } + + @Override + public void setName(String name) { + parent.setState(parent.getNetworkDialog()); + parent.setOwnPlayerName(name); + } + + @Override + public void selectLeave() { + parent.exit(); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/AnimationState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/AnimationState.java new file mode 100644 index 00000000..a7aaf745 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/AnimationState.java @@ -0,0 +1,32 @@ +package pp.mdga.client.gameState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.GameState; +import pp.mdga.message.client.AnimationEndMessage; + +public class AnimationState extends GameStates { + + private final GameState parent; + + public AnimationState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (GameState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void selectAnimationEnd(){ + logic.send(new AnimationEndMessage()); + parent.setState(parent.getWaiting()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayerState.java new file mode 100644 index 00000000..cf3c48c2 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayerState.java @@ -0,0 +1,77 @@ +package pp.mdga.client.gameState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.GameState; +import pp.mdga.client.gameState.determineStartPlayerState.DetermineStartPlayerStates; +import pp.mdga.client.gameState.determineStartPlayerState.RollRankingDiceState; +import pp.mdga.client.gameState.determineStartPlayerState.WaitRankingState; +import pp.mdga.message.server.DieMessage; +import pp.mdga.message.server.RankingResponseMessage; +import pp.mdga.message.server.RankingRollAgainMessage; + +public class DetermineStartPlayerState extends GameStates { + + private final GameState parent; + private DetermineStartPlayerStates state; + + private final RollRankingDiceState rollRankingDiceState = new RollRankingDiceState(this, logic); + private final WaitRankingState waitRankingState = new WaitRankingState(this, logic); + + public DetermineStartPlayerState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (GameState) parent; + } + + @Override + public void enter() { + state = rollRankingDiceState; + } + + @Override + public void exit() { + state = null; + } + + public void setState(DetermineStartPlayerStates state) { + this.state.exit(); + state.enter(); + this.state = state; + } + + @Override + public void selectDice() { + state.selectDice(); + } + + @Override + public void received(DieMessage msg){ + state.received(msg); + } + + @Override + public void received(RankingRollAgainMessage msg){ + state.received(msg); + } + + @Override + public void received(RankingResponseMessage msg){ + state.received(msg); + } + + public RollRankingDiceState getRollRankingDice() { + return rollRankingDiceState; + } + + public WaitRankingState getWaitRanking() { + return waitRankingState; + } + + public DetermineStartPlayerStates getState(){ + return state; + } + + public GameState getParent() { + return parent; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java new file mode 100644 index 00000000..b7b80ddc --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java @@ -0,0 +1,51 @@ +package pp.mdga.client.gameState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.game.BonusCard; +import pp.mdga.game.Piece; +import pp.mdga.game.PieceState; +import pp.mdga.game.ShieldState; +import pp.mdga.message.server.PlayCardMessage; +import pp.mdga.notification.ShieldActiveNotification; +import pp.mdga.notification.ShieldSuppressedNotification; +import pp.mdga.notification.SwapPieceNotification; +import pp.mdga.notification.ThrowPieceNotification; + +public abstract class GameStates extends ClientState { + public GameStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } + + protected void handlePowerCard(PlayCardMessage msg){ + if (msg.getCard().equals(BonusCard.TURBO)){ + logic.getGame().setDiceModifier(msg.getDiceModifier()); + } else if (msg.getCard().equals(BonusCard.SHIELD)){ + if (logic.getGame().getBoard().getInfieldIndexOfPiece(logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier())) % 10 != 0) { + logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()).setShield(ShieldState.SUPPRESSED); + logic.addNotification(new ShieldSuppressedNotification(logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()).getUuid())); + } else { + logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()).setShield(ShieldState.ACTIVE); + logic.addNotification(new ShieldActiveNotification(logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()).getUuid())); + } + } else { + Piece ownPiece = logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()); + Piece enemyPiece = logic.getGame().getPieceThroughUUID(msg.getPieceIdentifierEnemy()); + int ownIndex = logic.getGame().getBoard().getInfieldIndexOfPiece(ownPiece); + logic.addNotification(new SwapPieceNotification(ownPiece.getUuid(), enemyPiece.getUuid())); + logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(enemyPiece)].setOccupant(ownPiece); + logic.getGame().getBoard().getInfield()[ownIndex].setOccupant(enemyPiece); + } + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).removeHandCard(msg.getCard()); + logic.getGame().getDiscardPile().add(msg.getCard()); + } + + protected void throwPiece(Piece piece){ + logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(piece)].clearOccupant(); + logic.getGame().getBoard().getPlayerData().get(piece.getColor()).addWaitingPiece(piece); + logic.addNotification(new ThrowPieceNotification(piece.getUuid())); + logic.getGame().getPlayerByColor(piece.getColor()).getPlayerStatistic().increasePiecesBeingThrown(); + logic.getGame().getGameStatistics().increasePiecesBeingThrown(); + piece.setState(PieceState.WAITING); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/SpectatorState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/SpectatorState.java new file mode 100644 index 00000000..9a0cbd7d --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/SpectatorState.java @@ -0,0 +1,84 @@ +package pp.mdga.client.gameState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.GameState; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; +import pp.mdga.notification.*; + +public class SpectatorState extends GameStates { + + private final GameState parent; + + public SpectatorState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (GameState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void received(CeremonyMessage msg){ + logic.setState(logic.getCeremony()); + } + + @Override + public void received(DieMessage msg){ + logic.getGame().setDiceEyes(msg.getDiceEye()); +// logic.addNotification(new RollDiceNotification(logic.getGame().getActiveColor(), logic.getGame().getDiceEyes(), logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier())); + if(msg.getDiceEye() == 6){ + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseDiced6(); + logic.getGame().getGameStatistics().increaseDiced6(); + } + parent.setState(parent.getAnimation()); + } + + @Override + public void received(PlayCardMessage msg){ + logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor(), msg.getCard())); + handlePowerCard(msg); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseCardsPlayed(); + logic.getGame().getGameStatistics().increaseCardsPlayed(); + parent.setState(parent.getAnimation()); + } + + @Override + public void received(ActivePlayerMessage msg){ + logic.addNotification(new ActivePlayerNotification(msg.getColor())); + logic.getGame().setActiveColor(msg.getColor()); + parent.setState(parent.getAnimation()); + } + + @Override + public void received(MoveMessage msg){ + Piece pieceToMove = logic.getGame().getPieceThroughUUID(msg.getIdentifier()); + if (msg.isHomeMove()){ + logic.addNotification(new HomeMoveNotification(pieceToMove.getUuid(), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove)].clearOccupant(); + logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).setPieceInHome(msg.getTargetIndex(), pieceToMove); + } else { + if (logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].isOccupied()) { + throwPiece(logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].getOccupant()); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increasePiecesThrown(); + logic.getGame().getGameStatistics().increasePiecesThrown(); + } + if(logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).getStartNodeIndex() == logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove)){ + logic.addNotification(new MovePieceNotification(pieceToMove.getUuid(), msg.getTargetIndex(), true)); + logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].setOccupant(pieceToMove); + } else { + logic.addNotification(new MovePieceNotification(pieceToMove.getUuid(), logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].setOccupant(pieceToMove); + } + } + parent.setState(parent.getAnimation()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/TurnState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/TurnState.java new file mode 100644 index 00000000..b59a35b8 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/TurnState.java @@ -0,0 +1,155 @@ +package pp.mdga.client.gameState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.GameState; +import pp.mdga.client.gameState.turnState.ChoosePieceState; +import pp.mdga.client.gameState.turnState.MovePieceState; +import pp.mdga.client.gameState.turnState.PlayPowerCardState; +import pp.mdga.client.gameState.turnState.PowerCardState; +import pp.mdga.client.gameState.turnState.RollDiceState; +import pp.mdga.client.gameState.turnState.TurnStates; +import pp.mdga.game.BonusCard; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; + +public class TurnState extends GameStates { + + private GameState parent; + private TurnStates state; + + private final ChoosePieceState choosePieceState = new ChoosePieceState(this, logic); + private final MovePieceState movePieceState = new MovePieceState(this, logic); + private final PlayPowerCardState playPowerCardState = new PlayPowerCardState(this, logic); + private final PowerCardState powerCardState = new PowerCardState(this, logic); + private final RollDiceState rollDiceState = new RollDiceState(this, logic); + + public TurnState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (GameState) parent; + } + + @Override + public void enter() { + state = powerCardState; + } + + @Override + public void exit() { + state = null; + } + + public void setState(TurnStates state){ + this.state.exit(); + state.enter(); + this.state = state; + } + + @Override + public void selectPiece(Piece piece){ + state.selectPiece(piece); + } + + @Override + public void selectCard(BonusCard card){ + state.selectCard(card); + } + + @Override + public void selectAnimationEnd(){ + state.selectAnimationEnd(); + } + + @Override + public void received(SelectPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(WaitPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(StartPieceMessage msg){ + state.received(msg); + } + + @Override + public void received(NoTurnMessage msg){ + state.received(msg); + } + + @Override + public void received(MoveMessage msg){ + state.received(msg); + } + + @Override + public void received(CeremonyMessage msg){ + state.received(msg); + } + + @Override + public void received(EndOfTurnMessage msg){ + state.received(msg); + } + + @Override + public void received(SpectatorMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceAgainMessage msg){ + state.received(msg); + } + + @Override + public void received(PossibleCardMessage msg){ + state.received(msg); + } + + @Override + public void received(PlayCardMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceNowMessage msg){ + state.received(msg); + } + + @Override + public void received(DieMessage msg){ + state.received(msg); + } + + public ChoosePieceState getChoosePiece() { + return choosePieceState; + } + + public MovePieceState getMovePiece() { + return movePieceState; + } + + public PlayPowerCardState getPlayPowerCard() { + return playPowerCardState; + } + + public PowerCardState getPowerCard() { + return powerCardState; + } + + public RollDiceState getRollDice() { + return rollDiceState; + } + + public GameState getParent(){ + return parent; + } + + public TurnStates getState(){ + return state; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/WaitingState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/WaitingState.java new file mode 100644 index 00000000..0a2f72b0 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/WaitingState.java @@ -0,0 +1,97 @@ +package pp.mdga.client.gameState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.GameState; +import pp.mdga.game.*; +import pp.mdga.message.server.*; +import pp.mdga.notification.*; + +public class WaitingState extends GameStates { + + private final GameState parent; + + public WaitingState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (GameState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void received(CeremonyMessage msg){ + logic.setState(logic.getCeremony()); + } + + @Override + public void received(DiceNowMessage msg){ + logic.addNotification(new DiceNowNotification()); + parent.setState(parent.getTurn()); + } + + @Override + public void received(DieMessage msg){ + logic.getGame().setDiceEyes(msg.getDiceEye()); +// logic.addNotification(new RollDiceNotification(logic.getGame().getActiveColor(), logic.getGame().getDiceEyes(), logic.getGame().getDiceEyes() * logic.getGame().getDiceModifier())); + if(msg.getDiceEye() == 6){ + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseDiced6(); + logic.getGame().getGameStatistics().increaseDiced6(); + } + parent.setState(parent.getAnimation()); + } + + @Override + public void received(PlayCardMessage msg){ + logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor(), msg.getCard())); + handlePowerCard(msg); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increaseCardsPlayed(); + logic.getGame().getGameStatistics().increaseCardsPlayed(); + parent.setState(parent.getAnimation()); + } + + @Override + public void received(ActivePlayerMessage msg){ + logic.addNotification(new ActivePlayerNotification(msg.getColor())); + logic.getGame().setActiveColor(msg.getColor()); + parent.setState(parent.getAnimation()); + } + + @Override + public void received(MoveMessage msg){ + Piece pieceToMove = logic.getGame().getPieceThroughUUID(msg.getIdentifier()); + if (msg.isHomeMove()){ + logic.addNotification(new HomeMoveNotification(pieceToMove.getUuid(), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove)].clearOccupant(); + logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).setPieceInHome(msg.getTargetIndex(), pieceToMove); + for(int i = msg.getTargetIndex() + 1; i < 4; i++){ + if(!logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).getHomeNodes()[i].isOccupied()){ + pieceToMove.setState(PieceState.HOME); + break; + } + pieceToMove.setState(PieceState.HOMEFINISHED); + } + } else { + if (logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].isOccupied()) { + throwPiece(logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].getOccupant()); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increasePiecesThrown(); + logic.getGame().getGameStatistics().increasePiecesThrown(); + } + if(logic.getGame().getBoard().getPlayerData().get(pieceToMove.getColor()).getStartNodeIndex() == logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove)){ + logic.addNotification(new MovePieceNotification(pieceToMove.getUuid(), msg.getTargetIndex(), true)); + logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].setOccupant(pieceToMove); + } else { + logic.addNotification(new MovePieceNotification(pieceToMove.getUuid(), logic.getGame().getBoard().getInfieldIndexOfPiece(pieceToMove), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].setOccupant(pieceToMove); + } + } + parent.setState(parent.getAnimation()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java new file mode 100644 index 00000000..6be7ece5 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java @@ -0,0 +1,12 @@ +package pp.mdga.client.gameState.determineStartPlayerState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.GameStates; + +public abstract class DetermineStartPlayerStates extends GameStates { + public DetermineStartPlayerStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } + +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDiceState.java new file mode 100644 index 00000000..3c1ec5b9 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDiceState.java @@ -0,0 +1,38 @@ +package pp.mdga.client.gameState.determineStartPlayerState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.DetermineStartPlayerState; +import pp.mdga.message.client.RequestDieMessage; +import pp.mdga.message.server.DieMessage; +import pp.mdga.notification.DiceNowNotification; + +public class RollRankingDiceState extends DetermineStartPlayerStates { + + private final DetermineStartPlayerState parent; + + public RollRankingDiceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (DetermineStartPlayerState) parent; + } + + @Override + public void enter() { + logic.addNotification(new DiceNowNotification()); + } + + @Override + public void exit() { + + } + + @Override + public void selectDice(){ + logic.send(new RequestDieMessage()); + } + + @Override + public void received(DieMessage msg){ + parent.setState(parent.getWaitRanking()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRankingState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRankingState.java new file mode 100644 index 00000000..6e2a96b3 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRankingState.java @@ -0,0 +1,40 @@ +package pp.mdga.client.gameState.determineStartPlayerState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.DetermineStartPlayerState; +import pp.mdga.message.server.RankingResponseMessage; +import pp.mdga.message.server.RankingRollAgainMessage; +import pp.mdga.notification.ActivePlayerNotification; + +public class WaitRankingState extends DetermineStartPlayerStates { + + private final DetermineStartPlayerState parent; + + public WaitRankingState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (DetermineStartPlayerState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void received(RankingRollAgainMessage msg){ + parent.setState(parent.getRollRankingDice()); + } + + @Override + public void received(RankingResponseMessage msg){ + logic.addNotification(new ActivePlayerNotification(logic.getGame().getPlayers().get(msg.getStartingPlayerId()).getColor())); + logic.getGame().setActiveColor(logic.getGame().getPlayers().get(msg.getStartingPlayerId()).getColor()); + parent.getParent().setState(parent.getParent().getWaiting()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java new file mode 100644 index 00000000..b1a0c7e3 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePieceState.java @@ -0,0 +1,95 @@ +package pp.mdga.client.gameState.turnState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.TurnState; +import pp.mdga.client.gameState.turnState.choosePieceState.*; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; + +public class ChoosePieceState extends TurnStates { + + private TurnState parent; + private ChoosePieceStates currentState; + + private final NoPieceState noPieceState = new NoPieceState(this, logic); + private final SelectPieceState selectPieceState = new SelectPieceState(this, logic); + private final StartPieceState startPieceState = new StartPieceState(this, logic); + private final WaitingPieceState waitingPieceState = new WaitingPieceState(this, logic); + + public ChoosePieceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (TurnState) parent; + } + + @Override + public void enter() { + currentState = noPieceState; + } + + @Override + public void exit() { + currentState.exit(); + currentState= null; + } + + public void setState(ChoosePieceStates state){ + currentState.exit(); + currentState = state; + currentState.enter(); + } + + @Override + public void selectPiece(Piece piece){ + currentState.selectPiece(piece); + } + + @Override + public void received(SelectPieceMessage msg){ + currentState.received(msg); + } + + @Override + public void received(WaitPieceMessage msg){ + currentState.received(msg); + } + + @Override + public void received(StartPieceMessage msg){ + currentState.received(msg); + } + + @Override + public void received(NoTurnMessage msg){ + currentState.received(msg); + } + + @Override + public void received(MoveMessage msg){ + currentState.received(msg); + } + + public NoPieceState getNoPiece(){ + return noPieceState; + } + + public SelectPieceState getSelectPiece(){ + return selectPieceState; + } + + public StartPieceState getStartPiece(){ + return startPieceState; + } + + public WaitingPieceState getWaitingPiece(){ + return waitingPieceState; + } + + public ChoosePieceStates getState(){ + return currentState; + } + + public TurnState getParent(){ + return parent; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePieceState.java new file mode 100644 index 00000000..a04d7e56 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePieceState.java @@ -0,0 +1,56 @@ +package pp.mdga.client.gameState.turnState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.TurnState; +import pp.mdga.message.client.AnimationEndMessage; +import pp.mdga.message.server.*; + +public class MovePieceState extends TurnStates { + + private final TurnState parent; + + public MovePieceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (TurnState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void selectAnimationEnd(){ + logic.send(new AnimationEndMessage()); + } + + @Override + public void received(CeremonyMessage msg){ + logic.setState(logic.getCeremony()); + } + + @Override + public void received(EndOfTurnMessage msg){ + parent.getParent().setState(parent.getParent().getWaiting()); + } + + @Override + public void received(SpectatorMessage msg){ + parent.getParent().setState(parent.getParent().getSpectator()); + } + + @Override + public void received(DiceAgainMessage msg){ + parent.setState(parent.getRollDice()); + } + + public TurnState getParent() { + return parent; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCardState.java new file mode 100644 index 00000000..b3f66cbd --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCardState.java @@ -0,0 +1,41 @@ +package pp.mdga.client.gameState.turnState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.TurnState; +import pp.mdga.message.client.AnimationEndMessage; +import pp.mdga.message.server.PlayCardMessage; +import pp.mdga.notification.PlayCardNotification; + +public class PlayPowerCardState extends TurnStates { + + private final TurnState parent; + + private PlayCardMessage playCardMessage; + + public PlayPowerCardState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (TurnState) parent; + } + + @Override + public void enter() { + logic.addNotification(new PlayCardNotification(logic.getGame().getActiveColor() , playCardMessage.getCard())); + handlePowerCard(playCardMessage); + } + + @Override + public void exit() { + playCardMessage = null; + } + + public void setPlayCard(PlayCardMessage playCardMessage) { + this.playCardMessage = playCardMessage; + } + + @Override + public void selectAnimationEnd(){ + parent.setState(parent.getRollDice()); + logic.send(new AnimationEndMessage()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java new file mode 100644 index 00000000..fd80b68d --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCardState.java @@ -0,0 +1,97 @@ +package pp.mdga.client.gameState.turnState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.TurnState; +import pp.mdga.client.gameState.turnState.powerCardState.ChoosePowerCardState; +import pp.mdga.client.gameState.turnState.powerCardState.PowerCardStates; +import pp.mdga.client.gameState.turnState.powerCardState.ShieldState; +import pp.mdga.client.gameState.turnState.powerCardState.SwapState; +import pp.mdga.game.BonusCard; +import pp.mdga.game.Piece; +import pp.mdga.message.server.DiceNowMessage; +import pp.mdga.message.server.PlayCardMessage; +import pp.mdga.message.server.PossibleCardMessage; +import pp.mdga.message.server.PossiblePieceMessage; + +public class PowerCardState extends TurnStates { + + private final TurnState parent; + private PowerCardStates state; + + private final ChoosePowerCardState choosePowerCardState = new ChoosePowerCardState(this, logic); + private final ShieldState shieldState = new ShieldState(this, logic); + private final SwapState swapState = new SwapState(this, logic); + + + public PowerCardState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (TurnState) parent; + } + + @Override + public void enter() { + state = choosePowerCardState; + } + + public void exit() { + state.exit(); + state = null; + } + + public void setState(PowerCardStates state) { + this.state.exit(); + state.enter(); + this.state = state; + } + + @Override + public void received(PossibleCardMessage msg){ + state.received(msg); + } + + @Override + public void received(PlayCardMessage msg){ + state.received(msg); + } + + @Override + public void received(DiceNowMessage msg){ + state.received(msg); + } + + @Override + public void received(PossiblePieceMessage msg){ + state.received(msg); + } + + @Override + public void selectCard(BonusCard card) { + state.selectCard(card); + } + + @Override + public void selectPiece(Piece piece) { + state.selectPiece(piece); + } + + public ChoosePowerCardState getChoosePowerCard() { + return choosePowerCardState; + } + + public ShieldState getShield() { + return shieldState; + } + + public SwapState getSwap() { + return swapState; + } + + public TurnState getParent() { + return parent; + } + + public PowerCardStates getState() { + return state; + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDiceState.java new file mode 100644 index 00000000..dbdecae3 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDiceState.java @@ -0,0 +1,41 @@ +package pp.mdga.client.gameState.turnState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.TurnState; +import pp.mdga.message.server.DieMessage; +import pp.mdga.message.server.NoTurnMessage; + +public class RollDiceState extends TurnStates { + + private final TurnState parent; + + public RollDiceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (TurnState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + logic.getGame().setDiceModifier(1); + } + + public TurnState getParent() { + return parent; + } + + public void received(DieMessage msg){ + logic.getGame().setDiceEyes(msg.getDiceEye()); + parent.setState(parent.getChoosePiece()); + } + + @Override + public void received(NoTurnMessage msg){ + parent.getParent().setState(parent.getParent().getWaiting()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java new file mode 100644 index 00000000..6ca2cd4d --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java @@ -0,0 +1,11 @@ +package pp.mdga.client.gameState.turnState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.GameStates; + +public abstract class TurnStates extends GameStates { + public TurnStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java new file mode 100644 index 00000000..231b2d37 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java @@ -0,0 +1,11 @@ +package pp.mdga.client.gameState.turnState.choosePieceState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.TurnStates; + +public abstract class ChoosePieceStates extends TurnStates { + public ChoosePieceStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPieceState.java new file mode 100644 index 00000000..60b41e44 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPieceState.java @@ -0,0 +1,68 @@ +package pp.mdga.client.gameState.turnState.choosePieceState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.ChoosePieceState; +import pp.mdga.game.Piece; +import pp.mdga.message.server.*; +import pp.mdga.message.server.StartPieceMessage; +import pp.mdga.notification.MovePieceNotification; +import pp.mdga.notification.SelectableMoveNotification; +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 { + + private final ChoosePieceState parent; + + public NoPieceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (ChoosePieceState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void received(SelectPieceMessage msg) { + parent.setState(parent.getSelectPiece()); + ArrayList pieces = msg.getPieces().stream().map(piece -> logic.getGame().getPieceThroughUUID(piece)).collect(Collectors.toCollection(ArrayList::new)); + parent.getSelectPiece().setPossiblePieces(pieces); + logic.addNotification(new SelectableMoveNotification(pieces.stream().map(Piece::getUuid).collect(Collectors.toCollection(ArrayList::new)), msg.getTargetIndex(), msg.getIsHomeMove())); + } + + @Override + public void received(WaitPieceMessage msg){ + logic.addNotification(new WaitMoveNotification(msg.getPieceID())); + parent.setState(parent.getWaitingPiece()); + } + + @Override + public void received(StartPieceMessage msg){ + Piece piece = logic.getGame().getPieceThroughUUID(msg.getPieceIdentifier()); + List listPiece = new ArrayList<>(); + List listIndex = new ArrayList<>(); + List 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()); + } + + @Override + public void received(NoTurnMessage msg){ + parent.getParent().getParent().setState(parent.getParent().getParent().getWaiting()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPieceState.java new file mode 100644 index 00000000..8c02d9de --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPieceState.java @@ -0,0 +1,62 @@ +package pp.mdga.client.gameState.turnState.choosePieceState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.ChoosePieceState; +import pp.mdga.game.Piece; +import pp.mdga.message.client.SelectedPiecesMessage; +import pp.mdga.message.server.MoveMessage; +import pp.mdga.notification.HomeMoveNotification; +import pp.mdga.notification.MovePieceNotification; + +import java.util.ArrayList; + +public class SelectPieceState extends ChoosePieceStates { + + private final ChoosePieceState parent; + private ArrayList possiblePieces; + + public SelectPieceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (ChoosePieceState) parent; + } + + @Override + public void enter() { + possiblePieces = new ArrayList<>(); + } + + @Override + public void exit() { + + } + + public void setPossiblePieces(ArrayList possiblePieces){ + this.possiblePieces = possiblePieces; + } + + @Override + public void selectPiece(Piece piece){ + if(possiblePieces.contains(piece)){ + logic.send(new SelectedPiecesMessage(piece.getUuid())); + } + } + + @Override + public void received(MoveMessage msg){ + Piece piece = logic.getGame().getPieceThroughUUID(msg.getIdentifier()); + if(msg.isHomeMove()){ + logic.addNotification(new HomeMoveNotification(piece.getUuid(), msg.getTargetIndex())); + logic.getGame().getBoard().getInfield()[logic.getGame().getBoard().getInfieldIndexOfPiece(piece)].clearOccupant(); + logic.getGame().getBoard().getPlayerData().get(piece.getColor()).setPieceInHome(msg.getTargetIndex(), piece); + } else { + if (logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].isOccupied()) { + throwPiece(logic.getGame().getBoard().getInfield()[msg.getTargetIndex()].getOccupant()); + logic.getGame().getPlayerByColor(logic.getGame().getActiveColor()).getPlayerStatistic().increasePiecesThrown(); + logic.getGame().getGameStatistics().increasePiecesThrown(); + } + logic.addNotification(new MovePieceNotification(piece.getUuid(), logic.getGame().getBoard().getInfieldIndexOfPiece(piece), msg.getTargetIndex())); + } + parent.getParent().setState(parent.getParent().getMovePiece()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPieceState.java new file mode 100644 index 00000000..5e5ac4a0 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPieceState.java @@ -0,0 +1,42 @@ +package pp.mdga.client.gameState.turnState.choosePieceState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.ChoosePieceState; +import pp.mdga.game.Piece; +import pp.mdga.message.client.SelectedPiecesMessage; +import pp.mdga.message.server.MoveMessage; + +public class StartPieceState extends ChoosePieceStates { + + private final ChoosePieceState parent; + private Piece moveablePiece; + + + public StartPieceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (ChoosePieceState) parent; + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } + + @Override + public void selectPiece(Piece piece){ + if(moveablePiece.equals(piece)){ + logic.send(new SelectedPiecesMessage(piece.getUuid())); + } + } + + @Override + public void received(MoveMessage msg){ + parent.getParent().setState(parent.getParent().getMovePiece()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPieceState.java new file mode 100644 index 00000000..a22197f1 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPieceState.java @@ -0,0 +1,43 @@ +package pp.mdga.client.gameState.turnState.choosePieceState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.ChoosePieceState; +import pp.mdga.game.Piece; +import pp.mdga.game.PieceState; +import pp.mdga.message.client.SelectedPiecesMessage; +import pp.mdga.message.server.MoveMessage; + +public class WaitingPieceState extends ChoosePieceStates { + + private final ChoosePieceState parent; + private Piece moveablePiece; + + public WaitingPieceState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (ChoosePieceState) parent; + } + + @Override + public void enter() { + moveablePiece = null; + } + + @Override + public void exit() { + } + + @Override + public void selectPiece(Piece piece){ + if(moveablePiece.equals(piece)){ + logic.send(new SelectedPiecesMessage(piece.getUuid())); + } + } + + @Override + public void received(MoveMessage msg){ + Piece pieceToMove = logic.getGame().getPieceThroughUUID(msg.getIdentifier()); + pieceToMove.setState(PieceState.ACTIVE); + parent.getParent().setState(parent.getParent().getMovePiece()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCardState.java new file mode 100644 index 00000000..54754e44 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCardState.java @@ -0,0 +1,113 @@ +package pp.mdga.client.gameState.turnState.powerCardState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.PowerCardState; +import pp.mdga.game.BonusCard; +import pp.mdga.message.client.NoPowerCardMessage; +import pp.mdga.message.client.SelectCardMessage; +import pp.mdga.message.server.DiceNowMessage; +import pp.mdga.message.server.PlayCardMessage; +import pp.mdga.message.server.PossibleCardMessage; +import pp.mdga.message.server.PossiblePieceMessage; +import pp.mdga.notification.SelectableCardsNotification; + +import java.util.ArrayList; +import java.util.stream.Collectors; + +/** + * State where the player can choose a power card + */ +public class ChoosePowerCardState extends PowerCardStates { + + private final PowerCardState parent; + private ArrayList possibleCards; + + /** + * Constructor + * @param parent parent state + * @param logic game logic + */ + public ChoosePowerCardState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (PowerCardState) parent; + } + + /** + * Enter the state + */ + @Override + public void enter() { + possibleCards = new ArrayList<>(); + //TODO: logic.send(new RequestPossibleCardsMessage()); + } + + /** + * Exit the state + */ + @Override + public void exit() { + possibleCards = null; + } + + /** + * Set the possible cards + * @param msg possible cards message + */ + @Override + public void received(PossibleCardMessage msg){ + possibleCards = (ArrayList) msg.getPossibleCards(); + logic.addNotification(new SelectableCardsNotification(possibleCards)); + } + + /** + * Select a card + * @param card card to select + */ + @Override + public void selectCard(BonusCard card){ + if(card != null){ + logic.send(new SelectCardMessage(card)); + } else { + logic.send(new NoPowerCardMessage()); + } + } + + /** + * Receive a card + * @param msg card message + */ + @Override + public void received(PlayCardMessage msg){ + if(msg.getCard().equals(BonusCard.TURBO)){ + logic.getGame().setDiceModifier(msg.getDiceModifier()); + } else { + LOGGER.log(System.Logger.Level.ERROR, "Received card that is not turbo"); + } + } + + /** + * Receive a die now message + * @param msg dice now message + */ + @Override + public void received(DiceNowMessage msg){ + parent.getParent().setState(parent.getParent().getRollDice()); + } + + /** + * Receive a possible piece message and decide if the player can swap or shield + * @param msg possible piece message + */ + @Override + public void received(PossiblePieceMessage msg){ + if (msg.getEnemyPossiblePieces().isEmpty()){ + parent.getShield().setPossiblePieces(msg.getOwnPossiblePieces().stream().map(piece -> logic.getGame().getPieceThroughUUID(piece)).collect(Collectors.toCollection(ArrayList::new))); + parent.setState(parent.getShield()); + } else { + parent.getSwap().setPossibleOwnPieces(msg.getOwnPossiblePieces().stream().map(piece -> logic.getGame().getPieceThroughUUID(piece)).collect(Collectors.toCollection(ArrayList::new))); + parent.getSwap().setPossibleEnemyPieces(msg.getEnemyPossiblePieces().stream().map(piece -> logic.getGame().getPieceThroughUUID(piece)).collect(Collectors.toCollection(ArrayList::new))); + parent.setState(parent.getSwap()); + } + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java new file mode 100644 index 00000000..753e5aa8 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java @@ -0,0 +1,11 @@ +package pp.mdga.client.gameState.turnState.powerCardState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.TurnStates; + +public abstract class PowerCardStates extends TurnStates { + public PowerCardStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ShieldState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ShieldState.java new file mode 100644 index 00000000..26143674 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ShieldState.java @@ -0,0 +1,54 @@ +package pp.mdga.client.gameState.turnState.powerCardState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.PowerCardState; +import pp.mdga.game.Piece; +import pp.mdga.message.client.RequestPlayCardMessage; +import pp.mdga.message.server.PlayCardMessage; + +import java.lang.System.Logger.Level; +import java.util.ArrayList; + +public class ShieldState extends PowerCardStates { + + private final PowerCardState parent; + + private ArrayList possiblePieces; + + public ShieldState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (PowerCardState) parent; + possiblePieces = new ArrayList<>(); + } + + @Override + public void enter() { + logic.addNotification(null); + //TODO: selectable piece notification + } + + @Override + public void exit() { + possiblePieces = null; + } + + public void setPossiblePieces(ArrayList possiblePieces) { + this.possiblePieces = possiblePieces; + } + + public void selectPiece(Piece piece) { + if (possiblePieces.contains(piece)) { + logic.send(RequestPlayCardMessage.requestPlayShield(piece.getUuid())); + } else { + LOGGER.log(Level.DEBUG, "Invalid piece selected"); + } + } + + + @Override + public void received(PlayCardMessage msg) { + parent.getParent().getPlayPowerCard().setPlayCard(msg); + parent.getParent().setState(parent.getParent().getPlayPowerCard()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/SwapState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/SwapState.java new file mode 100644 index 00000000..c907f66a --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/SwapState.java @@ -0,0 +1,68 @@ +package pp.mdga.client.gameState.turnState.powerCardState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; +import pp.mdga.client.gameState.turnState.PowerCardState; +import pp.mdga.game.Piece; +import pp.mdga.message.client.RequestPlayCardMessage; +import pp.mdga.message.server.PlayCardMessage; +import pp.mdga.notification.SelectableSwapNotification; + +import java.util.UUID; +import java.util.ArrayList; + +public class SwapState extends PowerCardStates { + + private final PowerCardState parent; + + private ArrayList possibleOwnPieces; + private ArrayList possibleEnemyPieces; + private Piece selectedOwnPiece; + private Piece selectedEnemyPiece; + + public SwapState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + this.parent = (PowerCardState) parent; + possibleOwnPieces = new ArrayList<>(); + possibleEnemyPieces = new ArrayList<>(); + } + + @Override + public void enter() { + ArrayList ownPieces = new ArrayList<>(possibleOwnPieces.stream().map(Piece::getUuid).toList()); + ArrayList enemyPieces = new ArrayList<>(possibleEnemyPieces.stream().map(Piece::getUuid).toList()); + logic.addNotification(new SelectableSwapNotification(ownPieces, enemyPieces)); + } + + @Override + public void exit() { + possibleOwnPieces = null; + possibleEnemyPieces = null; + } + + public void setPossibleOwnPieces(ArrayList possibleOwnPieces) { + this.possibleOwnPieces = possibleOwnPieces; + } + + public void setPossibleEnemyPieces(ArrayList possibleEnemyPieces) { + this.possibleEnemyPieces = possibleEnemyPieces; + } + + @Override + public void selectPiece(Piece piece){ + if (possibleOwnPieces.contains(piece)){ + selectedOwnPiece = piece; + } else if (possibleEnemyPieces.contains(piece)){ + selectedEnemyPiece = piece; + } + if (selectedOwnPiece != null && selectedEnemyPiece != null){ + logic.send(RequestPlayCardMessage.requestPlaySwap(selectedOwnPiece.getUuid(), selectedEnemyPiece.getUuid())); + } + } + + @Override + public void received(PlayCardMessage msg) { + parent.getParent().getPlayPowerCard().setPlayCard(msg); + parent.getParent().setState(parent.getParent().getPlayPowerCard()); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettingsState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettingsState.java new file mode 100644 index 00000000..63fa3fff --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettingsState.java @@ -0,0 +1,20 @@ +package pp.mdga.client.settingsState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public class AudioSettingsState extends SettingStates { + public AudioSettingsState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettingsState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettingsState.java new file mode 100644 index 00000000..5b1bde44 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettingsState.java @@ -0,0 +1,20 @@ +package pp.mdga.client.settingsState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public class MainSettingsState extends SettingStates { + public MainSettingsState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java new file mode 100644 index 00000000..2b9fb2ff --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java @@ -0,0 +1,10 @@ +package pp.mdga.client.settingsState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public abstract class SettingStates extends ClientState { + public SettingStates(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettingsState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettingsState.java new file mode 100644 index 00000000..78b72f48 --- /dev/null +++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettingsState.java @@ -0,0 +1,20 @@ +package pp.mdga.client.settingsState; + +import pp.mdga.client.ClientGameLogic; +import pp.mdga.client.ClientState; + +public class VideoSettingsState extends SettingStates { + public VideoSettingsState(ClientState parent, ClientGameLogic logic) { + super(parent, logic); + } + + @Override + public void enter() { + + } + + @Override + public void exit() { + + } +} diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java index f47d8fe6..c1687463 100644 --- a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java +++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java @@ -45,7 +45,7 @@ public void exit() { /** * This method will be called whenever the server received a JoinedLobbyMessage message. - * It will also get the client id of the player who send this messag + * It will also get the client id of the player who send this message * * @param msg as the message which was sent by the player as a JoinedLobbyMessage object. * @param from as the client id of the player as an Integer.