Compare commits

..

No commits in common. "ecf227daa666aadfde160731a85cf1a335f0fe52" and "1438ae5e4ff0d283b2a7491b3184dfc5527e3e7f" have entirely different histories.

18 changed files with 166 additions and 235 deletions

View File

@ -262,16 +262,6 @@ selector("settings-title", "pp") {
textHAlignment = HAlignment.Center textHAlignment = HAlignment.Center
textVAlignment = VAlignment.Center textVAlignment = VAlignment.Center
} }
selector("warning-title", "pp") {
def outerBackground = new QuadBackgroundComponent(color(1, 0.5, 0, 1)) // Grey inner border
def innerBackground = new QuadBackgroundComponent(buttonBgColor) // White outer border background
font = font("Interface/Fonts/Metropolis/Metropolis-Bold-42.fnt")
background = outerBackground
fontSize = 40
insets = new Insets3f(3, 3, 3, 3)
textHAlignment = HAlignment.Center
textVAlignment = VAlignment.Center
}
selector("menu-button", "pp") { selector("menu-button", "pp") {
fontSize = 40 // Set font size fontSize = 40 // Set font size

View File

@ -124,7 +124,7 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga
private final ActionListener escapeListener = (name, isPressed, tpf) -> escape(isPressed); private final ActionListener escapeListener = (name, isPressed, tpf) -> escape(isPressed);
//TODO temp for testing //TODO temp for testing
private EventCardPopup eventCard; private EventCard eventCard;
private BuildingPropertyCard buildingProperty; private BuildingPropertyCard buildingProperty;
private FoodFieldCard foodField; private FoodFieldCard foodField;
private GateFieldCard gateField; private GateFieldCard gateField;
@ -274,7 +274,7 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga
//logik zum wechselnden erscheinen und verschwinden beim drücken von B //TODO süäter entfernen //logik zum wechselnden erscheinen und verschwinden beim drücken von B //TODO süäter entfernen
private void handleB(boolean isPressed) { private void handleB(boolean isPressed) {
if (isPressed) { if (isPressed) {
Dialog tmp = new TimeOut(this); Dialog tmp = new Bankrupt(this);
tmp.open(); tmp.open();
} }
} }

View File

@ -24,7 +24,6 @@ public class BuildingAdminMenu extends Dialog {
private final Button takeMortgageButton = new Button("Hypothek aufnehmen"); private final Button takeMortgageButton = new Button("Hypothek aufnehmen");
private final Button payMortgageButton = new Button("Hypothek bezahlen"); private final Button payMortgageButton = new Button("Hypothek bezahlen");
private final Button overviewButton = new Button("Übersicht"); private final Button overviewButton = new Button("Übersicht");
private Geometry background;
public BuildingAdminMenu(MonopolyApp app) { public BuildingAdminMenu(MonopolyApp app) {
super(app.getDialogManager()); super(app.getDialogManager());
@ -43,7 +42,7 @@ public class BuildingAdminMenu extends Dialog {
// Add content // Add content
mainContainer.addChild(createContent()); mainContainer.addChild(createContent());
// Attach main container to GUI node // Attach main container to GUI node
attachChild(mainContainer); app.getGuiNode().attachChild(mainContainer);
mainContainer.setLocalTranslation( mainContainer.setLocalTranslation(
(app.getCamera().getWidth() - mainContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - mainContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + mainContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + mainContainer.getPreferredSize().y) / 2,
@ -147,23 +146,29 @@ public class BuildingAdminMenu extends 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, 6); // Position behind other GUI elements background.setLocalTranslation(0, 0, 6); // Position behind other GUI elements
attachChild(background); app.getGuiNode().attachChild(background);
}
/**
* Handles the "Zurück" action.
*/
private void handleBack() {
app.getGameLogic().playSound(Sound.BUTTON);
close();
} }
@Override @Override
public void escape() { public void escape() {
new SettingsMenu(app).open(); handleBack();
} }
@Override @Override
public void close() { public void update(float delta) {
detachChild(background); // Periodic updates if necessary
detachChild(mainContainer);
super.close();
} }
} }

View File

@ -93,7 +93,7 @@ public class PropertyOverviewMenu extends Dialog {
*/ */
private void populatePlayerProperties() { private void populatePlayerProperties() {
// Fetch the current player // Fetch the current player
Player currentPlayer = app.getGameLogic().getPlayerHandler().getPlayerById(app.getId()); Player currentPlayer = app.getGameLogic().getPlayerHandler().getPlayers().get(0);
// Iterate through the player's properties // Iterate through the player's properties
for (PropertyField property : currentPlayer.getPropertyFields()) { for (PropertyField property : currentPlayer.getPropertyFields()) {

View File

@ -4,7 +4,7 @@ import java.util.List;
import pp.monopoly.client.MonopolyApp; import pp.monopoly.client.MonopolyApp;
import pp.monopoly.client.gui.popups.BuyCard; import pp.monopoly.client.gui.popups.BuyCard;
import pp.monopoly.client.gui.popups.EventCardPopup; import pp.monopoly.client.gui.popups.EventCard;
import pp.monopoly.client.gui.popups.FoodFieldCard; import pp.monopoly.client.gui.popups.FoodFieldCard;
import pp.monopoly.client.gui.popups.GateFieldCard; import pp.monopoly.client.gui.popups.GateFieldCard;
import pp.monopoly.client.gui.popups.LooserPopUp; import pp.monopoly.client.gui.popups.LooserPopUp;
@ -98,17 +98,12 @@ public class TestWorld implements GameEventListener{
Player player = players.get(i); Player player = players.get(i);
try { try {
// Lade das 3D-Modell der Spielfigur // Lade das 3D-Modell der Spielfigur
com.jme3.scene.Spatial model = app.getAssetManager().loadModel("Models/" + player.getFigure().getType() + "/" + player.getFigure().getType() + ".j3o"); com.jme3.scene.Spatial model = app.getAssetManager().loadModel("Models/" + player.getFigure().getType() + ".j3O");
model.setLocalScale(0.5f); // Skaliere das Modell model.setLocalScale(0.5f); // Skaliere das Modell
model.setLocalTranslation(0, 0, -i * 2); // Positioniere die Figur auf dem Startfeld
// Positioniere die Figur unten rechts
float startX = 9.1f; // X-Koordinate für die Ecke unten rechts
float startZ = -9.1f; // Z-Koordinate für die Ecke unten rechts
float spacing = 0.4f; // Abstand zwischen den Figuren
model.setLocalTranslation(startX, 0, startZ - (i * spacing)); // Position anpassen
app.getRootNode().attachChild(model); app.getRootNode().attachChild(model);
System.out.println("Figur für Spieler " + player.getId() + " positioniert bei (" + startX + ", 0, " + (startZ - (i * spacing)) + ")"); System.out.println("Figur für Spieler " + player.getId() + " hinzugefügt.");
} catch (Exception e) { } catch (Exception e) {
System.err.println("Fehler beim Laden des Modells für Spieler " + player.getId() + ": " + e.getMessage()); System.err.println("Fehler beim Laden des Modells für Spieler " + player.getId() + ": " + e.getMessage());
} }
@ -157,6 +152,6 @@ public class TestWorld implements GameEventListener{
@Override @Override
public void receivedEvent(EventCardEvent event) { public void receivedEvent(EventCardEvent event) {
new EventCardPopup(app, event.description()).open(); new EventCard(app, event.description()).open();
} }
} }

View File

@ -15,15 +15,10 @@ 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.game.server.Player; import pp.monopoly.game.server.Player;
import pp.monopoly.game.server.PlayerColor;
import pp.monopoly.game.server.PlayerHandler; import pp.monopoly.game.server.PlayerHandler;
import pp.monopoly.message.client.EndTurn; import pp.monopoly.message.client.EndTurn;
import pp.monopoly.message.client.RollDice; import pp.monopoly.message.client.RollDice;
import pp.monopoly.notification.ButtonStatusEvent; import pp.monopoly.notification.*;
import pp.monopoly.notification.DiceRollEvent;
import pp.monopoly.notification.GameEventListener;
import pp.monopoly.notification.Sound;
import pp.monopoly.notification.UpdatePlayerView;
public class Toolbar extends Dialog implements GameEventListener { public class Toolbar extends Dialog implements GameEventListener {
@ -54,31 +49,19 @@ public class Toolbar extends Dialog implements GameEventListener {
} }
private Container createToolbarContainer() { private Container createToolbarContainer() {
// Erstelle den Hauptcontainer
Container container = new Container(new SpringGridLayout(Axis.X, Axis.Y), "toolbar"); Container container = new Container(new SpringGridLayout(Axis.X, Axis.Y), "toolbar");
container.setLocalTranslation(0, 200, 0); container.setLocalTranslation(0, 200, 0);
container.setPreferredSize(new Vector3f(app.getCamera().getWidth(), 200, 0)); container.setPreferredSize(new Vector3f(app.getCamera().getWidth(), 200, 0));
// Spielerfarbe abrufen // Create account and overview containers
Player currentPlayer = playerHandler.getPlayerById(app.getId());
ColorRGBA playerColor = convertPlayerColor(currentPlayer.getColor());
// Füge einen farbigen Balken hinzu
Container playerColorBar = new Container();
playerColorBar.setPreferredSize(new Vector3f(app.getCamera().getWidth(), 40, 0)); // Höhe des Balkens auf 10 festlegen
playerColorBar.setBackground(new QuadBackgroundComponent(playerColor));
playerColorBar.setLocalTranslation(0, 220, 1); // Positioniere ihn an der oberen Kante der Toolbar
app.getGuiNode().attachChild(playerColorBar);
// Übersicht und Konto
accountContainer = container.addChild(new Container()); accountContainer = container.addChild(new Container());
overviewContainer = container.addChild(new Container()); overviewContainer = container.addChild(new Container());
receivedEvent(new UpdatePlayerView()); // Initiale Aktualisierung receivedEvent(new UpdatePlayerView());
// Würfel-Bereich // Dice section
container.addChild(createDiceSection()); container.addChild(createDiceSection());
// Aktionsmenü // Action menu
Container menuContainer = container.addChild(new Container()); Container menuContainer = container.addChild(new Container());
menuContainer.addChild(createTradeButton()); menuContainer.addChild(createTradeButton());
menuContainer.addChild(createPropertyMenuButton()); menuContainer.addChild(createPropertyMenuButton());
@ -88,19 +71,6 @@ public class Toolbar extends Dialog implements GameEventListener {
return container; return container;
} }
private ColorRGBA convertPlayerColor(PlayerColor color) {
switch (color) {
case CYAN: return new ColorRGBA(0f, 1f, 1f, 1f); // Cyan
case YELLOW: return ColorRGBA.Yellow;
case RED: return ColorRGBA.Red;
case PINK: return new ColorRGBA(1f, 0.75f, 0.8f, 1f); // Pink
case GREEN: return ColorRGBA.Green;
case PURPLE: return new ColorRGBA(0.5f, 0f, 0.5f, 1f); // Purple
default: return ColorRGBA.Gray; // Fallback
}
}
private Container createDiceSection() { private Container createDiceSection() {
Container diceContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y)); Container diceContainer = new Container(new SpringGridLayout(Axis.X, Axis.Y));
diceContainer.addChild(createDiceDisplay()); diceContainer.addChild(createDiceDisplay());
@ -201,7 +171,7 @@ public class Toolbar extends Dialog implements GameEventListener {
private void animateDice(long startTime) throws InterruptedException { private void animateDice(long startTime) throws InterruptedException {
int[] currentFace = {1}; int[] currentFace = {1};
while (System.currentTimeMillis() - startTime < 2000) { // Animation duration while (System.currentTimeMillis() - startTime < 2500) { // Animation duration
currentFace[0] = (currentFace[0] % 6) + 1; currentFace[0] = (currentFace[0] % 6) + 1;
String rotatingImage1 = diceToString(currentFace[0]); String rotatingImage1 = diceToString(currentFace[0]);
@ -220,6 +190,7 @@ public class Toolbar extends Dialog implements GameEventListener {
app.enqueue(() -> { app.enqueue(() -> {
setDiceIcon(imageLabel, diceToString(event.a())); setDiceIcon(imageLabel, diceToString(event.a()));
setDiceIcon(imageLabel2, diceToString(event.b())); setDiceIcon(imageLabel2, diceToString(event.b()));
app.getGameLogic().playSound(Sound.BUTTON);
}); });
} }
@ -249,8 +220,6 @@ public class Toolbar extends Dialog implements GameEventListener {
@Override @Override
public void receivedEvent(UpdatePlayerView event) { public void receivedEvent(UpdatePlayerView event) {
System.out.println("Update Player View");
accountContainer.clearChildren(); accountContainer.clearChildren();
overviewContainer.clearChildren(); overviewContainer.clearChildren();
@ -269,20 +238,10 @@ public class Toolbar extends Dialog implements GameEventListener {
overviewContainer.addChild(new Label("Übersicht", new ElementId("label-Bold"))); overviewContainer.addChild(new Label("Übersicht", new ElementId("label-Bold")));
for (Player player : playerHandler.getPlayers()) { for (Player player : playerHandler.getPlayers()) {
if (player.getId() != app.getId()) { if (player.getId() != app.getId()) {
// Spielerfarbe abrufen overviewContainer.addChild(new Label(
ColorRGBA playerColor = convertPlayerColor(player.getColor());
// Label für den Spieler erstellen
Label playerLabel = new Label(
player.getName() + ": " + player.getAccountBalance() + " EUR", player.getName() + ": " + player.getAccountBalance() + " EUR",
new ElementId("label-Text") new ElementId("label-Text")
); ));
// Farbe setzen
playerLabel.setColor(playerColor);
// Label zum Container hinzufügen
overviewContainer.addChild(playerLabel);
} }
} }
overviewContainer.setBackground(createBackground()); overviewContainer.setBackground(createBackground());
@ -307,10 +266,4 @@ public class Toolbar extends Dialog implements GameEventListener {
public void escape() { public void escape() {
new SettingsMenu(app).open(); new SettingsMenu(app).open();
} }
@Override
public void update() {
receivedEvent(new UpdatePlayerView());
super.update();
}
} }

View File

@ -13,17 +13,13 @@ import com.simsilica.lemur.*;
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.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.game.server.Player;
import pp.monopoly.model.TradeHandler; import pp.monopoly.model.TradeHandler;
import pp.monopoly.model.fields.PropertyField; import pp.monopoly.model.fields.PropertyField;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
import java.util.Set;
public class TradeMenu extends Dialog { public class TradeMenu extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
private final TradeHandler tradeHandler; private final TradeHandler tradeHandler;
@ -33,11 +29,6 @@ public class TradeMenu extends Dialog {
private Selector<String> rightBuildingSelector, rightSpecialCardSelector; private Selector<String> rightBuildingSelector, rightSpecialCardSelector;
private TextField leftSelectionsField, rightSelectionsField; private TextField leftSelectionsField, rightSelectionsField;
private TextField leftCurrencyInput, rightCurrencyInput; private TextField leftCurrencyInput, rightCurrencyInput;
private VersionedReference<Set<Integer>> selectionRef; // Reference to track selector changes
private String valueSelected = ""; // To keep track of the last selected value
private String buildingSelected = "";
private String specialCardSelected = "";
private static final ColorRGBA TRANSLUCENT_WHITE = new ColorRGBA(1, 1, 1, 0.5f); private static final ColorRGBA TRANSLUCENT_WHITE = new ColorRGBA(1, 1, 1, 0.5f);
@ -108,7 +99,6 @@ public class TradeMenu extends Dialog {
column.addChild(new Label("Gebäude:")); column.addChild(new Label("Gebäude:"));
Selector<String> buildingSelector = createPropertySelector(isLeft); Selector<String> buildingSelector = createPropertySelector(isLeft);
buildingSelector.getPopupContainer().setBackground(new QuadBackgroundComponent(ColorRGBA.Orange));
column.addChild(buildingSelector); column.addChild(buildingSelector);
column.addChild(new Label("Währung:")); column.addChild(new Label("Währung:"));
@ -117,7 +107,6 @@ public class TradeMenu extends Dialog {
column.addChild(new Label("Sonderkarten:")); column.addChild(new Label("Sonderkarten:"));
Selector<String> specialCardSelector = createSpecialCardSelector(); Selector<String> specialCardSelector = createSpecialCardSelector();
specialCardSelector.getPopupContainer().setBackground(new QuadBackgroundComponent(ColorRGBA.Orange));
styleSelector(specialCardSelector); styleSelector(specialCardSelector);
column.addChild(specialCardSelector); column.addChild(specialCardSelector);
@ -264,42 +253,4 @@ public class TradeMenu extends Dialog {
app.getGuiNode().detachChild(mainContainer); app.getGuiNode().detachChild(mainContainer);
super.close(); super.close();
} }
/**
* Updates the dialog periodically, called by the dialog manager.
*
* @param delta The time elapsed since the last update.
*/
@Override
public void update(float delta) {
// Check if the selection has changed
// if (selectionRef.update()) {
// String selected = playerSelector.getSelectedItem();
// if (!selected.equals(lastSelected)) {
// lastSelected = selected;
// onDropdownSelectionChanged(selected);
} }
}
/**
* Handles dropdown selection changes and updates the trade handler.
*
* @param selected The selected item from the dropdown.
*/
/* private void onDropdownSelectionChanged(String selected) {
app.getGameLogic().playSound(Sound.BUTTON);
int idStart = selected.indexOf("(ID: ") + 5; // Find start of the ID
int idEnd = selected.indexOf(")", idStart); // Find end of the ID
String idStr = selected.substring(idStart, idEnd); // Extract the ID as a string
int playerId = Integer.parseInt(idStr); // Convert the ID to an integer
// Find the player by ID
Player selectedPlayer = app.getGameLogic().getPlayerHandler().getPlayerById(playerId);
if (selectedPlayer != null) {
}
}*/

View File

@ -15,7 +15,7 @@ import pp.dialog.Dialog;
import pp.monopoly.client.MonopolyApp; import pp.monopoly.client.MonopolyApp;
/** /**
* Bankrupt is a Warning-Popup which appears when the balance is negative at the end of a player´s turn * Bankrupt is a Warning-Popup, which appears, if the balance is negative at the end of a player´s turn // TODO welche menü-Klasse
*/ */
public class Bankrupt extends Dialog { public class Bankrupt extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -49,7 +49,7 @@ public class Bankrupt extends Dialog {
backgroundContainer.setPreferredSize(bankruptContainer.getPreferredSize().addLocal(padding, padding, 0)); backgroundContainer.setPreferredSize(bankruptContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel // Titel
Label gateFieldTitle = bankruptContainer.addChild(new Label("Vorsicht !", new ElementId("warning-title"))); Label gateFieldTitle = bankruptContainer.addChild(new Label("Vorsicht !", new ElementId("settings-title"))); //TODO Dicke Schrift
gateFieldTitle.setFontSize(48); gateFieldTitle.setFontSize(48);
gateFieldTitle.setColor(ColorRGBA.Black); gateFieldTitle.setColor(ColorRGBA.Black);
@ -67,14 +67,14 @@ public class Bankrupt extends Dialog {
quitButton.addClickCommands(source -> close()); quitButton.addClickCommands(source -> close());
// Zentriere das Popup // Zentriere den Container
bankruptContainer.setLocalTranslation( bankruptContainer.setLocalTranslation(
(app.getCamera().getWidth() - bankruptContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - bankruptContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + bankruptContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + bankruptContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup // Zentriere den Container
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - bankruptContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - bankruptContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + bankruptContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + bankruptContainer.getPreferredSize().y+ padding) / 2,

View File

@ -16,7 +16,8 @@ import pp.monopoly.client.gui.SettingsMenu;
import pp.monopoly.model.fields.BuildingProperty; import pp.monopoly.model.fields.BuildingProperty;
/** /**
* BuildingPropertyCard creates the popup for field information * TODO Kommentare fixen
* SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
public class BuildingPropertyCard extends Dialog { public class BuildingPropertyCard extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -45,9 +46,6 @@ public class BuildingPropertyCard extends Dialog {
buildingPropertyContainer = new Container(); buildingPropertyContainer = new Container();
buildingPropertyContainer.setBackground(new QuadBackgroundComponent(field.getColor().getColor())); buildingPropertyContainer.setBackground(new QuadBackgroundComponent(field.getColor().getColor()));
float padding = 10; // Passt den backgroundContainer an die Größe des buildingPropertyContainer an
backgroundContainer.setPreferredSize(buildingPropertyContainer.getPreferredSize().addLocal(padding, padding, 0));
Label settingsTitle = buildingPropertyContainer.addChild(new Label( field.getName(), new ElementId("settings-title"))); Label settingsTitle = buildingPropertyContainer.addChild(new Label( field.getName(), new ElementId("settings-title")));
settingsTitle.setFontSize(48); settingsTitle.setFontSize(48);
@ -68,14 +66,28 @@ public class BuildingPropertyCard extends Dialog {
propertyValuesContainer.addChild(new Label("„Hypothek: " + field.getHypo() + " EUR", new ElementId("label-Text"))); propertyValuesContainer.addChild(new Label("„Hypothek: " + field.getHypo() + " EUR", new ElementId("label-Text")));
propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
// Zentriere das Popup //TODO eventuell diese Stelle löschen, da nur die BuyCard Kaufen und beenden hat
/*
// Beenden-Button
Button quitButton = foodFieldContainer.addChild(new Button("Beenden", new ElementId("button")));
quitButton.setFontSize(32);
// Kaufen-Button
Button buyButton = foodFieldContainer.addChild(new Button("Kaufen", new ElementId("button")));
buyButton.setFontSize(32);
*/
float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(buildingPropertyContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü
buildingPropertyContainer.setLocalTranslation( buildingPropertyContainer.setLocalTranslation(
(app.getCamera().getWidth() - buildingPropertyContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - buildingPropertyContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + buildingPropertyContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + buildingPropertyContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - buildingPropertyContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - buildingPropertyContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + buildingPropertyContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + buildingPropertyContainer.getPreferredSize().y+ padding) / 2,

View File

@ -15,7 +15,7 @@ import pp.monopoly.model.fields.BuildingProperty;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
/** /**
* BuyCard is a popup that appears when a player lands on a field that is still available for purchase. * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
public class BuyCard extends Dialog { public class BuyCard extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -28,7 +28,7 @@ public class BuyCard extends Dialog {
this.app = app; this.app = app;
//Generate the corresponfing field //Generate the corresponfing field
int index = app.getGameLogic().getPlayerHandler().getPlayerById(app.getId()).getFieldID(); int index = app.getGameLogic().getPlayerHandler().getPlayers().get(0).getFieldID();;
BuildingProperty field = (BuildingProperty) new BoardManager().getFieldAtIndex(index); BuildingProperty field = (BuildingProperty) new BoardManager().getFieldAtIndex(index);
// Create the background container // Create the background container
@ -39,15 +39,12 @@ public class BuyCard extends Dialog {
// Hauptcontainer für die Gebäudekarte // Hauptcontainer für die Gebäudekarte
buyCardContainer = new Container(); buyCardContainer = new Container();
float padding = 10; // Passt den backgroundContainer an die Größe des buyCardContainers an
backgroundContainer.setPreferredSize(buyCardContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel
Label title = buyCardContainer.addChild(new Label( field.getName(), new ElementId("label-Bold"))); Label title = buyCardContainer.addChild(new Label( field.getName(), new ElementId("label-Bold")));
title.setBackground(new QuadBackgroundComponent(field.getColor().getColor())); title.setBackground(new QuadBackgroundComponent(field.getColor().getColor()));
title.setFontSize(48); title.setFontSize(48);
// Text, der auf dem Popup steht // Text, der auf der Karte steht
// Die Preise werden dynamisch dem BoardManager entnommen // Die Preise werden dynamisch dem BoardManager entnommen
Container propertyValuesContainer = buyCardContainer.addChild(new Container()); Container propertyValuesContainer = buyCardContainer.addChild(new Container());
propertyValuesContainer.addChild(new Label("„Grundstückswert: " + field.getPrice() + " EUR", new ElementId("label-Text"))); propertyValuesContainer.addChild(new Label("„Grundstückswert: " + field.getPrice() + " EUR", new ElementId("label-Text")));
@ -80,14 +77,17 @@ public class BuyCard extends Dialog {
app.getGameLogic().send(new BuyPropertyResponse()); app.getGameLogic().send(new BuyPropertyResponse());
})); }));
// Zentriere das Popup float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(buyCardContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü
buyCardContainer.setLocalTranslation( buyCardContainer.setLocalTranslation(
(app.getCamera().getWidth() - buyCardContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - buyCardContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + buyCardContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + buyCardContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - buyCardContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - buyCardContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + buyCardContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + buyCardContainer.getPreferredSize().y+ padding) / 2,

View File

@ -12,7 +12,7 @@ import pp.monopoly.client.gui.SettingsMenu;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
/** /**
* ConfirmTrade is a popup which appears when a trade is proposed to this certain player. * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
public class ConfirmTrade extends Dialog { public class ConfirmTrade extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -24,24 +24,25 @@ public class ConfirmTrade extends Dialog {
super(app.getDialogManager()); super(app.getDialogManager());
this.app = app; this.app = app;
//Generate the corresponfing field
//int index = app.getGameLogic().getPlayerHandler().getPlayers().get(0).getFieldID();;
// BuildingProperty field = (BuildingProperty) new BoardManager().getFieldAtIndex(index);
// Create the background container // Create the background container
backgroundContainer = new Container(); backgroundContainer = new Container();
backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background
attachChild(backgroundContainer); attachChild(backgroundContainer);
// Hauptcontainer für das Bestätigungspopup // Hauptcontainer für die Gebäudekarte
confirmTradeContainer = new Container(); confirmTradeContainer = new Container();
float padding = 10; // Passt den backgroundContainer an die Größe des confirmTradeContainer an
backgroundContainer.setPreferredSize(confirmTradeContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel Label title = confirmTradeContainer.addChild(new Label( "Handel", new ElementId("label-Bold"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
Label title = confirmTradeContainer.addChild(new Label( "Handel", new ElementId("label-Bold")));
title.setFontSize(48); title.setFontSize(48);
title.setColor(ColorRGBA.Black); title.setColor(ColorRGBA.Black);
// Text, der auf der Karte steht // Text, der auf der Karte steht
// Die Werte werden dem Handel entnommen (Iwas auch immer da dann ist) // Die Preise werden dynamisch dem BoardManager entnommen
Container propertyValuesContainer = confirmTradeContainer.addChild(new Container()); Container propertyValuesContainer = confirmTradeContainer.addChild(new Container());
propertyValuesContainer.addChild(new Label("„Spieler XXX möchte:", new ElementId("label-Text"))); //TODO hier überall die entsprechenden Variablen einfügen propertyValuesContainer.addChild(new Label("„Spieler XXX möchte:", new ElementId("label-Text"))); //TODO hier überall die entsprechenden Variablen einfügen
propertyValuesContainer.addChild(new Label("", new ElementId("label-Text")));// Leerzeile propertyValuesContainer.addChild(new Label("", new ElementId("label-Text")));// Leerzeile
@ -58,26 +59,30 @@ public class ConfirmTrade extends Dialog {
propertyValuesContainer.addChild(new Label("tauschen, willst du das Angebot annehmen?", new ElementId("label-Text"))); propertyValuesContainer.addChild(new Label("tauschen, willst du das Angebot annehmen?", new ElementId("label-Text")));
propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
// Ablehnen-Button // Beenden-Button
Button declineButton = confirmTradeContainer.addChild(new Button("Ablehnen", new ElementId("button"))); Button declineButton = confirmTradeContainer.addChild(new Button("Ablehnen", new ElementId("button"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
declineButton.setFontSize(32); declineButton.setFontSize(32);
declineButton.addClickCommands(s -> ifTopDialog(() -> { //TODO Buttonfunktion prüfen declineButton.addClickCommands(s -> ifTopDialog(() -> {
app.getGameLogic().playSound(Sound.BUTTON); app.getGameLogic().playSound(Sound.BUTTON);
close(); close();
})); }));
// Verhandeln-Button // Kaufen-Button
Button negotiateButton = confirmTradeContainer.addChild(new Button("Verhandeln", new ElementId("button"))); Button negotiateButton = confirmTradeContainer.addChild(new Button("Verhandeln", new ElementId("button"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
negotiateButton.setFontSize(32); negotiateButton.setFontSize(32);
negotiateButton.addClickCommands(s -> ifTopDialog( () -> { //TODO Buttonfunktion prüfen negotiateButton.addClickCommands(s -> ifTopDialog( () -> { //TODO Buttonfunktion prüfen
app.getGameLogic().playSound(Sound.BUTTON); app.getGameLogic().playSound(Sound.BUTTON);
})); }));
// Confirm-Button // Kaufen-Button
Button confirmButton = confirmTradeContainer.addChild(new Button("Bestätigen", new ElementId("button"))); Button confirmButton = confirmTradeContainer.addChild(new Button("Bestätigen", new ElementId("button"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
confirmButton.setFontSize(32); confirmButton.setFontSize(32);
confirmButton.addClickCommands(s -> ifTopDialog( () -> { //TODO Buttonfunktion prüfen confirmButton.addClickCommands(s -> ifTopDialog( () -> {
app.getGameLogic().playSound(Sound.BUTTON); app.getGameLogic().playSound(Sound.BUTTON);
})); }));
float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(confirmTradeContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü // Zentriere das Menü
confirmTradeContainer.setLocalTranslation( confirmTradeContainer.setLocalTranslation(
(app.getCamera().getWidth() - confirmTradeContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - confirmTradeContainer.getPreferredSize().x) / 2,
@ -85,7 +90,6 @@ public class ConfirmTrade extends Dialog {
8 8
); );
// Zentriere das Menü
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - confirmTradeContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - confirmTradeContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + confirmTradeContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + confirmTradeContainer.getPreferredSize().y+ padding) / 2,

View File

@ -13,11 +13,11 @@ import com.simsilica.lemur.component.QuadBackgroundComponent;
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.client.gui.SettingsMenu;
/** /**
* EventCardPopup is a popup which appears when a certain EventCard is triggered by entering a EventCardField * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
public class EventCardPopup extends Dialog { public class EventCard extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
private final Geometry overlayBackground; private final Geometry overlayBackground;
private final Container eventCardContainer; private final Container eventCardContainer;
@ -25,7 +25,7 @@ public class EventCardPopup extends Dialog {
private final String description; private final String description;
public EventCardPopup(MonopolyApp app, String description) { public EventCard(MonopolyApp app, String description) {
super(app.getDialogManager()); super(app.getDialogManager());
this.app = app; this.app = app;
this.description = description; this.description = description;
@ -39,21 +39,19 @@ public class EventCardPopup extends Dialog {
backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background
app.getGuiNode().attachChild(backgroundContainer); app.getGuiNode().attachChild(backgroundContainer);
// Hauptcontainer für die Eventcard // Hauptcontainer für die Gebäudekarte
eventCardContainer = new Container(); eventCardContainer = new Container();
eventCardContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); eventCardContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f)));
eventCardContainer.setPreferredSize(new Vector3f(550,400,10)); eventCardContainer.setPreferredSize(new Vector3f(550,400,10));
float padding = 10; // Passt den backgroundContainer an die Größe des eventCardContainers an
backgroundContainer.setPreferredSize(eventCardContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel // Titel
// Die Namen werden dynamisch dem BoardManager entnommen
Label gateFieldTitle = eventCardContainer.addChild(new Label("Ereigniskarte", new ElementId("settings-title"))); Label gateFieldTitle = eventCardContainer.addChild(new Label("Ereigniskarte", new ElementId("settings-title")));
gateFieldTitle.setFontSize(48); gateFieldTitle.setFontSize(48);
gateFieldTitle.setColor(ColorRGBA.Black); gateFieldTitle.setColor(ColorRGBA.Black);
// Text, der auf der Karte steht // Text, der auf der Karte steht
// Die Erklärungsfelder werden automatisch den descriptions der Message entnommen // Die Preise werden dynamisch dem BoardManager entnommen
Container propertyValuesContainer = eventCardContainer.addChild(new Container()); Container propertyValuesContainer = eventCardContainer.addChild(new Container());
propertyValuesContainer.addChild(new Label(description, new ElementId("label-Text"))); propertyValuesContainer.addChild(new Label(description, new ElementId("label-Text")));
propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
@ -64,14 +62,17 @@ public class EventCardPopup extends Dialog {
quitButton.setFontSize(32); quitButton.setFontSize(32);
quitButton.addClickCommands(source -> close()); quitButton.addClickCommands(source -> close());
// Zentriere das Popup float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(eventCardContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü
eventCardContainer.setLocalTranslation( eventCardContainer.setLocalTranslation(
(app.getCamera().getWidth() - eventCardContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - eventCardContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + eventCardContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + eventCardContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - eventCardContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - eventCardContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + eventCardContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + eventCardContainer.getPreferredSize().y+ padding) / 2,

View File

@ -19,7 +19,7 @@ import pp.monopoly.model.fields.FoodField;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
/** /**
* FoodFieldCard creates the popup for field information * FoodFieldCard erstellt die Geböudekarte vom Brandl und der Truppenküche
*/ */
public class FoodFieldCard extends Dialog { public class FoodFieldCard extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -32,7 +32,7 @@ public class FoodFieldCard extends Dialog {
this.app = app; this.app = app;
//Generate the corresponfing field //Generate the corresponfing field
int index = app.getGameLogic().getPlayerHandler().getPlayerById(app.getId()).getFieldID(); int index = app.getGameLogic().getPlayerHandler().getPlayers().get(0).getFieldID();
FoodField field = (FoodField) app.getGameLogic().getBoardManager().getFieldAtIndex(index); FoodField field = (FoodField) app.getGameLogic().getBoardManager().getFieldAtIndex(index);
// Halbtransparentes Overlay hinzufügen // Halbtransparentes Overlay hinzufügen
@ -48,8 +48,7 @@ public class FoodFieldCard extends Dialog {
foodFieldContainer = new Container(); foodFieldContainer = new Container();
foodFieldContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.1f, 0.1f, 0.1f, 0.9f))); foodFieldContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.1f, 0.1f, 0.1f, 0.9f)));
float padding = 10; // Passt den backgroundContainer an die Größe des foodFieldContainers an
backgroundContainer.setPreferredSize(foodFieldContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel, bestehend aus dynamischen Namen anhand der ID und der Schriftfarbe/größe // Titel, bestehend aus dynamischen Namen anhand der ID und der Schriftfarbe/größe
Label settingsTitle = foodFieldContainer.addChild(new Label(field.getName(), new ElementId("settings-title"))); Label settingsTitle = foodFieldContainer.addChild(new Label(field.getName(), new ElementId("settings-title")));
@ -87,14 +86,16 @@ public class FoodFieldCard extends Dialog {
app.getGameLogic().send(new BuyPropertyResponse()); app.getGameLogic().send(new BuyPropertyResponse());
})); }));
// Zentriere das Popup float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(foodFieldContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü
foodFieldContainer.setLocalTranslation( foodFieldContainer.setLocalTranslation(
(app.getCamera().getWidth() - foodFieldContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - foodFieldContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + foodFieldContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + foodFieldContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - foodFieldContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - foodFieldContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + foodFieldContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + foodFieldContainer.getPreferredSize().y+ padding) / 2,

View File

@ -18,7 +18,7 @@ import pp.monopoly.model.fields.GateField;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
/** /**
* GateFieldCard creates the popup for field information * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
public class GateFieldCard extends Dialog { public class GateFieldCard extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -31,7 +31,7 @@ public class GateFieldCard extends Dialog {
this.app = app; this.app = app;
//Generate the corresponfing field //Generate the corresponfing field
int index = app.getGameLogic().getPlayerHandler().getPlayerById(app.getId()).getFieldID(); int index = app.getGameLogic().getPlayerHandler().getPlayers().get(0).getFieldID();
GateField field = (GateField) app.getGameLogic().getBoardManager().getFieldAtIndex(index); GateField field = (GateField) app.getGameLogic().getBoardManager().getFieldAtIndex(index);
// Halbtransparentes Overlay hinzufügen // Halbtransparentes Overlay hinzufügen
@ -47,10 +47,6 @@ public class GateFieldCard extends Dialog {
gateFieldContainer = new Container(); gateFieldContainer = new Container();
gateFieldContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); gateFieldContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f)));
float padding = 10; // Passt den backgroundContainer an die Größe des gateFieldContainers an
backgroundContainer.setPreferredSize(gateFieldContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel // Titel
// Die Namen werden dynamisch dem BoardManager entnommen // Die Namen werden dynamisch dem BoardManager entnommen
Label gateFieldTitle = gateFieldContainer.addChild(new Label(field.getName(), new ElementId("settings-title"))); Label gateFieldTitle = gateFieldContainer.addChild(new Label(field.getName(), new ElementId("settings-title")));
@ -86,14 +82,17 @@ public class GateFieldCard extends Dialog {
close(); close();
})); }));
// Zentriere das Popup float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(gateFieldContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü
gateFieldContainer.setLocalTranslation( gateFieldContainer.setLocalTranslation(
(app.getCamera().getWidth() - gateFieldContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - gateFieldContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + gateFieldContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + gateFieldContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - gateFieldContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - gateFieldContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + gateFieldContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + gateFieldContainer.getPreferredSize().y+ padding) / 2,

View File

@ -25,7 +25,7 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* SellHouse is a popup which appears when a player clicks on the demolish-button in the BuildingAdminMenu * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
public class SellHouse extends Dialog { public class SellHouse extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -37,41 +37,64 @@ public class SellHouse extends Dialog {
super(app.getDialogManager()); super(app.getDialogManager());
this.app = app; this.app = app;
//Generate the corresponfing field
//int index = app.getGameLogic().getPlayerHandler().getPlayers().get(0).getFieldID();;
// BuildingProperty field = (BuildingProperty) new BoardManager().getFieldAtIndex(index);
// Create the background container // Create the background container
backgroundContainer = new Container(); backgroundContainer = new Container();
backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background backgroundContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); // Darker background
attachChild(backgroundContainer); attachChild(backgroundContainer);
// Hauptcontainer für das Menü // Hauptcontainer für die Gebäudekarte
sellhouseContainer = new Container(); sellhouseContainer = new Container();
sellhouseContainer.setPreferredSize(new Vector3f(800, 600, 0)); sellhouseContainer.setPreferredSize(new Vector3f(800, 600, 0));
float padding = 10; // Passt den backgroundContainer an die Größe des sellhouseContainers an
backgroundContainer.setPreferredSize(sellhouseContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel Label title = sellhouseContainer.addChild(new Label( "Gebäude Abreißen", new ElementId("label-Bold"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
Label title = sellhouseContainer.addChild(new Label( "Gebäude Abreißen", new ElementId("warining-Bold")));
title.setFontSize(48); title.setFontSize(48);
title.setColor(ColorRGBA.Black); title.setColor(ColorRGBA.Black);
//Unterteilund des sellHouseContainer in drei "Untercontainer"
Container upContainer = sellhouseContainer.addChild(new Container()); Container upContainer = sellhouseContainer.addChild(new Container());
Container middleContainer = sellhouseContainer.addChild(new Container()); Container middleContainer = sellhouseContainer.addChild(new Container());
Container downContainer = sellhouseContainer.addChild(new Container()); Container downContainer = sellhouseContainer.addChild(new Container());
// Text, der auf der Karte steht // Text, der auf der Karte steht
// Die Preise werden dynamisch dem BoardManager entnommen
upContainer.addChild(new Label("„Grundstück wählen:", new ElementId("label-Text"))); //TODO hier überall die entsprechenden Variablen einfügen upContainer.addChild(new Label("„Grundstück wählen:", new ElementId("label-Text"))); //TODO hier überall die entsprechenden Variablen einfügen
upContainer.addChild(new Label("", new ElementId("label-Text")));// Leerzeile upContainer.addChild(new Label("", new ElementId("label-Text")));// Leerzeile
upContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); upContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
middleContainer.setPreferredSize(new Vector3f(100, 150, 0)); middleContainer.setPreferredSize(new Vector3f(100, 150, 0));
middleContainer.setBackground(new QuadBackgroundComponent(ColorRGBA.Orange)); middleContainer.setBackground(new QuadBackgroundComponent(ColorRGBA.Orange));
/*
// Create a VersionedList for the ListBox model
VersionedList<String> checkboxListModel = new VersionedList<>();
for (int i = 1; i <= 10; i++) {
checkboxListModel.add("Option " + i); // Add items to the list
}
// Create a ListBox with the "glass" style and the model
ListBox<String> checkboxListBox = new ListBox<>(checkboxListModel, "glass");
checkboxListBox.setPreferredSize(new Vector3f(300, 200, 0)); // Adjust size as needed
// Add the ListBox to the middle container
middleContainer.addChild(checkboxListBox);
// If you need separate checkboxes (optional), render them separately
for (String option : checkboxListModel) {
Checkbox checkbox = new Checkbox(option);
checkbox.setFontSize(16); // Optional: adjust font size
middleContainer.addChild(checkbox); // Add it to the middle container
}
// Add the ListBox to the middle container
middleContainer.addChild(checkboxListBox); */
// Create a VersionedList for the ListBox model // Create a VersionedList for the ListBox model
VersionedList<BuildingProperty> listModel = new VersionedList<>(); VersionedList<BuildingProperty> listModel = new VersionedList<>();
// Retrieve current player and their properties // Retrieve current player and their properties
Player currentPlayer = app.getGameLogic().getPlayerHandler().getPlayerById(app.getId()); Player currentPlayer = app.getGameLogic().getPlayerHandler().getPlayers().get(0);
BoardManager boardManager = app.getGameLogic().getBoardManager(); BoardManager boardManager = app.getGameLogic().getBoardManager();
List<BuildingProperty> playerProperties = boardManager.getPropertyFields( List<BuildingProperty> playerProperties = boardManager.getPropertyFields(
@ -106,14 +129,14 @@ public class SellHouse extends Dialog {
downContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); downContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
// Beenden-Button // Beenden-Button
Button cancelButton = sellhouseContainer.addChild(new Button("Abbrechen", new ElementId("button"))); Button cancelButton = sellhouseContainer.addChild(new Button("Abbrechen", new ElementId("button"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
cancelButton.setFontSize(32); cancelButton.setFontSize(32);
cancelButton.addClickCommands(s -> ifTopDialog(() -> { cancelButton.addClickCommands(s -> ifTopDialog(() -> {
app.getGameLogic().playSound(Sound.BUTTON); app.getGameLogic().playSound(Sound.BUTTON);
close(); close();
})); }));
// Kaufen-Button // Kaufen-Button
Button confirmButton = sellhouseContainer.addChild(new Button("Bestätigen", new ElementId("button"))); Button confirmButton = sellhouseContainer.addChild(new Button("Bestätigen", new ElementId("button"))); //TODO ggf die Buttons Sprachabhängig von den Properties machen
confirmButton.setFontSize(32); confirmButton.setFontSize(32);
confirmButton.addClickCommands(s -> ifTopDialog( () -> { confirmButton.addClickCommands(s -> ifTopDialog( () -> {
app.getGameLogic().playSound(Sound.BUTTON); app.getGameLogic().playSound(Sound.BUTTON);
@ -125,14 +148,19 @@ public class SellHouse extends Dialog {
} }
})); }));
// Zentriere das Popup
float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(sellhouseContainer.getPreferredSize().addLocal(padding, padding, 0));
// Zentriere das Menü
sellhouseContainer.setLocalTranslation( sellhouseContainer.setLocalTranslation(
(app.getCamera().getWidth() - sellhouseContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - sellhouseContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + sellhouseContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + sellhouseContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - sellhouseContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - sellhouseContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + sellhouseContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + sellhouseContainer.getPreferredSize().y+ padding) / 2,

View File

@ -52,7 +52,7 @@ public class TimeOut extends Dialog {
backgroundContainer.setPreferredSize(timeOutContainer.getPreferredSize().addLocal(padding, padding, 0)); backgroundContainer.setPreferredSize(timeOutContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel // Titel
Label gateFieldTitle = timeOutContainer.addChild(new Label("Vorsicht !", new ElementId("warning-title"))); Label gateFieldTitle = timeOutContainer.addChild(new Label("Vorsicht !", new ElementId("settings-title"))); //TODO dicke Schrift
gateFieldTitle.setFontSize(48); gateFieldTitle.setFontSize(48);
gateFieldTitle.setColor(ColorRGBA.Black); gateFieldTitle.setColor(ColorRGBA.Black);
@ -68,14 +68,14 @@ public class TimeOut extends Dialog {
quitButton.addClickCommands(source -> close()); quitButton.addClickCommands(source -> close());
// Zentriere das Popup // Zentriere den Container
timeOutContainer.setLocalTranslation( timeOutContainer.setLocalTranslation(
(app.getCamera().getWidth() - timeOutContainer.getPreferredSize().x) / 2, (app.getCamera().getWidth() - timeOutContainer.getPreferredSize().x) / 2,
(app.getCamera().getHeight() + timeOutContainer.getPreferredSize().y) / 2, (app.getCamera().getHeight() + timeOutContainer.getPreferredSize().y) / 2,
8 8
); );
// Zentriere das Popup // Zentriere den Container
backgroundContainer.setLocalTranslation( backgroundContainer.setLocalTranslation(
(app.getCamera().getWidth() - timeOutContainer.getPreferredSize().x - padding) / 2, (app.getCamera().getWidth() - timeOutContainer.getPreferredSize().x - padding) / 2,
(app.getCamera().getHeight() + timeOutContainer.getPreferredSize().y+ padding) / 2, (app.getCamera().getHeight() + timeOutContainer.getPreferredSize().y+ padding) / 2,

View File

@ -269,7 +269,6 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
@Override @Override
public void received(PlayerStatusUpdate msg) { public void received(PlayerStatusUpdate msg) {
playerHandler = msg.getPlayerHandler(); playerHandler = msg.getPlayerHandler();
System.out.println("Update Player");
notifyListeners(new UpdatePlayerView()); notifyListeners(new UpdatePlayerView());
} }

View File

@ -152,7 +152,6 @@ public class ServerGameLogic implements ClientInterpreter {
System.out.println("Properties:" +player.getProperties().toString()); System.out.println("Properties:" +player.getProperties().toString());
LOGGER.log(Level.INFO, "Player {0} bought property {1}", player.getName(), property.getName()); LOGGER.log(Level.INFO, "Player {0} bought property {1}", player.getName(), property.getName());
} }
updateAllPlayers();
} }
/** /**
@ -174,7 +173,6 @@ public class ServerGameLogic implements ClientInterpreter {
send(player, new PlayerStatusUpdate(playerHandler)); send(player, new PlayerStatusUpdate(playerHandler));
} }
} }
updateAllPlayers();
} }
/** /**
@ -220,7 +218,6 @@ public class ServerGameLogic implements ClientInterpreter {
if (player != null) { if (player != null) {
send(player, player.rollDice()); send(player, player.rollDice());
} }
updateAllPlayers();
} }
/** /**
@ -269,15 +266,11 @@ public class ServerGameLogic implements ClientInterpreter {
if (sender != null) { if (sender != null) {
LOGGER.log(Level.DEBUG, "Processing ViewAssetsRequest for player {0}", sender.getName()); LOGGER.log(Level.DEBUG, "Processing ViewAssetsRequest for player {0}", sender.getName());
send(sender, new ViewAssetsResponse(boardManager)); send(sender, new ViewAssetsResponse(boardManager));
updateAllPlayers();
}
}
private void updateAllPlayers() {
for (Player player : playerHandler.getPlayers()) { for (Player player : playerHandler.getPlayers()) {
send(player, new PlayerStatusUpdate(playerHandler)); send(player, new PlayerStatusUpdate(playerHandler));
} }
} }
}
/** /**
* Retrieves the board manager, which manages the game board. * Retrieves the board manager, which manages the game board.