From c31f924d77af3bf9e562e61494851fcc8014ebbc Mon Sep 17 00:00:00 2001 From: Luca Puderbach Date: Fri, 15 Nov 2024 06:25:21 +0100 Subject: [PATCH] =?UTF-8?q?CreateGame=20fertig=20f=C3=BCr=20feinschliff=20?= =?UTF-8?q?(Icon=20test)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/pp/monopoly/client/MonopolyApp.java | 7 +- .../monopoly/client/gui/CreateGameMenu.java | 124 +++++++++++------- .../client/src/main/resources/icons/test.ico | Bin 0 -> 4286 bytes 3 files changed, 84 insertions(+), 47 deletions(-) create mode 100644 Projekte/monopoly/client/src/main/resources/icons/test.ico 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 ac40396..5897a6b 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 @@ -81,11 +81,11 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga GuiGlobals.initialize(this); BaseStyles.loadGlassStyle(); GuiGlobals.getInstance().getStyles().setDefaultStyle("glass"); - + setupInput(); setupGui(); - - // Erst jetzt StartMenu erstellen, nachdem GuiGlobals initialisiert ist + + // Initialisiere das Startmenü StartMenu.createStartMenu(this); } @@ -102,6 +102,7 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga inputManager.addMapping("ESC", new KeyTrigger(KeyInput.KEY_ESCAPE)); inputManager.addListener(escapeListener, "ESC"); } + private void handleEscape(boolean isPressed) { if (isPressed) { 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 96bd73a..bdfe782 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,70 +1,106 @@ package pp.monopoly.client.gui; +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.Insets3f; import com.simsilica.lemur.Label; import com.simsilica.lemur.TextField; import com.simsilica.lemur.component.SpringGridLayout; -import com.simsilica.lemur.style.ElementId; import pp.monopoly.client.MonopolyApp; +import pp.monopoly.client.StartMenu; +/** + * CreateGameMenu class represents the menu for creating a new game. + */ public class CreateGameMenu { private final MonopolyApp app; - private final Container createGameContainer; + private final Container menuContainer; + private Geometry background; public CreateGameMenu(MonopolyApp app) { this.app = app; - - // Hauptcontainer für das Menü mit Innenabstand - createGameContainer = new Container(); - createGameContainer.setInsets(new Insets3f(10, 10, 10, 10)); - - // Setzt den Titel des Menüs - Label title = createGameContainer.addChild(new Label("Neues Spiel", new ElementId("title"))); - - // Fügt zwei Eingabefelder unter dem Titel hinzu - TextField inputField1 = createGameContainer.addChild(new TextField("Host")); - TextField inputField2 = createGameContainer.addChild(new TextField("Port")); - - // Erstellt einen Container mit einem Rasterlayout, um die Buttons nebeneinander anzuordnen - Container buttonContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y)); - buttonContainer.setInsets(new Insets3f(5, 5, 5, 5)); // Abstand zwischen den Buttons und dem Rand - - // Buttons hinzufügen und jeweils einen Innenabstand hinzufügen - Button button1 = buttonContainer.addChild(new Button("1")); - button1.setInsets(new Insets3f(5, 5, 5, 5)); - - Button button2 = buttonContainer.addChild(new Button("2")); - button2.setInsets(new Insets3f(5, 5, 5, 5)); - - Button button3 = buttonContainer.addChild(new Button("3")); - button3.setInsets(new Insets3f(5, 5, 5, 5)); - - // Fügt den Button-Container zum Hauptcontainer hinzu - createGameContainer.addChild(buttonContainer); - - // Setzt die Breite des Hauptcontainers - createGameContainer.setPreferredSize(new Vector3f(600, 400, 0)); - // Zentriert den Container auf dem Bildschirm - createGameContainer.setLocalTranslation( - (app.getCamera().getWidth() - createGameContainer.getPreferredSize().x) / 2, - (app.getCamera().getHeight() + createGameContainer.getPreferredSize().y) / 2, - 0 + // 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")); + title.setFontSize(48); + + // 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()); + + // "Spiel hosten"-Button + Button hostButton = buttonContainer.addChild(new Button("Spiel hosten")); + hostButton.setPreferredSize(new Vector3f(120, 40, 0)); + // hostButton.addClickCommands(source -> hostGame()); // Placeholder for hosting logic + + // "Beitreten"-Button + Button joinButton = buttonContainer.addChild(new Button("Beitreten")); + joinButton.setPreferredSize(new Vector3f(120, 40, 0)); + // joinButton.addClickCommands(source -> joinGame()); // Placeholder for joining logic + + // 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 ); - // Fügt das Menü zum GUI-Knoten der App hinzu - app.getGuiNode().attachChild(createGameContainer); + app.getGuiNode().attachChild(menuContainer); } /** - * Schließt das CreateGameMenu. + * Lädt das Hintergrundbild und fügt es als geometrische Ebene hinzu. */ - public void close() { - app.getGuiNode().detachChild(createGameContainer); + private void addBackgroundImage() { + Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/unibw-Bib2.png"); + Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight()); + 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 + + app.getGuiNode().attachChild(background); + } + + /** + * Geht zum Startmenü zurück, wenn "Abbrechen" angeklickt wird. + */ + private void goBackToStartMenu() { + app.getGuiNode().detachChild(menuContainer); + app.getGuiNode().detachChild(background); // Entfernt das Hintergrundbild + StartMenu.createStartMenu(app); } } diff --git a/Projekte/monopoly/client/src/main/resources/icons/test.ico b/Projekte/monopoly/client/src/main/resources/icons/test.ico new file mode 100644 index 0000000000000000000000000000000000000000..0203f61cc3f255562e3172fb6459d7d3f1665503 GIT binary patch literal 4286 zcmbtXX;53&8CBADQg=GjX4=V*W*mbd0wj!NArK%T2}#IWScE``eTe}}EM}1rvOpFf z_I)v61I7k{**CLq#ttNLZ6`R1oAgI!l4)kzbUK~JowRkcaC)W0nNB+icycx8UA_12 z`_5gyd%o{dD9@0eiwnhZrHuWOLV1Bgp?DIIM-(A}Q0s>yW>k55txL=XTEF+?{hMxL<(my=-K@or&Z(lm8L39dqaG^jSw=esB?&i|vu^ zkw_j)M$U8&&MlpTWy=EFt_?N6twHUZwXi*~!TOFB#&?Z4{q|{uy%h%YU32&kCMO0$ zt3o?8y&C8z^e`=%P_bEox>xJadZ!hgZ+4>dK_}YZX-CV$7Sukhh2d=j)OXc5zkFUy zKL0s^W0imPP3^dUj^J5>Llweraq#OVbSPOYfpx=*np-t!dc6tl_uA3^Ry$hvTG9NV z88r`TP;|ctn%6Xtx5z&cb_gGdu8JNDM}?pBC;0yk8V`EpH{$m(vyXX?(Z(1GYzY({ z)Cpm^@N`sn6wG?+P9b-n*GZ%xH)flL^)Ck`WhwPRN{F{9E%=&i$V;nCp%b|*XHF#N1aR)=ath2q^} z)Zed1-R(NG?-JjCqaF5#cJ#i}iNLxP4p*?Lvq~MG#&W zB4{WGj7to-mAfIJIl%oe{K2ikeEEeIb9+%n=<} z)1hds2&PRF%s0&_UM)t>LJkt_36R!HLC>XwUP(vDcnDO>D#UKYLba|!>fKbt?ZiPk zCk3;aiKD4UZy#ptPuhsb#jWZ^HFTRg7;hU|k(Kr_&$yqdhg z8R9@NC_tz^6!IB4lsA-+OiIA%;(%_V!>iD%{E6+u)PgC2C$aNY%0h~BpPP5gFm4&4 zpVlLJI2q~zH3Zdyx2PFZSGO{^eP%Bc+#xPRBO-{#$l4DI5zrF=hLr(oDs`V4Pj!Uk zrz-MA`J`r9gUp+m$X&^G?t`p}ENF+dkakMJtK`Kv3?8pMzT?yDgTV1X2&aSy86&#a z&4Yh~KWL?7{Zm};Jr(gcjg=e9<6^t`Gg+Gq%1cVbPQ@a5F&S~gaR{^q-h5)y#p)7E zYo@_(*blr}9)c%=!Rz6HS<8fHfhSzzT~eO3eVSTQCpjglm;6m}QGwX8SY&QzqTqK0 zDEe~|N9IF_QtqErT=eSA0|f(+h|PgQUSE=x6jO*(!nUt_{`iR-^1aq5*q4 zByJ{-1XTv5QM0N4@+|WFS_Ar+@Spbwdz}r&GUF@$GXIss_QCL)p+0>!eP42s#GrmP z5(g9E$ivP|o@7{em8ulO)fy6TiO_hxmbbX#2HLb*Z3eRY2A*gRo186U`^UXk>s< z#lXqhlkjcz1*?MvdIKHD&Bx(Vqg&wzKiH$00youHM_KsVCiQQ!e;A@y?~ zgOBS$;}56}xWKdVAhL-dYm_1KVx-gmGDb3>8`U}W&#@-2%)NrRu{cCcML|9#2kA3t zxioOAxCreC1;2w2Rx=A;^|;^C=tD)10;+Bm;``%~Hj;+y zaguvX6ryyY6ozSX4j?&s!BPP-r!%1)BWp3Og1A=fdz8?hP!ZV_ zDGqB4(~(@@kB&7D8w`VLR0a8<9Q-am{A>L`U{|v9UG=U$-!<;