From 5268f75e177e0988bfa810184dfc6c0eded894e0 Mon Sep 17 00:00:00 2001 From: Johannes Schmelz Date: Mon, 25 Nov 2024 02:46:03 +0000 Subject: [PATCH] Client connect to server --- .../main/java/pp/battleship/client/Menu.java | 3 +- .../battleship/client/gui/VolumeSlider.java | 1 + .../Interface/Lemur/pp-styles.groovy | 15 +- Projekte/monopoly/client/client.properties | 4 +- .../java/pp/monopoly/client/GameMusic.java | 2 +- .../java/pp/monopoly/client/GameSound.java | 49 +- .../main/java/pp/monopoly/client/Menu.java | 51 -- .../java/pp/monopoly/client/MonopolyApp.java | 572 +++++++++++------- .../pp/monopoly/client/NetworkDialog.java | 146 ----- .../pp/monopoly/client/NetworkSupport.java | 116 ++-- .../monopoly/client/gui/CreateGameMenu.java | 313 ++++++---- .../pp/monopoly/client/gui/LobbyMenu.java | 93 ++- .../pp/monopoly/client/gui/SettingsMenu.java | 157 ++--- .../pp/monopoly/client/gui/SoundSlider.java | 31 + .../monopoly/client/{ => gui}/StartMenu.java | 85 +-- .../java/pp/monopoly/client/gui/Toolbar.java | 21 +- .../pp/monopoly/client/gui/VolumeSlider.java | 37 ++ .../gui/popups/BuildingPropertyCard.java | 2 +- .../monopoly/client/gui/popups/BuyCard.java | 6 +- .../client/gui/popups/FoodFieldCard.java | 3 +- .../client/gui/popups/GateFieldCard.java | 2 +- .../client/gui/popups/LooserPopUp.java | 52 ++ .../client/gui/popups/WinnerPopUp.java | 15 +- .../resources/Pictures/MonopolyLooser.png | Bin 0 -> 266509 bytes .../main/java/pp/monopoly/MonopolyConfig.java | 2 +- .../monopoly/game/client/ClientGameLogic.java | 24 +- .../java/pp/monopoly/game/server/Player.java | 11 + .../monopoly/game/server/PlayerHandler.java | 8 + .../monopoly/game/server/ServerGameLogic.java | 2 +- .../message/client/BuyPropertyRequest.java | 8 + .../pp/monopoly/message/client/EndTurn.java | 9 + .../monopoly/message/client/PlayerReady.java | 16 +- .../pp/monopoly/message/client/RollDice.java | 9 + .../monopoly/message/client/TradeOffer.java | 7 + .../message/client/TradeResponse.java | 8 + .../message/client/ViewAssetsRequest.java | 10 +- .../message/server/BuyPropertyResponse.java | 14 +- .../monopoly/message/server/DiceResult.java | 8 + .../message/server/EventDrawCard.java | 10 +- .../pp/monopoly/message/server/GameOver.java | 10 +- .../pp/monopoly/message/server/GameStart.java | 22 +- .../pp/monopoly/message/server/JailEvent.java | 10 +- .../message/server/NextPlayerTurn.java | 10 +- .../message/server/PlayerStatusUpdate.java | 14 +- .../message/server/TimeOutWarning.java | 10 +- .../monopoly/message/server/TradeReply.java | 8 + .../monopoly/message/server/TradeRequest.java | 8 + .../message/server/ViewAssetsResponse.java | 16 +- .../main/java/pp/monopoly/model/Figure.java | 3 + .../pp/monopoly/model/LimitedLinkedList.java | 10 +- .../pp/monopoly/server/MonopolyServer.java | 33 + 51 files changed, 1183 insertions(+), 893 deletions(-) delete mode 100644 Projekte/monopoly/client/src/main/java/pp/monopoly/client/Menu.java delete mode 100644 Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkDialog.java create mode 100644 Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java rename Projekte/monopoly/client/src/main/java/pp/monopoly/client/{ => gui}/StartMenu.java (63%) create mode 100644 Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/VolumeSlider.java create mode 100644 Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/LooserPopUp.java create mode 100644 Projekte/monopoly/client/src/main/resources/Pictures/MonopolyLooser.png diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java index 44a9a74..12afb6d 100644 --- a/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/Menu.java @@ -18,10 +18,11 @@ import com.simsilica.lemur.style.ElementId; import static pp.battleship.Resources.lookup; import pp.battleship.client.gui.GameMusic; -import pp.battleship.client.gui.VolumeSlider; import pp.dialog.Dialog; import pp.dialog.StateCheckboxModel; import pp.dialog.TextInputDialog; +import pp.battleship.client.gui.VolumeSlider; + import static pp.util.PreferencesUtils.getPreferences; /** diff --git a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/VolumeSlider.java b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/VolumeSlider.java index aa27292..70f9097 100644 --- a/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/VolumeSlider.java +++ b/Projekte/battleship/client/src/main/java/pp/battleship/client/gui/VolumeSlider.java @@ -1,6 +1,7 @@ package pp.battleship.client.gui; import com.simsilica.lemur.Slider; + /** * The VolumeSlider class represents the Volume Slider in the Menu. * It extends the Slider class and provides functionalities for setting the music volume, diff --git a/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy b/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy index 7bac65e..398fdf1 100644 --- a/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy +++ b/Projekte/jme-common/src/main/resources/Interface/Lemur/pp-styles.groovy @@ -21,9 +21,11 @@ def sliderColor = color(0.6, 0.8, 0.8, 1) def sliderBgColor = color(0.5, 0.75, 0.75, 1) def gradientColor = color(0.5, 0.75, 0.85, 0.5) def tabbuttonEnabledColor = color(0.4, 0.45, 0.5, 1) -def solidWhiteBackground = new QuadBackgroundComponent(color(1, 1, 1, 1)) // Solid white -def greyBackground = color(0.8, 0.8, 0.8, 1) // Grey background color -def redBorderColor = color(1, 0, 0, 1) // Red border color +def solidWhiteBackground = new QuadBackgroundComponent(new ColorRGBA(1, 1, 1, 1)) +def greyBackground = new QuadBackgroundComponent(new ColorRGBA(0.1f, 0.1f, 0.1f, 1.0f)); +def lightGreyBackground = new QuadBackgroundComponent(new ColorRGBA(0.4f, 0.4f, 0.4f, 1.0f)); +def lightGrey = color(0.6, 0.6, 0.6, 1.0) + @@ -246,7 +248,12 @@ selector("tab.button", "pp") { buttonCommands = stdButtonCommands } selector("settings-title", "pp") { - fontSize = 48 // Set font size + def outerBackground = new QuadBackgroundComponent(color(1, 0.5, 0, 1)) // Grey inner border + def innerBackground = new QuadBackgroundComponent(buttonBgColor) // White outer border background + + background = outerBackground + fontSize = 40 + insets = new Insets3f(3, 3, 3, 3) textHAlignment = HAlignment.Center textVAlignment = VAlignment.Center } diff --git a/Projekte/monopoly/client/client.properties b/Projekte/monopoly/client/client.properties index fd98968..3e2d911 100644 --- a/Projekte/monopoly/client/client.properties +++ b/Projekte/monopoly/client/client.properties @@ -24,10 +24,10 @@ overlay.top.color=1, 1, 1, 1 settings.show=false # # Specifies the width of the application window in pixels. -settings.resolution.width=1920 +settings.resolution.width=1200 # # Specifies the height of the application window in pixels. -settings.resolution.height=1080 +settings.resolution.height=800 # # Determines whether the application runs in full-screen mode. settings.full-screen=false diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java index 791b604..1e6f94e 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameMusic.java @@ -34,7 +34,7 @@ public class GameMusic extends AbstractAppState{ return PREFERENCES.getBoolean(ENABLED_PREF, true); } - /** + /** * Checks if sound is enabled in the preferences. * * @return float to which the volume is set diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java index f2bb02a..2722afa 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameSound.java @@ -30,6 +30,7 @@ public class GameSound extends AbstractAppState implements GameEventListener { private static final Logger LOGGER = System.getLogger(GameSound.class.getName()); private static final Preferences PREFERENCES = getPreferences(GameSound.class); private static final String ENABLED_PREF = "enabled"; //NON-NLS + private static final String VOLUME_PREF = "volume"; //NON-NLS private AudioNode passStartSound; private AudioNode eventCardSound; @@ -59,6 +60,15 @@ public class GameSound extends AbstractAppState implements GameEventListener { setEnabled(!isEnabled()); } + /** + * Checks if sound is enabled in the preferences. + * + * @return float to which the volume is set + */ + public static float volumeInPreferences() { + return PREFERENCES.getFloat(VOLUME_PREF, 0.5f); + } + /** * Sets the enabled state of this AppState. * Overrides {@link com.jme3.app.state.AbstractAppState#setEnabled(boolean)} @@ -92,7 +102,7 @@ public class GameSound extends AbstractAppState implements GameEventListener { tradeAcceptedSound = loadSound(app, "Sound/Effects/tradeAccepted.ogg"); tradeRejectedSound = loadSound(app, "Sound/Effects/tradeRejected.ogg"); winnerSound = loadSound(app, "Sound/Effects/winner.ogg"); - looserSound = loadSound(app, "Sound/Effects/looser.ogg"); + looserSound = loadSound(app, "Sound/Effects/loser.ogg"); buttonSound = loadSound(app, "Sound/Effects/button.ogg"); } @@ -193,21 +203,40 @@ public class GameSound extends AbstractAppState implements GameEventListener { if (isEnabled() && buttonSound != null) buttonSound.playInstance(); } + /** + * Sets the volume of the sounds + * @param vol the volume to which the sounds should be set + */ + public void setVolume(float vol){ + passStartSound.setVolume(vol); + eventCardSound.setVolume(vol); + gulagSound.setVolume(vol); + diceRollSound.setVolume(vol); + moneyCollectSound.setVolume(vol); + moneyLostSound.setVolume(vol); + tradeAcceptedSound.setVolume(vol); + tradeRejectedSound.setVolume(vol); + winnerSound.setVolume(vol); + looserSound.setVolume(vol); + buttonSound.setVolume(vol); + + PREFERENCES.putFloat(VOLUME_PREF, vol); + } @Override public void receivedEvent(SoundEvent event) { switch (event.sound()) { case PASS_START -> passStart(); case EVENT_CARD -> eventCard(); - case GULAG -> eventCard(); - case DICE_ROLL -> eventCard(); - case MONEY_COLLECTED -> eventCard(); - case MONEY_LOST -> eventCard(); - case TRADE_ACCEPTED -> eventCard(); - case TRADE_REJECTED -> eventCard(); - case WINNER -> eventCard(); - case LOSER -> eventCard(); - case BUTTON -> eventCard(); + case GULAG -> gulag(); + case DICE_ROLL -> diceRoll(); + case MONEY_COLLECTED -> moneyCollect(); + case MONEY_LOST -> moneyLost(); + case TRADE_ACCEPTED -> tradeAccepted(); + case TRADE_REJECTED -> tradeRejected(); + case WINNER -> winner(); + case LOSER -> looser(); + case BUTTON -> button(); } } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/Menu.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/Menu.java deleted file mode 100644 index a9a22e5..0000000 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/Menu.java +++ /dev/null @@ -1,51 +0,0 @@ -//////////////////////////////////////// -// Programming project code -// UniBw M, 2022, 2023, 2024 -// www.unibw.de/inf2 -// (c) Mark Minas (mark.minas@unibw.de) -//////////////////////////////////////// - -package pp.monopoly.client; - -import java.util.prefs.Preferences; - -import pp.dialog.Dialog; -import static pp.util.PreferencesUtils.getPreferences; - -/** - * The Menu class represents the main menu in the Battleship game application. - * It extends the Dialog class and provides functionalities for loading, saving, - * returning to the game, and quitting the application. - */ -class Menu extends Dialog { - private static final Preferences PREFERENCES = getPreferences(Menu.class); - private static final String LAST_PATH = "last.file.path"; - private final MonopolyApp app; - - - /** - * Constructs the Menu dialog for the Battleship application. - * - * @param app the BattleshipApp instance - */ - public Menu(MonopolyApp app) { - super(app.getDialogManager()); - this.app = app; - } - - /** - * Updates the state of the load and save buttons based on the game logic. - */ - @Override - public void update() { - - } - - /** - * As an escape action, this method closes the menu if it is the top dialog. - */ - @Override - public void escape() { - close(); - } -} diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java index c2f0d03..9991bb6 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java @@ -1,298 +1,446 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + package pp.monopoly.client; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - +import com.jme3.app.DebugKeysAppState; import com.jme3.app.SimpleApplication; +import com.jme3.app.StatsAppState; import com.jme3.font.BitmapFont; import com.jme3.font.BitmapText; import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; import com.jme3.input.controls.ActionListener; import com.jme3.input.controls.KeyTrigger; +import com.jme3.input.controls.MouseButtonTrigger; import com.jme3.system.AppSettings; import com.simsilica.lemur.GuiGlobals; import com.simsilica.lemur.style.BaseStyles; - +import pp.monopoly.game.client.MonopolyClient; +import pp.monopoly.client.gui.SettingsMenu; +import pp.monopoly.client.gui.StartMenu; +import pp.monopoly.game.client.ClientGameLogic; +import pp.monopoly.game.client.ServerConnection; +import pp.monopoly.notification.ClientStateEvent; +import pp.monopoly.notification.GameEventListener; +import pp.monopoly.notification.InfoTextEvent; +import pp.monopoly.notification.Sound; import pp.dialog.DialogBuilder; import pp.dialog.DialogManager; import pp.graphics.Draw; -import pp.monopoly.client.gui.*; -import pp.monopoly.client.gui.popups.*; -import pp.monopoly.game.client.ClientGameLogic; -import pp.monopoly.game.client.MonopolyClient; -import pp.monopoly.game.client.ServerConnection; -import pp.monopoly.model.card.DeckHelper; // TODO für den Import der Queue notwendig -import pp.monopoly.model.fields.BoardManager; -import pp.monopoly.notification.GameEventListener; -import pp.monopoly.notification.InfoTextEvent; -import pp.monopoly.server.MonopolyServer; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.logging.LogManager; + +import static pp.monopoly.Resources.lookup; + +/** + * The main class for the Battleship client application. + * It manages the initialization, input setup, GUI setup, and game states for the client. + */ public class MonopolyApp extends SimpleApplication implements MonopolyClient, GameEventListener { - private BitmapText topText; - private final ServerConnection serverConnection; - private final ClientGameLogic logic; - private final MonopolyAppConfig config; - private final ActionListener escapeListener = (name, isPressed, tpf) -> handleEscape(isPressed); - private final DialogManager dialogManager = new DialogManager(this); - private final ExecutorService executor = Executors.newCachedThreadPool(); - private final Draw draw; - private SettingsMenu settingsMenu; - private TestWorld testWorld; - private boolean isSettingsMenuOpen = false; - private boolean inputBlocked = false; - private MonopolyServer monopolyServer; - private NetworkSupport networkSupport; - private BoardManager boardManager = new BoardManager(); - - // TODO Temp später entfernen - - - private DeckHelper deckHelper = new DeckHelper(); //TODO für den Import der Queue notwendig - - private EventCard eventCard; - private BuildingPropertyCard buildingProperty; - private FoodFieldCard foodField; - private GateFieldCard gateField; - private BuyCard buyCard; - private boolean isBuyCardPopupOpen = false; - private final ActionListener BListener = (name, isPressed, tpf) -> handleB(isPressed); + /** + * Logger for logging messages within the application. + */ + private static final Logger LOGGER = System.getLogger(MonopolyApp.class.getName()); /** * Path to the styles script for GUI elements. */ - private static final String STYLES_SCRIPT = "Interface/Lemur/pp-styles.groovy"; // NON-NLS + private static final String STYLES_SCRIPT = "Interface/Lemur/pp-styles.groovy"; //NON-NLS + /** * Path to the font resource used in the GUI. */ - private static final String FONT = "Interface/Fonts/Default.fnt"; // NON-NLS + private static final String FONT = "Interface/Fonts/Default.fnt"; //NON-NLS + /** + * Path to the client configuration file, if one exists. + */ + private static final File CONFIG_FILE = new File("client.properties"); + + /** + * Input mapping name for mouse clicks. + */ + public static final String CLICK = "CLICK"; + + /** + * Input mapping name for the Escape key. + */ + private static final String ESC = "ESC"; + + /** + * Manager for handling dialogs within the application. + */ + private final DialogManager dialogManager = new DialogManager(this); + + /** + * The server connection instance, used for communicating with the game server. + */ + private final ServerConnection serverConnection; + + /** + * Instance of the {@link Draw} class for rendering graphics. + */ + private Draw draw; + + /** + * Text display at the top of the GUI for showing information to the user. + */ + private BitmapText topText; + + /** + * Executor service for handling asynchronous tasks within the application. + */ + private ExecutorService executor; + + /** + * Handler for managing the client's game logic. + */ + private final ClientGameLogic logic; + + /** + * Configuration settings for the Battleship client application. + */ + private final MonopolyAppConfig config; + + /** + * Listener for handling actions triggered by the Escape key. + */ + private final ActionListener escapeListener = (name, isPressed, tpf) -> escape(isPressed); + + static { + // Configure logging + LogManager manager = LogManager.getLogManager(); + try { + manager.readConfiguration(new FileInputStream("logging.properties")); + LOGGER.log(Level.INFO, "Successfully read logging properties"); //NON-NLS + } + catch (IOException e) { + LOGGER.log(Level.INFO, e.getMessage()); + } + } + + /** + * Starts the Battleship application. + * + * @param args Command-line arguments for launching the application. + */ public static void main(String[] args) { new MonopolyApp().start(); } - public MonopolyApp() { - this.draw = new Draw(assetManager); + /** + * Constructs a new {@code MonopolyApp} instance. + * Initializes the configuration, server connection, and game logic listeners. + */ + private MonopolyApp() { config = new MonopolyAppConfig(); - networkSupport = new NetworkSupport(this); // Initialize NetworkSupport - serverConnection = networkSupport; + config.readFromIfExists(CONFIG_FILE); + serverConnection = makeServerConnection(); logic = new ClientGameLogic(serverConnection); logic.addListener(this); setShowSettings(config.getShowSettings()); setSettings(makeSettings()); } - @Override - public MonopolyAppConfig getConfig() { - return config; + /** + * Creates and configures application settings from the client configuration. + * + * @return A configured {@link AppSettings} object. + */ + private AppSettings makeSettings() { + final AppSettings settings = new AppSettings(true); + settings.setTitle(lookup("monopoly.name")); + settings.setResolution(config.getResolutionWidth(), config.getResolutionHeight()); + settings.setFullscreen(config.fullScreen()); + settings.setUseRetinaFrameBuffer(config.useRetinaFrameBuffer()); + settings.setGammaCorrection(config.useGammaCorrection()); + return settings; } + /** + * Factory method for creating a server connection based on the current + * client configuration. + * + * @return A {@link ServerConnection} instance, which could be a real or mock server. + */ + private ServerConnection makeServerConnection() { + return new NetworkSupport(this); + } + + /** + * Returns the dialog manager responsible for managing in-game dialogs. + * + * @return The {@link DialogManager} instance. + */ + public DialogManager getDialogManager() { + return dialogManager; + } + + /** + * Returns the game logic handler for the client. + * + * @return The {@link ClientGameLogic} instance. + */ @Override public ClientGameLogic getGameLogic() { return logic; } - public BoardManager getBoardManager() { - return boardManager; - } - - // TODO analoge Implementierung zum Boardmamager zum Testen der EventCardPopups - - public DeckHelper getDeckHelper(){ - return deckHelper; - } - - public NetworkSupport getNetworkSupport() { - return networkSupport; - } - - private AppSettings makeSettings() { - final AppSettings settings = new AppSettings(true); - settings.setTitle("Monopoly Game"); - settings.setResolution(config.getResolutionWidth(), config.getResolutionHeight()); - settings.setFullscreen(config.fullScreen()); - return settings; + /** + * Returns the current configuration settings for the Battleship client. + * + * @return The {@link BattleshipClientConfig} instance. + */ + @Override + public MonopolyAppConfig getConfig() { + return config; } + /** + * Initializes the application. + * Sets up input mappings, GUI, game states, and connects to the server. + */ @Override public void simpleInitApp() { - GuiGlobals.initialize(this); - BaseStyles.loadStyleResources(STYLES_SCRIPT); - GuiGlobals.getInstance().getStyles().setDefaultStyle("pp"); // NON-NLS - BaseStyles.loadStyleResources("com/simsilica/lemur/style/base/glass-styles.groovy"); - GuiGlobals.getInstance().getStyles(); - final BitmapFont normalFont = assetManager.loadFont(FONT); // NON-NLS - + setPauseOnLostFocus(false); + draw = new Draw(assetManager); setupInput(); + setupStates(); setupGui(); - - // Zeige das Startmenü - StartMenu.createStartMenu(this); + new StartMenu(this).open(); } + /** + * Sets up the graphical user interface (GUI) for the application. + */ private void setupGui() { - BitmapFont normalFont = assetManager.loadFont("Interface/Fonts/Default.fnt"); + GuiGlobals.initialize(this); + BaseStyles.loadStyleResources(STYLES_SCRIPT); + BaseStyles.loadGlassStyle(); + GuiGlobals.getInstance().getStyles().setDefaultStyle("pp"); //NON-NLS + final BitmapFont normalFont = assetManager.loadFont(FONT); //NON-NLS topText = new BitmapText(normalFont); - topText.setLocalTranslation(10, settings.getHeight() - 10, 0); + final int height = context.getSettings().getHeight(); + topText.setLocalTranslation(10f, height - 10f, 0f); + topText.setColor(config.getTopColor()); guiNode.attachChild(topText); } + /** + * Configures input mappings and sets up listeners for user interactions. + */ private void setupInput() { inputManager.deleteMapping(INPUT_MAPPING_EXIT); - inputManager.setCursorVisible(true); - inputManager.addMapping("ESC", new KeyTrigger(KeyInput.KEY_ESCAPE)); - inputManager.addListener(escapeListener, "ESC"); - - inputManager.addMapping("B", new KeyTrigger(KeyInput.KEY_B)); - inputManager.addListener(BListener, "B"); + inputManager.setCursorVisible(false); + inputManager.addMapping(ESC, new KeyTrigger(KeyInput.KEY_ESCAPE)); + inputManager.addMapping(CLICK, new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); + inputManager.addListener(escapeListener, ESC); } - private void handleEscape(boolean isPressed) { - if (isPressed) { - if (settingsMenu != null && isSettingsMenuOpen) { - // Schließe das SettingsMenu - System.out.println("Schließe SettingsMenu..."); - settingsMenu.close(); - settingsMenu = null; - setSettingsMenuOpen(false); - } else { - // Öffne das SettingsMenu - System.out.println("Öffne SettingsMenu..."); - settingsMenu = new SettingsMenu(this); - settingsMenu.open(); - setSettingsMenuOpen(true); - } + /** + * Initializes and attaches the necessary application states for the game. + */ + private void setupStates() { + if (config.getShowStatistics()) { + final BitmapFont normalFont = assetManager.loadFont(FONT); //NON-NLS + final StatsAppState stats = new StatsAppState(guiNode, normalFont); + stateManager.attach(stats); } + flyCam.setEnabled(false); + stateManager.detach(stateManager.getState(StatsAppState.class)); + stateManager.detach(stateManager.getState(DebugKeysAppState.class)); + + attachGameSound(); + attachGameMusic(); } - //logik zum wechselnden erscheinen und verschwinden beim drücken von B //TODO süäter entfernen - private void handleB(boolean isPressed) { - if (isPressed) { - if (eventCard != null && isBuyCardPopupOpen) { - // Schließe das SettingsMenu - System.out.println("Schließe BuyCardPopup..."); - eventCard.close(); - eventCard = null; - setBuyCardPopupOpen(false); - } else { - // Öffne das SettingsMenu - System.out.println("Öffne BuyCardPopup..."); - eventCard = new EventCard(this); - eventCard.open(); - setBuyCardPopupOpen(true); - } - } + /** + * Attaches the game sound state and sets its initial enabled state. + */ + private void attachGameSound() { + final GameSound gameSound = new GameSound(); + logic.addListener(gameSound); + gameSound.setEnabled(GameSound.enabledInPreferences()); + stateManager.attach(gameSound); } - private void blockInputs() { - if (!inputBlocked) { - System.out.println("Blockiere Eingaben..."); - inputManager.setCursorVisible(true); // Cursor sichtbar machen - inputManager.clearMappings(); // Alle Mappings entfernen - inputBlocked = true; - } - } - - public void unblockInputs() { - if (inputBlocked) { - System.out.println("Aktiviere Eingaben..."); - setupInput(); // Standard-Eingaben neu registrieren - inputBlocked = false; - } - } - - public void setInfoText(String text) { - topText.setText(text); + /** + * Attaches the background music state and sets its initial enabled state. + */ + private void attachGameMusic() { + final GameMusic gameSound = new GameMusic(); + gameSound.setEnabled(GameMusic.enabledInPreferences()); + stateManager.attach(gameSound); } + /** + * Updates the application state every frame. + * This method is called once per frame during the game loop. + * + * @param tpf Time per frame in seconds. + */ @Override - public void receivedEvent(InfoTextEvent event) { - setInfoText(event.key()); + public void simpleUpdate(float tpf) { + super.simpleUpdate(tpf); + dialogManager.update(tpf); + logic.update(tpf); } - @Override - public void stop(boolean waitFor) { - if (executor != null) executor.shutdownNow(); - serverConnection.disconnect(); - super.stop(waitFor); - } - - public DialogManager getDialogManager() { - return dialogManager; + /** + * Handles the Escape key action to either close the top dialog or show the main menu. + * + * @param isPressed Indicates whether the Escape key is pressed. + */ + public void escape(boolean isPressed) { + if (!isPressed) return; + if (dialogManager.showsDialog()) + dialogManager.escape(); + else + new SettingsMenu(this).open(); } + /** + * Returns the {@link Draw} instance used for rendering graphical elements in the game. + * + * @return The {@link Draw} instance. + */ public Draw getDraw() { return draw; } - public ExecutorService getExecutor() { - return executor; - } - - public void closeApp() { - stop(); - } - - public void errorDialog(String errorMessage) { - DialogBuilder.simple(dialogManager) - .setTitle("Fehler") - .setText(errorMessage) - .setOkButton("OK") - .build() - .open(); - } - - public void setSettingsMenuOpen(boolean isOpen) { - this.isSettingsMenuOpen = isOpen; - } - - // TODO später entfernen - - public void setBuyCardPopupOpen(boolean isOpen) { - this.isBuyCardPopupOpen = isOpen; - } - - @Override - public void simpleUpdate(float tpf) { - if (testWorld != null) { - testWorld.update(tpf); // Aktualisiere die Kamera in der TestWorld - } - } - - public void startTestWorld() { - guiNode.detachAllChildren(); // Entferne GUI - testWorld = new TestWorld(this); // Erstelle eine Instanz von TestWorld - testWorld.initializeScene(); // Initialisiere die Szene - } - - // TODO später entfernen - - public void startBuyCard() { - } - - public void returnToMenu() { - guiNode.detachAllChildren(); // Entferne die GUI - StartMenu.createStartMenu(this); // Zeige das Startmenü erneut + /** + * Tries to connect + */ + public void connect() { + serverConnection.connect(); } /** - * Startet den Server in einem neuen Thread. + * Handles a request to close the application. + * If the request is initiated by pressing ESC, this parameter is true. + * + * @param esc If true, the request is due to the ESC key being pressed. */ - public void startServer() { - new Thread(() -> { - try { - MonopolyServer.main(new String[0]); // Startet den MonopolyServer - } catch (Exception e) { - errorDialog("Fehler: Server konnte nicht gestartet werden."); - } - }).start(); + @Override + public void requestClose(boolean esc) { /* do nothing */ } + + /** + * Closes the application, displaying a confirmation dialog if the client is connected to a server. + */ + public void closeApp() { + if (serverConnection.isConnected()) + confirmDialog(lookup("confirm.leaving"), this::close); + else + close(); } - public MonopolyServer getMonopolyServer() { - return monopolyServer; + /** + * Closes the application, disconnecting from the server and stopping the application. + */ + private void close() { + serverConnection.disconnect(); + stop(); } - public ServerConnection getServerConnection() { - return serverConnection; + /** + * Updates the informational text displayed in the GUI. + * + * @param text The information text to display. + */ + public void setInfoText(String text) { + LOGGER.log(Level.DEBUG, "setInfoText {0}", text); //NON-NLS + topText.setText(text); + } + + /** + * Updates the informational text in the GUI based on the key received in an {@link InfoTextEvent}. + * + * @param event The {@link InfoTextEvent} containing the key for the text to display. + */ + @Override + public void receivedEvent(InfoTextEvent event) { + LOGGER.log(Level.DEBUG, "received info text {0}", event.key()); //NON-NLS + setInfoText(lookup(event.key())); + } + + /** + * Handles client state events to update the game states accordingly. + * + * @param event The {@link ClientStateEvent} representing the state change. + */ + @Override + public void receivedEvent(ClientStateEvent event) { + } + + /** + * Returns the executor service used for handling multithreaded tasks. + * + * @return The {@link ExecutorService} instance. + */ + public ExecutorService getExecutor() { + if (executor == null) + executor = Executors.newCachedThreadPool(); + return executor; + } + + /** + * Stops the application, shutting down the executor service and halting execution. + * + * @param waitFor If true, waits for the application to stop before returning. + */ + @Override + public void stop(boolean waitFor) { + if (executor != null) executor.shutdownNow(); + super.stop(waitFor); + } + + /** + * Displays a confirmation dialog with a specified question and action for the "Yes" button. + * + * @param question The question to display in the dialog. + * @param yesAction The action to perform if "Yes" is selected. + */ + public void confirmDialog(String question, Runnable yesAction) { + DialogBuilder.simple(dialogManager) + .setTitle(lookup("dialog.question")) + .setText(question) + .setOkButton(lookup("button.yes"), d -> { + getGameLogic().playSound(Sound.BUTTON); // Play sound + yesAction.run(); // Execute the original yesAction + }) + .setNoButton(lookup("button.no"), d -> getGameLogic().playSound(Sound.BUTTON)) + .build() + .open(); + } + + /** + * Displays an error dialog with the specified error message. + * + * @param errorMessage The error message to display in the dialog. + */ + public void errorDialog(String errorMessage) { + DialogBuilder.simple(dialogManager) + .setTitle(lookup("dialog.error")) + .setText(errorMessage) + .setOkButton(lookup("button.ok"), d -> getGameLogic().playSound(Sound.BUTTON)) + .build() + .open(); + } + + public void disconnect() { + serverConnection.disconnect(); } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkDialog.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkDialog.java deleted file mode 100644 index 23bf5e6..0000000 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkDialog.java +++ /dev/null @@ -1,146 +0,0 @@ -package pp.monopoly.client; - -import java.lang.System.Logger; -import java.lang.System.Logger.Level; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -import com.simsilica.lemur.Button; -import com.simsilica.lemur.Container; -import com.simsilica.lemur.Label; -import com.simsilica.lemur.TextField; - -import pp.dialog.Dialog; -import pp.dialog.DialogBuilder; -import pp.dialog.SimpleDialog; - -/** - * Represents a dialog for setting up a network connection in the Monopoly game. - * Allows users to specify the host and port for connecting to a game server. - */ -class NetworkDialog extends SimpleDialog { - private static final Logger LOGGER = System.getLogger(NetworkDialog.class.getName()); - private static final String LOCALHOST = "localhost"; - private static final String DEFAULT_PORT = "42069"; - private final NetworkSupport network; - private final TextField host = new TextField(LOCALHOST); - private final TextField port = new TextField(DEFAULT_PORT); - private String hostname; - private int portNumber; - private Future connectionFuture; - private Dialog progressDialog; - - /** - * Constructs a new NetworkDialog. - * - * @param network The NetworkSupport instance to be used for network operations. - */ - NetworkDialog(NetworkSupport network) { - super(network.getApp().getDialogManager()); - this.network = network; - initializeDialog(); - } - - /** - * Initializes the dialog with input fields and connection buttons. - */ - private void initializeDialog() { - final MonopolyApp app = network.getApp(); - Container inputContainer = new Container(); - - // Titel und Eingabefelder für Host und Port - inputContainer.addChild(new Label("Server-Adresse")); - inputContainer.addChild(host); - - inputContainer.addChild(new Label("Port")); - inputContainer.addChild(port); - - Button connectButton = inputContainer.addChild(new Button("Verbinden")); - connectButton.addClickCommands(source -> connect()); - - Button cancelButton = inputContainer.addChild(new Button("Abbrechen")); - cancelButton.addClickCommands(source -> app.closeApp()); - - app.getGuiNode().attachChild(inputContainer); - } - - /** - * Initiates the connection attempt based on the entered host and port. - */ - private void connect() { - LOGGER.log(Level.INFO, "Connecting to host={0}, port={1}", host, port); - try { - hostname = host.getText().trim().isEmpty() ? LOCALHOST : host.getText(); - portNumber = Integer.parseInt(port.getText()); - openProgressDialog(); - connectionFuture = network.getApp().getExecutor().submit(this::initNetwork); - } catch (NumberFormatException e) { - network.getApp().errorDialog("Port muss eine Zahl sein."); - } - } - - /** - * Opens a progress dialog while connecting. - */ - private void openProgressDialog() { - progressDialog = DialogBuilder.simple(network.getApp().getDialogManager()) - .setText("Verbinde zum Server...") - .build(); - progressDialog.open(); - } - - /** - * Attempts to initialize the network connection. - * - * @throws RuntimeException If an error occurs when creating the client. - */ - private Object initNetwork() { - try { - network.initNetwork(hostname, portNumber); - return null; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * Updates the connection status and handles completion or failure. - */ - @Override - public void update(float delta) { - if (connectionFuture != null && connectionFuture.isDone()) { - try { - connectionFuture.get(); - onSuccess(); - } catch (ExecutionException e) { - onFailure(e.getCause()); - } catch (InterruptedException e) { - LOGGER.log(Level.WARNING, "Connection interrupted.", e); - Thread.currentThread().interrupt(); - } - } - } - - /** - * Handles a successful connection to the game server. - */ - private void onSuccess() { - connectionFuture = null; - progressDialog.close(); - this.close(); - network.getApp().setInfoText("Warte auf einen Gegner..."); - } - - /** - * Handles a failed connection attempt. - * - * @param e The cause of the failure. - */ - private void onFailure(Throwable e) { - connectionFuture = null; - progressDialog.close(); - network.getApp().errorDialog("Verbindung zum Server fehlgeschlagen."); - network.getApp().setInfoText(e.getLocalizedMessage()); - } - -} \ No newline at end of file diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkSupport.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkSupport.java index 40897de..da9198f 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkSupport.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/NetworkSupport.java @@ -1,8 +1,11 @@ -package pp.monopoly.client; +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// -import java.io.IOException; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; +package pp.monopoly.client; import com.jme3.network.Client; import com.jme3.network.ClientStateListener; @@ -10,12 +13,19 @@ import com.jme3.network.Message; import com.jme3.network.MessageListener; import com.jme3.network.Network; +import pp.monopoly.client.gui.CreateGameMenu; import pp.monopoly.game.client.ServerConnection; import pp.monopoly.message.client.ClientMessage; import pp.monopoly.message.server.ServerMessage; +import java.io.IOException; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; + +import static pp.monopoly.Resources.lookup; + /** - * Manages the network connection for the Monopoly application. + * Manages the network connection for the Battleship application. * Handles connecting to and disconnecting from the server, and sending messages. */ public class NetworkSupport implements MessageListener, ClientStateListener, ServerConnection { @@ -24,28 +34,32 @@ public class NetworkSupport implements MessageListener, ClientStateListe private Client client; /** - * Constructs a NetworkSupport instance for the Monopoly application. + * Constructs a NetworkSupport instance for the given Battleship application. * - * @param app The Monopoly application instance. + * @param app The Battleship application instance. */ public NetworkSupport(MonopolyApp app) { this.app = app; } /** - * Returns the Monopoly application instance. - * - * @return Monopoly application instance + * Return the client connections Id + * @return the client id */ - MonopolyApp getApp() { - return app; - } - public int getId() { if (client == null) return 0; return client.getId(); } + /** + * Returns the Battleship application instance. + * + * @return Battleship application instance + */ + public MonopolyApp getApp() { + return app; + } + /** * Checks if there is a connection to the game server. * @@ -62,9 +76,8 @@ public class NetworkSupport implements MessageListener, ClientStateListe */ @Override public void connect() { - if (client == null) { - new NetworkDialog(this).open(); - } + if (client == null) + new CreateGameMenu(this).open(); } /** @@ -75,7 +88,7 @@ public class NetworkSupport implements MessageListener, ClientStateListe if (client == null) return; client.close(); client = null; - LOGGER.log(Level.INFO, "Client connection closed."); + LOGGER.log(Level.INFO, "client closed"); //NON-NLS } /** @@ -86,9 +99,8 @@ public class NetworkSupport implements MessageListener, ClientStateListe * @throws IOException If an I/O error occurs when creating the client. */ public void initNetwork(String host, int port) throws IOException { - if (client != null) { - throw new IllegalStateException("Already connected to the game server."); - } + if (client != null) + throw new IllegalStateException("trying to join a game again"); client = Network.connectToServer(host, port); client.start(); client.addMessageListener(this); @@ -103,10 +115,9 @@ public class NetworkSupport implements MessageListener, ClientStateListe */ @Override public void messageReceived(Client client, Message message) { - LOGGER.log(Level.INFO, "Message received from server: {0}", message); - if (message instanceof ServerMessage serverMessage) { + LOGGER.log(Level.INFO, "message received from server: {0}", message); //NON-NLS + if (message instanceof ServerMessage serverMessage) app.enqueue(() -> serverMessage.accept(app.getGameLogic())); - } } /** @@ -116,7 +127,7 @@ public class NetworkSupport implements MessageListener, ClientStateListe */ @Override public void clientConnected(Client client) { - LOGGER.log(Level.INFO, "Successfully connected to server: {0}", client); + LOGGER.log(Level.INFO, "Client connected: {0}", client); //NON-NLS } /** @@ -127,9 +138,13 @@ public class NetworkSupport implements MessageListener, ClientStateListe */ @Override public void clientDisconnected(Client client, DisconnectInfo disconnectInfo) { - LOGGER.log(Level.INFO, "Disconnected from server: {0}", disconnectInfo); + LOGGER.log(Level.INFO, "Client {0} disconnected: {1}", client, disconnectInfo); //NON-NLS + if (this.client != client) + throw new IllegalArgumentException("parameter value must be client"); + LOGGER.log(Level.INFO, "client still connected: {0}", client.isConnected()); //NON-NLS this.client = null; - app.enqueue(() -> app.setInfoText("Verbindung zum Server verloren.")); + disconnect(); + app.enqueue(() -> app.setInfoText(lookup("lost.connection.to.server"))); } /** @@ -139,47 +154,10 @@ public class NetworkSupport implements MessageListener, ClientStateListe */ @Override public void send(ClientMessage message) { - LOGGER.log(Level.INFO, "Sending message to server: {0}", message); - if (client == null) { - app.errorDialog("Verbindung zum Server verloren."); - } else { + LOGGER.log(Level.INFO, "sending {0}", message); //NON-NLS + if (client == null) + app.errorDialog(lookup("lost.connection.to.server")); + else client.send(message); - } } - public void startServerAndJoin() { - new Thread(() -> { - // Server starten - app.startServer(); - - // Warten, bis der Server tatsächlich betriebsbereit ist - int retries = 5; - while (retries > 0) { - try { - initNetwork("localhost", app.getConfig().getPort()); - app.enqueue(() -> app.setInfoText("Erfolgreich verbunden!")); - return; // Verbindung erfolgreich - } catch (IOException e) { - retries--; - try { - Thread.sleep(1000); // Eine Sekunde warten und erneut versuchen - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - break; // Abbrechen, wenn der Thread unterbrochen wird - } - } - } - - // Wenn alle Versuche fehlschlagen - app.enqueue(() -> app.errorDialog("Fehler: Verbindung zum Server fehlgeschlagen.")); - }).start(); - } - - public void connectToServer(String host, int port) { - try { - initNetwork(host, port); // Verbindung initialisieren - app.setInfoText("Erfolgreich mit Server verbunden!"); - } catch (IOException e) { - app.errorDialog("Fehler: Verbindung zum Server fehlgeschlagen."); - } - } -} \ No newline at end of file +} diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CreateGameMenu.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CreateGameMenu.java index b4c0ca0..82cf38a 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CreateGameMenu.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CreateGameMenu.java @@ -1,151 +1,226 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + package pp.monopoly.client.gui; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; + import com.jme3.material.Material; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; import com.jme3.texture.Texture; -import com.simsilica.lemur.Axis; import com.simsilica.lemur.Button; import com.simsilica.lemur.Container; import com.simsilica.lemur.Label; import com.simsilica.lemur.TextField; import com.simsilica.lemur.component.SpringGridLayout; +import static pp.monopoly.Resources.lookup; + import com.simsilica.lemur.style.ElementId; import pp.monopoly.client.MonopolyApp; -import pp.monopoly.client.StartMenu; - +import pp.monopoly.client.NetworkSupport; +import pp.monopoly.notification.Sound; +import pp.monopoly.server.MonopolyServer; +import pp.dialog.Dialog; +import pp.dialog.DialogBuilder; /** - * CreateGameMenu class represents the menu for creating a new game. + * Represents a dialog for setting up a network connection in the Battleship game. + * Allows users to specify the host and port for connecting to a game server. */ -public class CreateGameMenu { - - private final MonopolyApp app; - private final Container menuContainer; - private Geometry background; - private Label serverStatusLabel; - - public CreateGameMenu(MonopolyApp app) { - this.app = app; - - // Hintergrundbild laden und hinzufügen - addBackgroundImage(); - - // Hauptcontainer für das Menü - menuContainer = new Container(new SpringGridLayout(Axis.Y, Axis.X)); - menuContainer.setPreferredSize(new Vector3f(600, 400, 0)); // Feste Größe des Containers - - // Titel - Label title = menuContainer.addChild(new Label("Neues Spiel", new ElementId("header"))); - title.setFont(app.getAssetManager().loadFont("Interface/Fonts/Metropolis/Metropolis-Bold-42.fnt")); - title.setFontSize(50); - - - // Eingabefelder-Container - Container inputContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.Y, Axis.X))); - inputContainer.setPreferredSize(new Vector3f(200, 150, 0)); // Eingabefelder nicht ganz so breit - inputContainer.setLocalTranslation(20, 0, 0); // Abstand vom Rand - - inputContainer.addChild(new Label("Server-Adresse:")); - TextField playerNameField = inputContainer.addChild(new TextField("localhost")); - playerNameField.setPreferredWidth(400); // Breite des Textfelds - - inputContainer.addChild(new Label("Port:")); - TextField serverAddressField = inputContainer.addChild(new TextField("42069")); - serverAddressField.setPreferredWidth(400); // Breite des Textfelds - - // Button-Container - Container buttonContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.X, Axis.Y))); - buttonContainer.setPreferredSize(new Vector3f(400, 50, 0)); - buttonContainer.setLocalTranslation(20, 0, 0); // Abstand vom Rand - - // "Abbrechen"-Button - Button cancelButton = buttonContainer.addChild(new Button("Abbrechen")); - cancelButton.setPreferredSize(new Vector3f(120, 40, 0)); - cancelButton.addClickCommands(source -> goBackToStartMenu()); - - // "Selber hosten"-Button - Button hostButton = buttonContainer.addChild(new Button("Selber hosten")); - hostButton.setPreferredSize(new Vector3f(120, 40, 0)); - hostButton.addClickCommands(source -> app.getNetworkSupport().startServerAndJoin()); - - // "Beitreten"-Button - Button joinButton = buttonContainer.addChild(new Button("Beitreten")); - joinButton.setPreferredSize(new Vector3f(120, 40, 0)); - joinButton.addClickCommands(source -> { - try { - String host = playerNameField.getText().trim(); - int port = Integer.parseInt(serverAddressField.getText().trim()); - app.getNetworkSupport().connectToServer(host, port); - - // LobbyMenu öffnen - app.enqueue(() -> { - app.getGuiNode().detachAllChildren(); // Bestehende GUI entfernen - new LobbyMenu(app); // LobbyMenu erstellen - }); - } catch (NumberFormatException e) { - app.errorDialog("Port muss eine Zahl sein."); - } - }); - - // Serverstatus-Label - serverStatusLabel = menuContainer.addChild(new Label("Serverstatus: Noch nicht gestartet")); - serverStatusLabel.setFontSize(24); - - // Zentrierung des Containers - menuContainer.setLocalTranslation( - (app.getCamera().getWidth() - menuContainer.getPreferredSize().x) / 2, - (app.getCamera().getHeight() + menuContainer.getPreferredSize().y) / 2, - 1 // Höhere Z-Ebene für den Vordergrund - ); - app.getInputManager().addMapping("OpenTestWorld", new com.jme3.input.controls.KeyTrigger(com.jme3.input.KeyInput.KEY_T)); - app.getInputManager().addListener(new com.jme3.input.controls.ActionListener() { - @Override - public void onAction(String name, boolean isPressed, float tpf) { - if (name.equals("OpenTestWorld") && isPressed) { - app.startTestWorld(); // Öffnet die TestWorld - } - } - }, "OpenTestWorld"); - - // TODO später entfernen - - app.getInputManager().addMapping("OpenBuyCard", new com.jme3.input.controls.KeyTrigger(com.jme3.input.KeyInput.KEY_B)); - app.getInputManager().addListener(new com.jme3.input.controls.ActionListener() { - @Override - public void onAction(String name, boolean isPressed, float tpf) { - if (name.equals("OpenBuyCard") && isPressed) { - app.startBuyCard(); // Öffnet die TestWorld - } - } - }, "OpenBuyCard"); - - app.getGuiNode().attachChild(menuContainer); - } +public class CreateGameMenu extends Dialog { + private static final Logger LOGGER = System.getLogger(CreateGameMenu.class.getName()); + private static final String LOCALHOST = "localhost"; //NON-NLS + private static final String DEFAULT_PORT = "42069"; //NON-NLS + private final NetworkSupport network; + private final TextField host = new TextField(LOCALHOST); + private final TextField port = new TextField(DEFAULT_PORT); + private final Button serverButton = new Button("Selber hosten"); + private final Button cancelButton = new Button("Abbrechen"); + private final Button joinButton = new Button("Beitreten"); + private String hostname; + private int portNumber; + private Future connectionFuture; + private Dialog progressDialog; /** - * Lädt das Hintergrundbild und fügt es als geometrische Ebene hinzu. + * Constructs a new CreateGameMenu. + * + * @param network The NetworkSupport instance to be used for network operations. */ - private void addBackgroundImage() { + public CreateGameMenu(NetworkSupport network) { + super(network.getApp().getDialogManager()); + this.network = network; + host.setSingleLine(true); + host.setPreferredWidth(400f); + port.setSingleLine(true); + + final MonopolyApp app = network.getApp(); + + int screenWidth = app.getContext().getSettings().getWidth(); + int screenHeight = app.getContext().getSettings().getHeight(); + + // Set up the background image Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/unibw-Bib2.png"); - Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight()); - background = new Geometry("Background", quad); + Quad quad = new Quad(screenWidth, screenHeight); + Geometry background = new Geometry("Background", quad); Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); backgroundMaterial.setTexture("ColorMap", backgroundImage); background.setMaterial(backgroundMaterial); - background.setLocalTranslation(0, 0, -1); // Hintergrundebene - + background.setLocalTranslation(0, 0, -1); // Ensure it is behind other GUI elements app.getGuiNode().attachChild(background); + + addChild(new Label("Spiel erstellen", new ElementId("header"))); //NON-NLS + final Container input = new Container(new SpringGridLayout()); + input.addChild(new Label(lookup("host.name") + ": ")); + input.addChild(host, 1); + input.addChild(new Label(lookup("port.number") + ": ")); + input.addChild(port, 1); + + addChild(input); + // "Abbrechen"-Button + cancelButton.setPreferredSize(new Vector3f(120, 40, 0)); + cancelButton.addClickCommands(s -> ifTopDialog(() -> { + app.getGameLogic().playSound(Sound.BUTTON); + this.close(); + new StartMenu(network.getApp()).open(); + })); + addChild(cancelButton); + + // "Selber hosten"-Button + serverButton.addClickCommands(s -> ifTopDialog( () -> { + network.getApp().getGameLogic().playSound(Sound.BUTTON); + startServerInThread(); + } )); + addChild(serverButton); + + // "Beitreten"-Button + joinButton.setPreferredSize(new Vector3f(120, 40, 0)); + joinButton.addClickCommands(s -> ifTopDialog( () -> { + app.getGameLogic().playSound(Sound.BUTTON); + connect(); + })); + addChild(joinButton); } /** - * Geht zum Startmenü zurück, wenn "Abbrechen" angeklickt wird. + * Handles the action for the connect button in the connection dialog. + * Tries to parse the port number and initiate connection to the server. */ - private void goBackToStartMenu() { - app.getGuiNode().detachChild(menuContainer); - app.getGuiNode().detachChild(background); // Entfernt das Hintergrundbild - StartMenu.createStartMenu(app); + private void connect() { + LOGGER.log(Level.INFO, "connect to host={0}, port={1}", host, port); //NON-NLS + try { + hostname = host.getText().trim().isEmpty() ? LOCALHOST : host.getText(); + portNumber = Integer.parseInt(port.getText()); + openProgressDialog(); + connectionFuture = network.getApp().getExecutor().submit(this::initNetwork); + } + catch (NumberFormatException e) { + network.getApp().errorDialog(lookup("port.must.be.integer")); + } + } + + /** + * Creates a dialog indicating that the connection is in progress. + */ + private void openProgressDialog() { + progressDialog = DialogBuilder.simple(network.getApp().getDialogManager()) + .setText(lookup("label.connecting")) + .build(); + progressDialog.open(); + } + + /** + * Tries to initialize the network connection. + * + * @throws RuntimeException If an error occurs when creating the client. + */ + private Object initNetwork() { + try { + network.initNetwork(hostname, portNumber); + return null; + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public void escape() { + new SettingsMenu(network.getApp()).open(); + } + + /** + * This method is called by {@linkplain pp.dialog.DialogManager#update(float)} for periodically + * updating this dialog. T + */ + @Override + public void update(float delta) { + if (connectionFuture != null && connectionFuture.isDone()) + try { + connectionFuture.get(); + success(); + } + catch (ExecutionException e) { + failure(e.getCause()); + } + catch (InterruptedException e) { + LOGGER.log(Level.WARNING, "Interrupted!", e); //NON-NLS + Thread.currentThread().interrupt(); + } + } + + /** + * Handles a successful connection to the game server. + */ + private void success() { + connectionFuture = null; + progressDialog.close(); + this.close(); + new LobbyMenu(network.getApp()).open(); + } + + /** + * Handles a failed connection attempt. + * + * @param e The cause of the failure. + */ + private void failure(Throwable e) { + connectionFuture = null; + progressDialog.close(); + network.getApp().errorDialog(lookup("server.connection.failed")); + network.getApp().setInfoText(e.getLocalizedMessage()); + } + + /** + * Starts the server in a separate thread. + */ + private void startServerInThread() { + serverButton.setEnabled(false); + Thread serverThread = new Thread(() -> { + try { + MonopolyServer.main(null); + } catch (Exception e) { + serverButton.setEnabled(true); + LOGGER.log(Level.ERROR, "Server could not be started", e); + network.getApp().errorDialog("Could not start server: " + e.getMessage()); + } + }); + serverThread.start(); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + connect(); } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/LobbyMenu.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/LobbyMenu.java index 30f8731..2368699 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/LobbyMenu.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/LobbyMenu.java @@ -22,17 +22,15 @@ import com.simsilica.lemur.component.SpringGridLayout; import com.simsilica.lemur.core.VersionedList; import com.simsilica.lemur.core.VersionedReference; import com.simsilica.lemur.style.ElementId; + +import pp.dialog.Dialog; import pp.monopoly.client.MonopolyApp; -import pp.monopoly.game.client.ClientGameLogic; -import pp.monopoly.game.server.Player; -import pp.monopoly.game.server.PlayerColor; -import pp.monopoly.game.server.PlayerHandler; -import pp.monopoly.model.Figure; -import pp.monopoly.model.Rotation; +import pp.monopoly.message.client.PlayerReady; +import pp.monopoly.notification.Sound; import java.util.Set; -public class LobbyMenu { +public class LobbyMenu extends Dialog { private final MonopolyApp app; private final Container menuContainer; @@ -48,12 +46,13 @@ public class LobbyMenu { private Selector figureDropdown; - public LobbyMenu(MonopolyApp app) { - this.app = app; - this.playerHandler = ClientGameLogic.getPlayerHandler(); // Initialize PlayerHandler + private TextField playerInputField = new TextField("Spieler 1"); + private TextField startingCapital = new TextField("15000"); + private String figure; - int playerID = app.getNetworkSupport().getId(); // Retrieve the player ID - assignPlayerColor(playerID); //set the Players Color + public LobbyMenu(MonopolyApp app) { + super(app.getDialogManager()); + this.app = app; app.getGuiNode().detachAllChildren(); // Entfernt das CreateGameMenu (inklusive Hintergrund) @@ -79,7 +78,7 @@ public class LobbyMenu { spacerBeforeInput.setPreferredSize(new Vector3f(20, 1, 0)); // Width of the spacer // Add an input field (TextField) - TextField startingCapital = horizontalContainer.addChild(new TextField("15 000")); + horizontalContainer.addChild(startingCapital); startingCapital.setPreferredWidth(100); // Set the width of the input field startingCapital.setPreferredSize(new Vector3f(150, 50, 0)); startingCapital.setInsets(new Insets3f(5, 10, 5, 10)); // Add padding around the text inside the field @@ -106,7 +105,6 @@ public class LobbyMenu { playerInputContainer.setBackground(null); - TextField playerInputField = new TextField("Spieler 1"); playerInputField.setPreferredSize(new Vector3f(100, 20, 0)); playerInputField.setInsets(new Insets3f(5, 10, 5, 10)); playerInputField.setBackground(new QuadBackgroundComponent(ColorRGBA.Black)); @@ -146,10 +144,13 @@ public class LobbyMenu { buttonContainer.setBackground(null); // Lower-left container for "Abbrechen" button lowerLeftMenu = new Container(); - Button cancelButton = new Button("Abbrechen"); + Button cancelButton = new Button("Beenden"); cancelButton.setPreferredSize(new Vector3f(200, 60, 0)); // Set size to match the appearance in the image cancelButton.setFontSize(18); // Adjust font size - cancelButton.addClickCommands(source -> goBackToCreateGame()); // Add functionality + cancelButton.addClickCommands(s -> ifTopDialog(() -> { + app.closeApp(); + app.getGameLogic().playSound(Sound.BUTTON); + })); lowerLeftMenu.addChild(cancelButton); // Position the container near the bottom-left corner @@ -162,9 +163,10 @@ public class LobbyMenu { readyButton.setPreferredSize(new Vector3f(200, 60, 0)); // Set size to match the appearance in the image readyButton.setFontSize(18); // Adjust font size readyButton.setBackground(new QuadBackgroundComponent(ColorRGBA.Green)); // Add color to match the style - readyButton.addClickCommands(source -> applyStartingCapital(playerID)); - readyButton.addClickCommands(source -> applyPlayerName(playerID)); - readyButton.addClickCommands(source -> applyFigure(playerID)); + readyButton.addClickCommands(s -> ifTopDialog(() -> { + toggleReady(); + app.getGameLogic().playSound(Sound.BUTTON); + })); lowerRightMenu.addChild(readyButton); //TODO aktivieren des Spielers in den ready Status und Sprung in den nächsten Menüzustand @@ -286,41 +288,13 @@ public class LobbyMenu { * * @param playerID the player's ID */ - private void assignPlayerColor(int playerID) { - switch (playerID) { - case 0: - playerColor = PlayerColor.RED.getColor(); - break; - case 1: - playerColor = PlayerColor.GREEN_LIGHT.getColor(); - break; - case 2: - playerColor = PlayerColor.BLUE.getColor(); - break; - case 3: - playerColor = PlayerColor.PINK.getColor(); - break; - case 4: - playerColor = PlayerColor.GREEN_DARK.getColor(); - break; - case 5: - playerColor = PlayerColor.YELLOW.getColor(); - break; - default: - playerColor = ColorRGBA.White; // Default color if ID is unknown - } + private void toggleReady() { + app.getGameLogic().send(new PlayerReady(true, playerInputField.getText(), figure, Integer.parseInt(startingCapital.getText()))); } - /** - * Geht zurück zum CreateGameMenu. - */ - private void goBackToCreateGame() { - app.getGuiNode().detachChild(menuContainer); - app.getGuiNode().detachChild(background); - app.getGuiNode().detachChild(circle); - app.getGuiNode().detachChild(lowerLeftMenu); - app.getGuiNode().detachChild(lowerRightMenu); - new CreateGameMenu(app); + @Override + public void escape() { + new SettingsMenu(app).open(); } /** @@ -364,27 +338,28 @@ public class LobbyMenu { */ private void onDropdownSelectionChanged(String selected) { System.out.println("Selected: " + selected); + app.getGameLogic().playSound(Sound.BUTTON); switch (selected) { case "[0]": - System.out.println("Laptop selected"); + figure = "Laptop"; break; case "[1]": - System.out.println("Flugzeug selected"); + figure = "Flugzeug"; break; case "[2]": - System.out.println("Jägermeister selected"); + figure = "Jägermeister"; break; case "[3]": - System.out.println("Katze selected"); + figure = "Katze"; break; case "[4]": - System.out.println("OOP selected"); + figure = "OOP"; break; case "[5]": - System.out.println("Handyholster selected"); + figure = "Handyholster"; break; default: - System.out.println("Unknown selection"); + break; } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java index 5fabf92..f0faeb5 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SettingsMenu.java @@ -1,123 +1,92 @@ +//////////////////////////////////////// +// Programming project code +// UniBw M, 2022, 2023, 2024 +// www.unibw.de/inf2 +// (c) Mark Minas (mark.minas@unibw.de) +//////////////////////////////////////// + package pp.monopoly.client.gui; -import com.jme3.material.Material; -import com.jme3.material.RenderState.BlendMode; -import com.jme3.math.ColorRGBA; -import com.jme3.math.Vector3f; -import com.jme3.scene.Geometry; -import com.jme3.scene.shape.Quad; +import java.util.prefs.Preferences; + import com.simsilica.lemur.Button; import com.simsilica.lemur.Checkbox; -import com.simsilica.lemur.Container; import com.simsilica.lemur.Label; -import com.simsilica.lemur.Slider; -import com.simsilica.lemur.component.QuadBackgroundComponent; import com.simsilica.lemur.style.ElementId; -import com.simsilica.lemur.ValueRenderer; -import com.simsilica.lemur.Selector; -import pp.dialog.Dialog; +import static pp.monopoly.Resources.lookup; +import pp.monopoly.client.GameMusic; +import pp.monopoly.client.GameSound; import pp.monopoly.client.MonopolyApp; +import pp.dialog.Dialog; +import pp.dialog.StateCheckboxModel; +import pp.monopoly.notification.Sound; + +import static pp.util.PreferencesUtils.getPreferences; /** - * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann. + * The Menu class represents the main menu in the Battleship game application. + * It extends the Dialog class and provides functionalities for loading, saving, + * returning to the game, and quitting the application. */ public class SettingsMenu extends Dialog { + private static final Preferences PREFERENCES = getPreferences(SettingsMenu.class); + private static final String LAST_PATH = "last.file.path"; private final MonopolyApp app; - private final Geometry overlayBackground; - private final Container settingsContainer; - private final Container backgroundContainer; + private final VolumeSlider musicSlider; + private final SoundSlider soundSlider; + /** + * Constructs the Menu dialog for the Battleship application. + * + * @param app the MonopolyApp instance + */ public SettingsMenu(MonopolyApp app) { super(app.getDialogManager()); this.app = app; + musicSlider = new VolumeSlider(app.getStateManager().getState(GameMusic.class)); + soundSlider = new SoundSlider(app.getStateManager().getState(GameSound.class)); + addChild(new Label("Einstellungen", new ElementId("settings-title"))); //NON-NLS + addChild(new Label("Sound Effekte", new ElementId("label"))); //NON-NLS - // Halbtransparentes Overlay hinzufügen - overlayBackground = createOverlayBackground(); - app.getGuiNode().attachChild(overlayBackground); + addChild(soundSlider); - // Create the background container - backgroundContainer = new Container(); - backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background - app.getGuiNode().attachChild(backgroundContainer); + addChild(new Checkbox("Soundeffekte an / aus", new StateCheckboxModel(app, GameSound.class))); + + addChild(new Label("Hintergrund Musik", new ElementId("label"))); //NON-NLS + addChild(new Checkbox("Musik an / aus", new StateCheckboxModel(app, GameMusic.class))); + + addChild(musicSlider); - // Hauptcontainer für das Menü - settingsContainer = new Container(); - settingsContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.1f, 0.1f, 0.1f, 0.9f))); - - - - // Titel - Label settingsTitle = settingsContainer.addChild(new Label("Einstellungen", new ElementId("settings-title"))); - settingsTitle.setFontSize(48); - - // Effekt-Sound: Slider und Checkbox - Container effectSoundContainer = settingsContainer.addChild(new Container()); - effectSoundContainer.addChild(new Label("Effekt Sound", new ElementId("label"))); - effectSoundContainer.addChild(new Slider()); - effectSoundContainer.addChild(new Checkbox("Soundeffekte an")).setChecked(true); - effectSoundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); - // Hintergrundmusik: Slider und Checkbox - Container backgroundMusicContainer = settingsContainer.addChild(new Container()); - backgroundMusicContainer.addChild(new Label("Hintergrund Musik", new ElementId("label"))); - backgroundMusicContainer.addChild(new Slider()); - backgroundMusicContainer.addChild(new Checkbox("Musik an")).setChecked(true); - backgroundMusicContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); - - // Beenden-Button - Button quitButton = settingsContainer.addChild(new Button("Beenden", new ElementId("menu-button"))); - quitButton.setFontSize(32); - quitButton.addClickCommands(source -> app.stop()); - - float padding = 10; // Padding around the settingsContainer for the background - backgroundContainer.setPreferredSize(settingsContainer.getPreferredSize().addLocal(padding, padding, 0)); - - - // Zentriere das Menü - settingsContainer.setLocalTranslation( - (app.getCamera().getWidth() - settingsContainer.getPreferredSize().x) / 2, - (app.getCamera().getHeight() + settingsContainer.getPreferredSize().y) / 2, - 4 - ); - - backgroundContainer.setLocalTranslation( - (app.getCamera().getWidth() - settingsContainer.getPreferredSize().x - padding) / 2, - (app.getCamera().getHeight() + settingsContainer.getPreferredSize().y+ padding) / 2, - 3 - ); - - app.getGuiNode().attachChild(settingsContainer); + addChild(new Button("Zurück zum Spiel", new ElementId("button"))).addClickCommands(s -> ifTopDialog(() -> { + this.close(); // Close the StartMenu dialog + app.getGameLogic().playSound(Sound.BUTTON); + })); + addChild(new Button("Beenden", new ElementId("button"))).addClickCommands(s -> ifTopDialog(() -> { + app.getGameLogic().playSound(Sound.BUTTON); + app.closeApp(); + })); + update(); } /** - * Erstellt einen halbtransparenten Hintergrund für das Menü. - * - * @return Geometrie des Overlays - */ - private Geometry createOverlayBackground() { - Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight()); - Geometry overlay = new Geometry("Overlay", quad); - Material material = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); - material.setColor("Color", new ColorRGBA(0, 0, 0, 0.5f)); // Halbtransparent - material.getAdditionalRenderState().setBlendMode(BlendMode.Alpha); - overlay.setMaterial(material); - overlay.setLocalTranslation(0, 0, 0); - return overlay; - } - - /** - * Schließt das Menü und entfernt die GUI-Elemente. + * Updates the state of the load and save buttons based on the game logic. */ @Override - public void close() { - System.out.println("Schließe SettingsMenu..."); // Debugging-Ausgabe - app.getGuiNode().detachChild(settingsContainer); // Entferne das Menü - app.getGuiNode().detachChild(backgroundContainer); //Entfernt Rand - app.getGuiNode().detachChild(overlayBackground); // Entferne das Overlay - app.setSettingsMenuOpen(false); // Menü als geschlossen markieren - app.unblockInputs(); // Eingaben wieder aktivieren - System.out.println("SettingsMenu geschlossen."); // Debugging-Ausgabe + public void update() { } + @Override + public void update(float delta) { + musicSlider.update(); + soundSlider.update(); + } + /** + * As an escape action, this method closes the menu if it is the top dialog. + */ + @Override + public void escape() { + close(); + } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java new file mode 100644 index 0000000..31c547e --- /dev/null +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/SoundSlider.java @@ -0,0 +1,31 @@ +package pp.monopoly.client.gui; + +import com.simsilica.lemur.Slider; +import pp.monopoly.client.GameSound; + +public class SoundSlider extends Slider { + + private final pp.monopoly.client.GameSound sound; + private double vol; + + /** + * Constructs the Volume Slider for the Menu dialog + * @param sound the Effects sound instance + */ + public SoundSlider(GameSound sound) { + super(); + this.sound = sound; + vol = GameSound.volumeInPreferences(); + getModel().setPercent(vol); + } + + /** + * when triggered it updates the volume to the value set with the slider + */ + public void update() { + if (vol != getModel().getPercent()) { + vol = getModel().getPercent(); + sound.setVolume( (float) vol); + } + } +} diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/StartMenu.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/StartMenu.java similarity index 63% rename from Projekte/monopoly/client/src/main/java/pp/monopoly/client/StartMenu.java rename to Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/StartMenu.java index 302bd55..8a9c532 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/StartMenu.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/StartMenu.java @@ -1,4 +1,4 @@ -package pp.monopoly.client; +package pp.monopoly.client.gui; import com.jme3.material.Material; import com.jme3.math.Vector3f; @@ -13,8 +13,8 @@ import com.simsilica.lemur.component.QuadBackgroundComponent; import com.simsilica.lemur.component.SpringGridLayout; import pp.dialog.Dialog; -import pp.monopoly.client.gui.CreateGameMenu; -import pp.monopoly.client.gui.SettingsMenu; +import pp.monopoly.client.MonopolyApp; +import pp.monopoly.notification.Sound; /** * Constructs the startup menu dialog for the Monopoly application. @@ -22,8 +22,6 @@ import pp.monopoly.client.gui.GameMenu; */ public class StartMenu extends Dialog { private final MonopolyApp app; - private Container logoContainer; - private Container unibwLogoContainer; /** * Constructs the Startup Menu dialog for the Monopoly application. @@ -33,13 +31,7 @@ public class StartMenu extends Dialog { public StartMenu(MonopolyApp app) { super(app.getDialogManager()); this.app = app; - } - - /** - * Creates and displays the Start Menu with buttons for starting the game, - * opening settings, and quitting the application. - */ - public static void createStartMenu(MonopolyApp app) { + int screenWidth = app.getContext().getSettings().getWidth(); int screenHeight = app.getContext().getSettings().getHeight(); @@ -53,9 +45,6 @@ public class StartMenu extends Dialog { background.setLocalTranslation(0, 0, -1); // Ensure it is behind other GUI elements app.getGuiNode().attachChild(background); - createMonopolyLogo(app); - createUnibwLogo(app); - // Center container for title and play button Container centerMenu = new Container(new SpringGridLayout(Axis.Y, Axis.X)); @@ -64,7 +53,11 @@ public class StartMenu extends Dialog { startButton.setFontSize(40); // Set the font size for the button text startButton.setTextHAlignment(HAlignment.Center); // Center the text horizontally - startButton.addClickCommands(source -> startGame(app)); + startButton.addClickCommands(s -> ifTopDialog(() -> { + this.close(); // Close the StartMenu dialog + app.connect(); // Perform the connection logic + app.getGameLogic().playSound(Sound.BUTTON); + })); centerMenu.addChild(startButton); // Position the center container in the middle of the screen @@ -73,34 +66,6 @@ public class StartMenu extends Dialog { 0)); app.getGuiNode().attachChild(centerMenu); - // Lower-left container for "Spiel beenden" button - Container lowerLeftMenu = new Container(); - lowerLeftMenu.setLocalTranslation(new Vector3f(100, 90, 0)); - Button quitButton = new Button("Spiel beenden"); - quitButton.setPreferredSize(new Vector3f(130, 40, 0)); // Increase button size slightly (width, height) - quitButton.setFontSize(18); - quitButton.addClickCommands(source -> quitGame()); - lowerLeftMenu.addChild(quitButton); - app.getGuiNode().attachChild(lowerLeftMenu); - - // Lower-right container for "Einstellungen" button - Container lowerRightMenu = new Container(); - lowerRightMenu.setLocalTranslation(new Vector3f(screenWidth - 200, 90, 0)); - Button settingsButton = new Button("Einstellungen"); - settingsButton.setPreferredSize(new Vector3f(130, 40, 0)); // Increase button size slightly (width, height) - settingsButton.setFontSize(18); // Increase the font size for the text - settingsButton.addClickCommands(source -> openSettings(app)); - lowerRightMenu.addChild(settingsButton); - app.getGuiNode().attachChild(lowerRightMenu); - } - - /** - * Creates and positions the Monopoly logo container in the center of the screen. - */ - private static void createMonopolyLogo(MonopolyApp app) { - int screenWidth = app.getContext().getSettings().getWidth(); - int screenHeight = app.getContext().getSettings().getHeight(); - // Load the Monopoly logo as a texture Texture logoTexture = app.getAssetManager().loadTexture("Pictures/logo-monopoly.png"); @@ -123,14 +88,6 @@ public class StartMenu extends Dialog { // Attach the container to the GUI node app.getGuiNode().attachChild(logoContainer); - } - - /** - * Creates and positions the Unibw logo container in the center of the screen. - */ - private static void createUnibwLogo(MonopolyApp app) { - int screenWidth = app.getContext().getSettings().getWidth(); - int screenHeight = app.getContext().getSettings().getHeight(); // Load the Unibw logo as a texture Texture unibwTexture = app.getAssetManager().loadTexture("Pictures/logo-unibw.png"); @@ -156,26 +113,14 @@ public class StartMenu extends Dialog { app.getGuiNode().attachChild(unibwContainer); } - /** - * Starts the game by transitioning to the CreateGameMenu. - */ - private static void startGame(MonopolyApp app) { - app.getGuiNode().detachAllChildren(); - new CreateGameMenu(app); + @Override + public void escape() { + new SettingsMenu(app).open(); } - /** - * Opens the settings menu. - */ - private static void openSettings(MonopolyApp app) { + @Override + public void close() { app.getGuiNode().detachAllChildren(); - new SettingsMenu(app); - } - - /** - * Quits the game application. - */ - private static void quitGame() { - System.exit(0); + super.close(); } } \ No newline at end of file diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java index bd49ccf..85c4e07 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java @@ -14,6 +14,7 @@ import com.simsilica.lemur.component.SpringGridLayout; import com.simsilica.lemur.style.ElementId; import pp.dialog.Dialog; import pp.monopoly.client.MonopolyApp; +import pp.monopoly.notification.Sound; /** * Toolbar Klasse, die am unteren Rand der Szene angezeigt wird. @@ -135,7 +136,10 @@ public class Toolbar extends Dialog { private Button addDiceRollButton() { Button diceButton = new Button("Würfeln"); diceButton.setPreferredSize(new Vector3f(50, 20, 0)); - diceButton.addClickCommands(source -> rollDice()); + diceButton.addClickCommands(s -> ifTopDialog(() -> { + rollDice(); + app.getGameLogic().playSound(Sound.BUTTON); + })); toolbarContainer.addChild(diceButton); return diceButton; } @@ -143,21 +147,30 @@ public class Toolbar extends Dialog { private void addTradeMenuButton() { Button diceButton = new Button("Handeln"); diceButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons - diceButton.addClickCommands(source -> rollDice()); + diceButton.addClickCommands(s -> ifTopDialog(() -> { + rollDice(); + app.getGameLogic().playSound(Sound.BUTTON); + })); toolbarContainer.addChild(diceButton); } private void addEndTurnButton() { Button diceButton = new Button("Grundstücke"); diceButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons - diceButton.addClickCommands(source -> rollDice()); + diceButton.addClickCommands(s -> ifTopDialog(() -> { + rollDice(); + app.getGameLogic().playSound(Sound.BUTTON); + })); toolbarContainer.addChild(diceButton); } private void addPropertyMenuButton() { Button diceButton = new Button("Zug beenden"); diceButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons - diceButton.addClickCommands(source -> rollDice()); + diceButton.addClickCommands(s -> ifTopDialog(() -> { + rollDice(); + app.getGameLogic().playSound(Sound.BUTTON); + })); toolbarContainer.addChild(diceButton); } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/VolumeSlider.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/VolumeSlider.java new file mode 100644 index 0000000..c0c8cc2 --- /dev/null +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/VolumeSlider.java @@ -0,0 +1,37 @@ +package pp.monopoly.client.gui; + +import com.simsilica.lemur.Slider; + +import pp.monopoly.client.GameMusic; +/** + * The VolumeSlider class represents the Volume Slider in the Menu. + * It extends the Slider class and provides functionalities for setting the music volume, + * with the help of the Slider in the GUI + */ +public class VolumeSlider extends Slider { + + private final pp.monopoly.client.GameMusic music; + private double vol; + + /** + * Constructs the Volume Slider for the Menu dialog + * @param music the music instance + */ + public VolumeSlider(GameMusic music) { + super(); + this.music = music; + vol = GameMusic.volumeInPreferences(); + getModel().setPercent(vol); + } + + /** + * when triggered it updates the volume to the value set with the slider + */ + public void update() { + if (vol != getModel().getPercent()) { + vol = getModel().getPercent(); + music.setVolume( (float) vol); + } + } + +} diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuildingPropertyCard.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuildingPropertyCard.java index 85426cd..39e948f 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuildingPropertyCard.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuildingPropertyCard.java @@ -30,7 +30,7 @@ public class BuildingPropertyCard extends Dialog { this.app = app; //Generate the corresponfing field - BuildingProperty field = (BuildingProperty) app.getBoardManager().getFieldAtIndex(index); + BuildingProperty field = (BuildingProperty) app.getGameLogic().getBoardManager().getFieldAtIndex(index); // Halbtransparentes Overlay hinzufügen overlayBackground = createOverlayBackground(); diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuyCard.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuyCard.java index 88a5dc1..bfae0f6 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuyCard.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/BuyCard.java @@ -5,7 +5,9 @@ import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.simsilica.lemur.*; +import com.simsilica.lemur.Button; +import com.simsilica.lemur.Container; +import com.simsilica.lemur.Label; import com.simsilica.lemur.component.QuadBackgroundComponent; import com.simsilica.lemur.style.ElementId; import pp.dialog.Dialog; @@ -119,4 +121,4 @@ public class BuyCard extends Dialog { app.unblockInputs(); // Eingaben wieder aktivieren System.out.println("SettingsMenu geschlossen."); // Debugging-Ausgabe } -} \ No newline at end of file +} diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/FoodFieldCard.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/FoodFieldCard.java index 05bf891..8b55a4d 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/FoodFieldCard.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/FoodFieldCard.java @@ -5,7 +5,6 @@ import com.jme3.material.RenderState.BlendMode; import com.jme3.math.ColorRGBA; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Quad; -import com.simsilica.lemur.Button; import com.simsilica.lemur.Container; import com.simsilica.lemur.Label; import com.simsilica.lemur.component.QuadBackgroundComponent; @@ -30,7 +29,7 @@ public class FoodFieldCard extends Dialog { this.app = app; //Generate the corresponfing field - FoodField field = (FoodField) app.getBoardManager().getFieldAtIndex(index); + FoodField field = (FoodField) app.getGameLogic().getBoardManager().getFieldAtIndex(index); // Halbtransparentes Overlay hinzufügen overlayBackground = createOverlayBackground(); diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/GateFieldCard.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/GateFieldCard.java index 373440b..a736662 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/GateFieldCard.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/GateFieldCard.java @@ -28,7 +28,7 @@ public class GateFieldCard extends Dialog { this.app = app; //Generate the corresponfing field - GateField field = (GateField) app.getBoardManager().getFieldAtIndex(index); + GateField field = (GateField) app.getGameLogic().getBoardManager().getFieldAtIndex(index); // Halbtransparentes Overlay hinzufügen overlayBackground = createOverlayBackground(); diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/LooserPopUp.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/LooserPopUp.java new file mode 100644 index 0000000..a24fb2a --- /dev/null +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/LooserPopUp.java @@ -0,0 +1,52 @@ +package pp.monopoly.client.gui.popups; + +import com.simsilica.lemur.Button; +import com.simsilica.lemur.Container; +import com.simsilica.lemur.Label; +import com.simsilica.lemur.component.IconComponent; + +import pp.dialog.Dialog; +import pp.monopoly.client.MonopolyApp; + +public class LooserPopUp extends Dialog { + + private final MonopolyApp app; + + /** + * Constructs a new NetworkDialog. + * + * @param network The NetworkSupport instance to be used for network operations. + */ + public LooserPopUp(MonopolyApp app) { + super(app.getDialogManager()); + this.app = app; + initializeDialog(); + } + + /** + * Initializes the dialog with input fields and connection buttons. + */ + private void initializeDialog() { + Container inputContainer = new Container(); + + // Titel und Eingabefelder für Host und Port + inputContainer.addChild(new Label("Schade, du hast leider verloren!")); + inputContainer.addChild(new Label("Die nächste Runde wird besser!")); + + Label imageLabel = new Label(""); + IconComponent icon = new IconComponent("Pictures/MonopolyLooser.png"); // Icon mit Textur erstellen + icon.setIconScale(1); // Skalierung des Bildes + imageLabel.setIcon(icon); + + // Setze das Icon im Label + inputContainer.addChild(imageLabel); + + Button cancelButton = inputContainer.addChild(new Button("Spiel beenden")); + cancelButton.addClickCommands(source -> ifTopDialog(app::closeApp)); + + inputContainer.setLocalTranslation(300, 800, 0); + app.getGuiNode().attachChild(inputContainer); + + } +} + diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/WinnerPopUp.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/WinnerPopUp.java index fb6f065..ffb4c09 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/WinnerPopUp.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/popups/WinnerPopUp.java @@ -1,8 +1,5 @@ package pp.monopoly.client.gui.popups; -import com.jme3.asset.TextureKey; -import com.jme3.math.Vector2f; -import com.jme3.texture.Texture; import com.simsilica.lemur.Button; import com.simsilica.lemur.Container; import com.simsilica.lemur.Label; @@ -37,20 +34,18 @@ public class WinnerPopUp extends Dialog { inputContainer.addChild(new Label("Du,bist der Monopoly Champion!!!")); Label imageLabel = new Label(""); - TextureKey key = new TextureKey("Pictures/MonopolyWinner.png", true); - Texture texture = app.getAssetManager().loadTexture(key); - IconComponent icon = new IconComponent(texture.toString()); // Icon mit Textur erstellen - icon.setIconSize(new Vector2f(150f, 100f)); // Skalierung des Bildes + IconComponent icon = new IconComponent("Pictures/MonopolyWinner.png"); // Icon mit Textur erstellen + icon.setIconScale(1); // Skalierung des Bildes imageLabel.setIcon(icon); // Setze das Icon im Label - inputContainer.addChild(imageLabel); Button cancelButton = inputContainer.addChild(new Button("Spiel beenden")); cancelButton.addClickCommands(source -> ifTopDialog(app::closeApp)); - inputContainer.setLocalTranslation(300, 500, 0); - attachChild(inputContainer); + + inputContainer.setLocalTranslation(300, 800, 0); + app.getGuiNode().attachChild(inputContainer); } } diff --git a/Projekte/monopoly/client/src/main/resources/Pictures/MonopolyLooser.png b/Projekte/monopoly/client/src/main/resources/Pictures/MonopolyLooser.png new file mode 100644 index 0000000000000000000000000000000000000000..2de2fa16c85f3364a2982e52e72da4bdcd1b5d3b GIT binary patch literal 266509 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

