mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-29 06:40:00 +01:00
Merge branch 'gui' of https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02 into gui
This commit is contained in:
commit
379803278b
@ -1,5 +1,7 @@
|
|||||||
package pp.monopoly.client.gui;
|
package pp.monopoly.client.gui;
|
||||||
|
|
||||||
|
import com.jme3.app.Application;
|
||||||
|
import com.jme3.app.state.BaseAppState;
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
import com.jme3.math.ColorRGBA;
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
@ -7,63 +9,175 @@ import com.jme3.scene.Geometry;
|
|||||||
import com.jme3.scene.shape.Quad;
|
import com.jme3.scene.shape.Quad;
|
||||||
import com.jme3.texture.Texture;
|
import com.jme3.texture.Texture;
|
||||||
import com.simsilica.lemur.Axis;
|
import com.simsilica.lemur.Axis;
|
||||||
|
import com.simsilica.lemur.Button;
|
||||||
import com.simsilica.lemur.Container;
|
import com.simsilica.lemur.Container;
|
||||||
|
import com.simsilica.lemur.Insets3f;
|
||||||
import com.simsilica.lemur.Label;
|
import com.simsilica.lemur.Label;
|
||||||
|
import com.simsilica.lemur.Selector;
|
||||||
import com.simsilica.lemur.TextField;
|
import com.simsilica.lemur.TextField;
|
||||||
import com.simsilica.lemur.component.QuadBackgroundComponent;
|
import com.simsilica.lemur.component.QuadBackgroundComponent;
|
||||||
import com.simsilica.lemur.component.SpringGridLayout;
|
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 com.simsilica.lemur.style.ElementId;
|
||||||
import pp.dialog.Dialog;
|
import pp.dialog.Dialog;
|
||||||
import pp.monopoly.client.MonopolyApp;
|
import pp.monopoly.client.MonopolyApp;
|
||||||
|
import pp.monopoly.notification.Sound;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
public class ChoosePartner extends Dialog {
|
public class ChoosePartner extends Dialog {
|
||||||
|
|
||||||
private final MonopolyApp app;
|
private final MonopolyApp app;
|
||||||
private final Container menuContainer;
|
private Selector<String> playerSelector;
|
||||||
private Geometry background;
|
private final Button cancelButton = new Button("Abbrechen");
|
||||||
|
private final Button confirmButton = new Button("Bestätigen");
|
||||||
|
private final Container mainContainer;
|
||||||
|
private Container lowerLeftMenu;
|
||||||
|
private Container lowerRightMenu;
|
||||||
|
QuadBackgroundComponent translucentWhiteBackground =
|
||||||
|
new QuadBackgroundComponent(new ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs the ChoosePartner dialog.
|
||||||
|
*
|
||||||
|
* @param app The Monopoly application instance.
|
||||||
|
*/
|
||||||
public ChoosePartner(MonopolyApp app) {
|
public ChoosePartner(MonopolyApp app) {
|
||||||
super(app.getDialogManager());
|
super(app.getDialogManager());
|
||||||
this.app = app;
|
this.app = app;
|
||||||
|
|
||||||
// Hintergrundbild laden und hinzufügen
|
|
||||||
|
// Background Image
|
||||||
addBackgroundImage();
|
addBackgroundImage();
|
||||||
|
|
||||||
QuadBackgroundComponent translucentWhiteBackground =
|
// Main container for the UI components
|
||||||
new QuadBackgroundComponent(new ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f));
|
mainContainer = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
||||||
|
mainContainer.setPreferredSize(new Vector3f(1000, 600, 0));
|
||||||
|
mainContainer.setBackground(translucentWhiteBackground);
|
||||||
|
|
||||||
menuContainer = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
// Add title with background
|
||||||
menuContainer.setPreferredSize(new Vector3f(1000, 600, 0)); // Fixed size of the container
|
Label headerLabel = mainContainer.addChild(new Label("Wähle deinen Handelspartner:", new ElementId("header")));
|
||||||
menuContainer.setBackground(translucentWhiteBackground);
|
headerLabel.setFontSize(40);
|
||||||
|
headerLabel.setBackground(translucentWhiteBackground);
|
||||||
|
|
||||||
// Create a smaller horizontal container for the label, input field, and spacers
|
// Dropdown for player selection
|
||||||
Container horizontalContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.X, Axis.Y)));
|
mainContainer.addChild(createDropdown());
|
||||||
horizontalContainer.setPreferredSize(new Vector3f(600, 40, 0)); // Adjust container size
|
|
||||||
horizontalContainer.setBackground(null);
|
|
||||||
|
|
||||||
Label title = horizontalContainer.addChild(new Label("Wähle deinen Handelspartner:", new ElementId("label-Bold")));
|
// Add buttons
|
||||||
title.setFontSize(40);
|
mainContainer.addChild(createButtonContainer());
|
||||||
|
|
||||||
|
// Attach main container to GUI node
|
||||||
|
app.getGuiNode().attachChild(mainContainer);
|
||||||
|
mainContainer.setLocalTranslation(
|
||||||
|
(app.getCamera().getWidth() - mainContainer.getPreferredSize().x) / 2,
|
||||||
|
(app.getCamera().getHeight() + mainContainer.getPreferredSize().y) / 2,
|
||||||
|
0
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lädt das Hintergrundbild und fügt es als geometrische Ebene hinzu.
|
* Creates the dropdown menu for selecting a partner.
|
||||||
|
*
|
||||||
|
* @return The dropdown container.
|
||||||
|
*/
|
||||||
|
private Container createDropdown() {
|
||||||
|
Container dropdownContainer = new Container(new SpringGridLayout(Axis.Y, Axis.X));
|
||||||
|
dropdownContainer.setPreferredSize(new Vector3f(100, 80, 0));
|
||||||
|
dropdownContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black)));
|
||||||
|
|
||||||
|
VersionedList<String> playerOptions = new VersionedList<>();
|
||||||
|
playerOptions.add("Spieler 1");
|
||||||
|
playerOptions.add("Spieler 2");
|
||||||
|
playerOptions.add("Spieler 3");
|
||||||
|
playerOptions.add("Spieler 4");
|
||||||
|
|
||||||
|
playerSelector = new Selector<>(playerOptions, "glass");
|
||||||
|
dropdownContainer.addChild(playerSelector);
|
||||||
|
Vector3f dimens = dropdownContainer.getPreferredSize();
|
||||||
|
Vector3f dimens2 = playerSelector.getPopupContainer().getPreferredSize();
|
||||||
|
dimens2.setX( dimens.getX() );
|
||||||
|
playerSelector.getPopupContainer().setPreferredSize(new Vector3f(200,200,5));
|
||||||
|
|
||||||
|
return dropdownContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the button container with cancel and confirm buttons.
|
||||||
|
*
|
||||||
|
* @return The button container.
|
||||||
|
*/
|
||||||
|
private Container createButtonContainer() {
|
||||||
|
Container buttonContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y));
|
||||||
|
buttonContainer.setBackground(translucentWhiteBackground);
|
||||||
|
|
||||||
|
// "Abbrechen" button
|
||||||
|
lowerLeftMenu = new Container();
|
||||||
|
cancelButton.setPreferredSize(new Vector3f(200, 60, 0));
|
||||||
|
cancelButton.setFontSize(30);
|
||||||
|
cancelButton.addClickCommands(s -> ifTopDialog(() -> {
|
||||||
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
|
this.close();
|
||||||
|
new Toolbar(app).open();
|
||||||
|
}));
|
||||||
|
lowerLeftMenu.addChild(cancelButton);
|
||||||
|
|
||||||
|
// Position the container near the bottom-left corner
|
||||||
|
lowerLeftMenu.setLocalTranslation(new Vector3f(120, 170, 3)); // Adjust X and Y to align with the bottom-left corner
|
||||||
|
app.getGuiNode().attachChild(lowerLeftMenu);
|
||||||
|
|
||||||
|
|
||||||
|
// "Bestätigen" button
|
||||||
|
lowerRightMenu = new Container();
|
||||||
|
confirmButton.setPreferredSize(new Vector3f(200, 60, 0));
|
||||||
|
confirmButton.setFontSize(30);
|
||||||
|
confirmButton.addClickCommands(s -> ifTopDialog(() -> {
|
||||||
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
|
String selectedPlayer = playerSelector.getSelectedItem();
|
||||||
|
System.out.println("Selected player: " + selectedPlayer);
|
||||||
|
this.close();
|
||||||
|
// TODO: Open trade menu or next step
|
||||||
|
}));
|
||||||
|
lowerRightMenu.addChild(confirmButton);
|
||||||
|
|
||||||
|
// Position the container near the bottom-right corner
|
||||||
|
lowerRightMenu.setLocalTranslation(new Vector3f(app.getCamera().getWidth() - 320, 170, 3)); // X: 220px from the right, Y: 50px above the bottom
|
||||||
|
app.getGuiNode().attachChild(lowerRightMenu);
|
||||||
|
|
||||||
|
|
||||||
|
return buttonContainer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a background image to the dialog.
|
||||||
*/
|
*/
|
||||||
private void addBackgroundImage() {
|
private void addBackgroundImage() {
|
||||||
Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/unibw-Bib2.png");
|
Texture backgroundImage = app.getAssetManager().loadTexture("Pictures/unibw-Bib2.png");
|
||||||
Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight());
|
Quad quad = new Quad(app.getCamera().getWidth(), app.getCamera().getHeight());
|
||||||
background = new Geometry("Background", quad);
|
Geometry background = new Geometry("Background", quad);
|
||||||
Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
Material backgroundMaterial = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
||||||
backgroundMaterial.setTexture("ColorMap", backgroundImage);
|
backgroundMaterial.setTexture("ColorMap", backgroundImage);
|
||||||
background.setMaterial(backgroundMaterial);
|
background.setMaterial(backgroundMaterial);
|
||||||
background.setLocalTranslation(0, 0, -1); // Hintergrundebene
|
background.setLocalTranslation(0, 0, -1); // Position behind other GUI elements
|
||||||
|
|
||||||
app.getGuiNode().attachChild(background);
|
app.getGuiNode().attachChild(background);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles the escape action for the dialog.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void escape() {
|
public void escape() {
|
||||||
new SettingsMenu(app).open();
|
new SettingsMenu(app).open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the dialog periodically, called by the dialog manager.
|
||||||
|
*
|
||||||
|
* @param delta The time elapsed since the last update.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void update(float delta) {
|
||||||
|
// Periodic updates (if needed) can be implemented here
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ public class LobbyMenu extends Dialog {
|
|||||||
|
|
||||||
// Dropdowns and Labels
|
// Dropdowns and Labels
|
||||||
Container dropdownContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.X, Axis.Y)));
|
Container dropdownContainer = menuContainer.addChild(new Container(new SpringGridLayout(Axis.X, Axis.Y)));
|
||||||
|
dropdownContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(ColorRGBA.Black)));
|
||||||
dropdownContainer.setPreferredSize(new Vector3f(800, 200, 0));
|
dropdownContainer.setPreferredSize(new Vector3f(800, 200, 0));
|
||||||
dropdownContainer.setBackground(null);
|
dropdownContainer.setBackground(null);
|
||||||
dropdownContainer.setInsets(new Insets3f(10, 0, 0, 0));
|
dropdownContainer.setInsets(new Insets3f(10, 0, 0, 0));
|
||||||
@ -122,6 +123,11 @@ public class LobbyMenu extends Dialog {
|
|||||||
figureDropdown.setBackground(new QuadBackgroundComponent(ColorRGBA.DarkGray));
|
figureDropdown.setBackground(new QuadBackgroundComponent(ColorRGBA.DarkGray));
|
||||||
figureDropdown.setPreferredSize(new Vector3f(100, 20, 0));
|
figureDropdown.setPreferredSize(new Vector3f(100, 20, 0));
|
||||||
figureDropdownContainer.addChild(figureDropdown);
|
figureDropdownContainer.addChild(figureDropdown);
|
||||||
|
Vector3f dimens = dropdownContainer.getPreferredSize();
|
||||||
|
Vector3f dimens2 = figureDropdown.getPopupContainer().getPreferredSize();
|
||||||
|
dimens2.setX( dimens.getX() );
|
||||||
|
figureDropdown.getPopupContainer().setPreferredSize(new Vector3f(200,200,5));
|
||||||
|
|
||||||
|
|
||||||
addSelectionActionListener(figureDropdown, this::onDropdownSelectionChanged);
|
addSelectionActionListener(figureDropdown, this::onDropdownSelectionChanged);
|
||||||
|
|
||||||
|
@ -172,26 +172,27 @@ public class Toolbar extends Dialog {
|
|||||||
return tradebutton;
|
return tradebutton;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Button addEndTurnButton() {
|
|
||||||
Button endTurnButton = new Button("Grundstücke");
|
|
||||||
endTurnButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons
|
|
||||||
endTurnButton.addClickCommands(s -> ifTopDialog(() -> {
|
|
||||||
app.getGameLogic().playSound(Sound.BUTTON);
|
|
||||||
//TODO open property dialog
|
|
||||||
}));
|
|
||||||
return endTurnButton;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Button addPropertyMenuButton() {
|
private Button addPropertyMenuButton() {
|
||||||
Button propertyMenuButton = new Button("Zug beenden");
|
Button propertyMenuButton = new Button("Grundstücke");
|
||||||
|
propertyMenuButton.setFontSize(30.0f);
|
||||||
propertyMenuButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons
|
propertyMenuButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons
|
||||||
propertyMenuButton.addClickCommands(s -> ifTopDialog(() -> {
|
propertyMenuButton.addClickCommands(s -> ifTopDialog(() -> {
|
||||||
app.getGameLogic().playSound(Sound.BUTTON);
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
//TODO send end turn
|
//TODO open property dialog
|
||||||
}));
|
}));
|
||||||
return propertyMenuButton;
|
return propertyMenuButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Button addEndTurnButton() {
|
||||||
|
Button endTurnButton = new Button("Zug beenden");
|
||||||
|
endTurnButton.setPreferredSize(new Vector3f(150, 50, 0)); // Größe des Buttons
|
||||||
|
endTurnButton.addClickCommands(s -> ifTopDialog(() -> {
|
||||||
|
app.getGameLogic().playSound(Sound.BUTTON);
|
||||||
|
//TODO send end turn
|
||||||
|
}));
|
||||||
|
return endTurnButton;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erstellt die Anzeige für die aktuelle Position.
|
* Erstellt die Anzeige für die aktuelle Position.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user