yD4~K73ZUa$#?Se{v7S*( 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� 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


%{=09!#zudc81=6beQu8WPmCM77GVmF#}mdG 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 LNkvXXu0mjfNeufs literal 0 HcmV?d00001 diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/MonopolyConfig.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/MonopolyConfig.java index 2fe9495..cbef5e0 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/MonopolyConfig.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/MonopolyConfig.java @@ -28,7 +28,7 @@ public class MonopolyConfig extends Config { * The default port number for the Monopoly server. */ @Property("port") - private int port = 4321; + private int port = 42069; /** * The width of the game map in terms of grid units. diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/client/ClientGameLogic.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/client/ClientGameLogic.java index 9459dca..4467043 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/client/ClientGameLogic.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/client/ClientGameLogic.java @@ -5,7 +5,7 @@ import java.lang.System.Logger.Level; import java.util.ArrayList; import java.util.List; -import pp.monopoly.game.server.PlayerHandler; +import pp.monopoly.game.server.Player; import pp.monopoly.message.client.ClientMessage; import pp.monopoly.message.server.BuyPropertyResponse; import pp.monopoly.message.server.DiceResult; @@ -22,6 +22,7 @@ import pp.monopoly.message.server.TradeRequest; import pp.monopoly.message.server.ViewAssetsResponse; import pp.monopoly.model.Board; import pp.monopoly.model.IntPoint; +import pp.monopoly.model.fields.BoardManager; import pp.monopoly.notification.ClientStateEvent; import pp.monopoly.notification.GameEvent; import pp.monopoly.notification.GameEventBroker; @@ -51,7 +52,9 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker { /** The current state of the client game logic. */ private ClientState state = new LobbyState(this); - private static PlayerHandler playerHandler; + private List players; + + private BoardManager boardManager = new BoardManager(); /** * Constructs a ClientGameLogic with the specified sender object. @@ -62,6 +65,14 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker { this.clientSender = clientSender; } + /** + * Reutns the BoardManager + * @return the boardManager + */ + public BoardManager getBoardManager() { + return boardManager; + } + /** * Returns the current state of the game logic. * @@ -83,8 +94,8 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker { state.entry(); } - public static PlayerHandler getPlayerHandler() { - return playerHandler; + public List getPlayers() { + return players; } /** @@ -128,11 +139,12 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker { * * @param msg the message to be sent */ - void send(ClientMessage msg) { + public void send(ClientMessage msg) { if (clientSender == null) { LOGGER.log(Level.ERROR, "trying to send {0} with sender==null", msg); //NON-NLS } else { clientSender.send(msg); + System.out.println("Message gesendet"); } } @@ -243,7 +255,7 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker { */ @Override public void received(GameStart msg) { - playerHandler = msg.getPlayerHandler(); + players = msg.getPlayers(); setInfoText("The game has started! Good luck!"); setState(new WaitForTurnState(this)); } diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/Player.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/Player.java index eddbe2a..8e41fda 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/Player.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/Player.java @@ -10,6 +10,8 @@ package pp.monopoly.game.server; import java.util.List; import java.util.Random; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.message.server.DiceResult; import pp.monopoly.model.FieldVisitor; import pp.monopoly.model.Figure; @@ -28,6 +30,7 @@ import pp.monopoly.model.fields.WacheField; /** * Class representing a player */ +@Serializable public class Player implements FieldVisitor{ private final int id; private String name; @@ -40,6 +43,14 @@ public class Player implements FieldVisitor{ private final PlayerHandler handler; private PlayerState state = new LobbyState(); + /** + * Default constructor for serialization purposes. + */ + private Player(){ + id = 0; + handler = null; + } + /** * Constructs a player with the speciefied params * @param id the id of the player diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/PlayerHandler.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/PlayerHandler.java index 285e707..aebe09c 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/PlayerHandler.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/PlayerHandler.java @@ -8,10 +8,13 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.Set; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.model.LimitedLinkedList; /** * A class for helping with player actions and managing thier turns */ +@Serializable public class PlayerHandler { private List players = new LimitedLinkedList<>(6); private Set readyPlayers = new HashSet<>(); @@ -19,6 +22,11 @@ public class PlayerHandler { private Player hostPlayer; private Player extra = null; + /** + * Default constructor for serialization purposes. + */ + private PlayerHandler() {} + /** * Contructs a PlayerHandler * @param logic the {@link ServerGameLogic} this PlayerHandler is a part of diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/ServerGameLogic.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/ServerGameLogic.java index 53555a5..a901fac 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/ServerGameLogic.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/game/server/ServerGameLogic.java @@ -204,7 +204,7 @@ public class ServerGameLogic implements ClientInterpreter { if(playerHandler.allPlayersReady()) { playerHandler.setStartBalance(startMoney); for (Player p : playerHandler.getPlayers()) { - send(p, new GameStart(playerHandler)); + send(p, new GameStart(playerHandler.getPlayers())); } playerHandler.randomOrder(); send(playerHandler.getPlayerAtIndex(0), new NextPlayerTurn(playerHandler.getPlayerAtIndex(0))); diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/BuyPropertyRequest.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/BuyPropertyRequest.java index 12a6bc9..6ecd9b3 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/BuyPropertyRequest.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/BuyPropertyRequest.java @@ -1,11 +1,19 @@ package pp.monopoly.message.client; +import com.jme3.network.serializing.Serializable; + /** * Represents a request from a player to buy a property. */ +@Serializable public class BuyPropertyRequest extends ClientMessage{ private int propertyId; + /** + * Default constructor for serialization purposes. + */ + private BuyPropertyRequest() { /* empty */ } + /** * Constructs a BuyPropertyRequest with the specified property ID. * diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/EndTurn.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/EndTurn.java index dae8120..f08e8cd 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/EndTurn.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/EndTurn.java @@ -1,9 +1,18 @@ package pp.monopoly.message.client; + +import com.jme3.network.serializing.Serializable; + /** * Represents a message indicating the player wants to end their turn. */ +@Serializable public class EndTurn extends ClientMessage{ + /** + * Default constructor for serialization purposes. + */ + public EndTurn() { /* empty */ } + @Override public void accept(ClientInterpreter interpreter, int from) { interpreter.received(this, from); diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/PlayerReady.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/PlayerReady.java index 42aa0d6..ee61d11 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/PlayerReady.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/PlayerReady.java @@ -1,13 +1,21 @@ package pp.monopoly.message.client; +import com.jme3.network.serializing.Serializable; + /** * Represents a message indicating the player is ready to play. */ +@Serializable public class PlayerReady extends ClientMessage { - private final boolean isReady; - private final String name; - private final String figure; - private final int startMoney; + private boolean isReady; + private String name; + private String figure; + private int startMoney; + + /** + * Default constructor for serialization purposes. + */ + private PlayerReady() { /* empty */ } /** * Constructs a PlayerReady message. diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/RollDice.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/RollDice.java index 9fb0b93..a4d5dfc 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/RollDice.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/RollDice.java @@ -1,9 +1,18 @@ package pp.monopoly.message.client; + +import com.jme3.network.serializing.Serializable; + /** * Represents a message requesting to roll the dice. */ +@Serializable public class RollDice extends ClientMessage{ + /** + * Default constructor for serialization purposes. + */ + private RollDice() { /* empty */ } + @Override public void accept(ClientInterpreter interpreter, int from) { interpreter.received(this, from); diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeOffer.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeOffer.java index b614365..edb885f 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeOffer.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeOffer.java @@ -1,14 +1,21 @@ package pp.monopoly.message.client; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.model.TradeHandler; /** * Represents a trade Request message from one player to another. */ +@Serializable public class TradeOffer extends ClientMessage{ private int receiverId; private TradeHandler tradehandler; + /** + * Default constructor for serialization purposes. + */ + private TradeOffer() { /* empty */ } /** * Constructs a TradeOffer with the specified details. diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeResponse.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeResponse.java index d317c6f..78d38f0 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeResponse.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/TradeResponse.java @@ -1,14 +1,22 @@ package pp.monopoly.message.client; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.model.TradeHandler; /** * Represents a response to a trade offer. */ +@Serializable public class TradeResponse extends ClientMessage{ private int initiatorId; private TradeHandler tradeHandler; + /** + * Default constructor for serialization purposes. + */ + private TradeResponse() { /* empty */ } + /** * Constructs a TradeResponse with the specified response details. * diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/ViewAssetsRequest.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/ViewAssetsRequest.java index afbdc79..11c26af 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/ViewAssetsRequest.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/client/ViewAssetsRequest.java @@ -1,13 +1,21 @@ package pp.monopoly.message.client; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.game.server.Player; /** * Represents a request from a player to view their assets. */ +@Serializable public class ViewAssetsRequest extends ClientMessage{ - private final Player player; + private Player player; + + /** + * Default constructor for serialization purposes. + */ + private ViewAssetsRequest() { /* empty */ } public ViewAssetsRequest(Player player) { this.player = player; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/BuyPropertyResponse.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/BuyPropertyResponse.java index e926317..39e1e24 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/BuyPropertyResponse.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/BuyPropertyResponse.java @@ -1,12 +1,20 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + /** * Represents the server's response to a player's request to buy a property. */ +@Serializable public class BuyPropertyResponse extends ServerMessage{ - private final boolean successful; - private final String propertyName; - private final String reason; // Reason for failure, if any + private boolean successful; + private String propertyName; + private String reason; // Reason for failure, if any + + /** + * Default constructor for serialization purposes. + */ + private BuyPropertyResponse() { /* empty */ } public BuyPropertyResponse(boolean successful, String propertyName, String reason) { this.successful = successful; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/DiceResult.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/DiceResult.java index 65a8223..4d63f91 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/DiceResult.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/DiceResult.java @@ -2,10 +2,18 @@ package pp.monopoly.message.server; import java.util.List; +import com.jme3.network.serializing.Serializable; + +@Serializable public class DiceResult extends ServerMessage{ private List rollResult; + /** + * Default constructor for serialization purposes. + */ + private DiceResult() { /* empty */ } + public DiceResult(List rollResult) { this.rollResult = rollResult; } diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/EventDrawCard.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/EventDrawCard.java index 968f2bb..929ac6e 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/EventDrawCard.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/EventDrawCard.java @@ -1,7 +1,15 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + +@Serializable public class EventDrawCard extends ServerMessage{ - private final String cardDescription; + private String cardDescription; + + /** + * Default constructor for serialization purposes. + */ + private EventDrawCard() { /* empty */ } public EventDrawCard(String cardDescription) { this.cardDescription = cardDescription; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameOver.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameOver.java index e91041e..91de2fc 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameOver.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameOver.java @@ -1,7 +1,15 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + +@Serializable public class GameOver extends ServerMessage{ - private final boolean isWinner; + private boolean isWinner; + + /** + * Default constructor for serialization purposes. + */ + private GameOver() { /* empty */ } public GameOver(boolean isWinner) { this.isWinner = isWinner; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameStart.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameStart.java index 17679e5..9dfab8d 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameStart.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/GameStart.java @@ -1,17 +1,27 @@ package pp.monopoly.message.server; -import pp.monopoly.game.server.PlayerHandler; +import java.util.List; +import com.jme3.network.serializing.Serializable; + +import pp.monopoly.game.server.Player; + +@Serializable public class GameStart extends ServerMessage{ - private final PlayerHandler ph; + private List players; - public GameStart(PlayerHandler ph) { - this.ph = ph; + /** + * Default constructor for serialization purposes. + */ + private GameStart() { /* empty */ } + + public GameStart(List players) { + this.players = players; } - public PlayerHandler getPlayerHandler() { - return ph; + public List getPlayers() { + return players; } @Override diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/JailEvent.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/JailEvent.java index 485a7fd..9996545 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/JailEvent.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/JailEvent.java @@ -1,8 +1,16 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + +@Serializable public class JailEvent extends ServerMessage{ - private final boolean goingToJail; + private boolean goingToJail; + + /** + * Default constructor for serialization purposes. + */ + private JailEvent() { /* empty */ } public JailEvent(boolean goingToJail) { this.goingToJail = goingToJail; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/NextPlayerTurn.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/NextPlayerTurn.java index f047f90..d0f5a18 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/NextPlayerTurn.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/NextPlayerTurn.java @@ -1,10 +1,18 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.game.server.Player; +@Serializable public class NextPlayerTurn extends ServerMessage{ - private final Player player; + private Player player; + + /** + * Default constructor for serialization purposes. + */ + private NextPlayerTurn() { /* empty */ } public NextPlayerTurn(Player player) { this.player = player; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/PlayerStatusUpdate.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/PlayerStatusUpdate.java index c876108..0a84661 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/PlayerStatusUpdate.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/PlayerStatusUpdate.java @@ -1,12 +1,20 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.game.server.PlayerColor; +@Serializable public class PlayerStatusUpdate extends ServerMessage{ - private final String playerName; - private final String status; - private final PlayerColor color; + private String playerName; + private String status; + private PlayerColor color; + + /** + * Default constructor for serialization purposes. + */ + private PlayerStatusUpdate() { /* empty */ } public PlayerStatusUpdate(String playerName, String status, PlayerColor color) { this.playerName = playerName; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TimeOutWarning.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TimeOutWarning.java index b862170..684ee2a 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TimeOutWarning.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TimeOutWarning.java @@ -1,8 +1,16 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + +@Serializable public class TimeOutWarning extends ServerMessage{ - private final int remainingTime; + private int remainingTime; + + /** + * Default constructor for serialization purposes. + */ + private TimeOutWarning() { /* empty */ } public TimeOutWarning(int remainingTime) { this.remainingTime = remainingTime; diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeReply.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeReply.java index 6535906..38ef4ec 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeReply.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeReply.java @@ -1,14 +1,22 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.model.TradeHandler; /** * Represents a response to a trade offer. */ +@Serializable public class TradeReply extends ServerMessage{ private int initiatorId; private TradeHandler tradeHandler; + /** + * Default constructor for serialization purposes. + */ + private TradeReply() { /* empty */ } + /** * Constructs a TradeResponse with the specified response details. * diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeRequest.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeRequest.java index 5320953..7afeb34 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeRequest.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/TradeRequest.java @@ -1,15 +1,23 @@ package pp.monopoly.message.server; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.model.TradeHandler; /** * Represents a trade Request message from one player to another. */ +@Serializable public class TradeRequest extends ServerMessage{ private int receiverId; private TradeHandler tradehandler; + /** + * Default constructor for serialization purposes. + */ + private TradeRequest() { /* empty */ } + /** * Constructs a TradeRequest with the specified details. * diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/ViewAssetsResponse.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/ViewAssetsResponse.java index be75108..5c944f4 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/ViewAssetsResponse.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/message/server/ViewAssetsResponse.java @@ -2,18 +2,26 @@ package pp.monopoly.message.server; import java.util.List; +import com.jme3.network.serializing.Serializable; + import pp.monopoly.model.fields.BoardManager; import pp.monopoly.model.fields.PropertyField; /** * Represents a response containing the player's assets. */ +@Serializable public class ViewAssetsResponse extends ServerMessage{ - private final List properties; - private final BoardManager board; - private final int accountBalance; - private final int jailCards; + private List properties; + private BoardManager board; + private int accountBalance; + private int jailCards; + + /** + * Default constructor for serialization purposes. + */ + private ViewAssetsResponse() { /* empty */ } /** * Constructs a ViewAssetsResponse with the specified properties and account balance. diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/model/Figure.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/model/Figure.java index 99e6ab9..9ac874b 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/model/Figure.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/model/Figure.java @@ -4,9 +4,12 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; +import com.jme3.network.serializing.Serializable; + import static java.lang.Math.max; import static java.lang.Math.min; +@Serializable public class Figure implements Item{ private final String type; private final int length; // The length of the Figure diff --git a/Projekte/monopoly/model/src/main/java/pp/monopoly/model/LimitedLinkedList.java b/Projekte/monopoly/model/src/main/java/pp/monopoly/model/LimitedLinkedList.java index 5a0285e..34990f6 100644 --- a/Projekte/monopoly/model/src/main/java/pp/monopoly/model/LimitedLinkedList.java +++ b/Projekte/monopoly/model/src/main/java/pp/monopoly/model/LimitedLinkedList.java @@ -2,14 +2,22 @@ package pp.monopoly.model; import java.util.LinkedList; +import com.jme3.network.serializing.Serializable; + /** * A LinkedList with a maximum size limit. * * @param the type of elements held in this collection */ +@Serializable public class LimitedLinkedList extends LinkedList { - private final int maxSize; + private int maxSize; + + /** + * Default constructor for serialization purposes. + */ + private LimitedLinkedList() {} /** * Constructs a LimitedLinkedList with the specified maximum size. diff --git a/Projekte/monopoly/server/src/main/java/pp/monopoly/server/MonopolyServer.java b/Projekte/monopoly/server/src/main/java/pp/monopoly/server/MonopolyServer.java index f4bfa7e..4c1b56d 100644 --- a/Projekte/monopoly/server/src/main/java/pp/monopoly/server/MonopolyServer.java +++ b/Projekte/monopoly/server/src/main/java/pp/monopoly/server/MonopolyServer.java @@ -26,11 +26,23 @@ import com.jme3.network.serializing.Serializer; import pp.monopoly.MonopolyConfig; import pp.monopoly.game.server.Player; +import pp.monopoly.game.server.PlayerHandler; import pp.monopoly.game.server.ServerGameLogic; import pp.monopoly.game.server.ServerSender; +import pp.monopoly.message.client.BuyPropertyRequest; import pp.monopoly.message.client.ClientMessage; +import pp.monopoly.message.client.EndTurn; +import pp.monopoly.message.client.PlayerReady; +import pp.monopoly.message.client.RollDice; +import pp.monopoly.message.client.TradeOffer; +import pp.monopoly.message.client.TradeResponse; +import pp.monopoly.message.client.ViewAssetsRequest; +import pp.monopoly.message.server.GameStart; +import pp.monopoly.message.server.NextPlayerTurn; import pp.monopoly.message.server.ServerMessage; +import pp.monopoly.model.Figure; import pp.monopoly.model.IntPoint; +import pp.monopoly.model.LimitedLinkedList; /** * Server implementing the visitor pattern as MessageReceiver for ClientMessages @@ -105,14 +117,35 @@ public class MonopolyServer implements MessageListener, Connec private void initializeSerializables() { Serializer.registerClass(IntPoint.class); + Serializer.registerClass(BuyPropertyRequest.class); + Serializer.registerClass(EndTurn.class); + Serializer.registerClass(PlayerReady.class); + Serializer.registerClass(RollDice.class); + Serializer.registerClass(TradeOffer.class); + Serializer.registerClass(TradeResponse.class); + Serializer.registerClass(ViewAssetsRequest.class); + Serializer.registerClass(GameStart.class); + Serializer.registerClass(LimitedLinkedList.class); + Serializer.registerClass(NextPlayerTurn.class); + Serializer.registerClass(Player.class); + Serializer.registerClass(Figure.class); + Serializer.registerClass(PlayerHandler.class); } private void registerListeners() { + myServer.addMessageListener(this, BuyPropertyRequest.class); + myServer.addMessageListener(this, EndTurn.class); + myServer.addMessageListener(this, PlayerReady.class); + myServer.addMessageListener(this, RollDice.class); + myServer.addMessageListener(this, TradeOffer.class); + myServer.addMessageListener(this, TradeResponse.class); + myServer.addMessageListener(this, ViewAssetsRequest.class); myServer.addConnectionListener(this); } @Override public void messageReceived(HostedConnection source, Message message) { + System.out.println("Message recieved"); LOGGER.log(Level.INFO, "message received from {0}: {1}", source.getId(), message); //NON-NLS if (message instanceof ClientMessage clientMessage) pendingMessages.add(new ReceivedMessage(clientMessage, source.getId()));