Compare commits

..

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

38 changed files with 62 additions and 48 deletions

View File

@ -7,12 +7,12 @@ import pp.monopoly.client.gui.popups.BuyCard;
import pp.monopoly.client.gui.popups.EventCard; 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.WinnerPopUp;
import pp.monopoly.game.server.Player; import pp.monopoly.game.server.Player;
import pp.monopoly.model.fields.BuildingProperty; import pp.monopoly.model.fields.BuildingProperty;
import pp.monopoly.model.fields.FoodField; import pp.monopoly.model.fields.FoodField;
import pp.monopoly.model.fields.GateField; import pp.monopoly.model.fields.GateField;
import pp.monopoly.model.fields.PropertyField;
import pp.monopoly.notification.DiceRollEvent;
import pp.monopoly.notification.EventCardEvent; import pp.monopoly.notification.EventCardEvent;
import pp.monopoly.notification.GameEventListener; import pp.monopoly.notification.GameEventListener;
import pp.monopoly.notification.PopUpEvent; import pp.monopoly.notification.PopUpEvent;
@ -20,12 +20,11 @@ import pp.monopoly.notification.PopUpEvent;
/** /**
* TestWorld zeigt eine einfache Szene mit Spielfeld und Spielfiguren. * TestWorld zeigt eine einfache Szene mit Spielfeld und Spielfiguren.
*/ */
public class TestWorld implements GameEventListener{ public class TestWorld {
private final MonopolyApp app; private final MonopolyApp app;
private final List<Player> players; // Liste der Spieler, bereits aus GameStart geladen private final List<Player> players; // Liste der Spieler, bereits aus GameStart geladen
private CameraController cameraController; private CameraController cameraController;
private Toolbar toolbar;
/** /**
* Konstruktor für die TestWorld. * Konstruktor für die TestWorld.
@ -36,7 +35,6 @@ public class TestWorld implements GameEventListener{
public TestWorld(MonopolyApp app, List<Player> players) { public TestWorld(MonopolyApp app, List<Player> players) {
this.app = app; this.app = app;
this.players = players; this.players = players;
app.getGameLogic().addListener(this);
} }
/** /**
@ -54,8 +52,6 @@ public class TestWorld implements GameEventListener{
createBoard(); createBoard();
createPlayerFigures(); // Lädt Figuren aus der bereits vorhandenen Liste createPlayerFigures(); // Lädt Figuren aus der bereits vorhandenen Liste
setupCamera(); setupCamera();
toolbar = new Toolbar(app);
toolbar.open();
} }
/** /**
@ -132,8 +128,9 @@ public class TestWorld implements GameEventListener{
@Override @Override
public void receivedEvent(PopUpEvent event) { public void receivedEvent(PopUpEvent event) {
if(event.msg().equals("Buy")) { System.err.println("Trigger ?");
int field = app.getGameLogic().getPlayerHandler().getPlayerById(app.getId()).getFieldID(); // if (event.desc() == "BuyCard") {
int field = app.getGameLogic().getPlayerHandler().getPlayers().get(0).getFieldID();
Object fieldObject = app.getGameLogic().getBoardManager().getFieldAtIndex(field); Object fieldObject = app.getGameLogic().getBoardManager().getFieldAtIndex(field);
if (fieldObject instanceof BuildingProperty) { if (fieldObject instanceof BuildingProperty) {
@ -143,15 +140,8 @@ public class TestWorld implements GameEventListener{
} else if (fieldObject instanceof FoodField) { } else if (fieldObject instanceof FoodField) {
new FoodFieldCard(app).open(); new FoodFieldCard(app).open();
} }
} else if(event.msg().equals("Winner")) {
new WinnerPopUp(app).open();
} else if(event.msg().equals("Looser")) {
new LooserPopUp(app).open();
}
}
@Override
public void receivedEvent(EventCardEvent event) {
new EventCard(app, event.description()).open();
} }
} }

View File

@ -155,10 +155,29 @@ public class Toolbar extends Dialog implements GameEventListener {
private void startDiceAnimation() { private void startDiceAnimation() {
animatingDice = true; animatingDice = true;
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
new Thread(() -> { Thread diceAnimation = new Thread(() -> {
int[] currentFace = {1};
try { try {
animateDice(startTime); while (System.currentTimeMillis() - startTime < 2000) { // Animation läuft für 4 Sekunden
currentFace[0] = (currentFace[0] % 6) + 1;
String rotatingImage1 = diceToString(currentFace[0]);
String rotatingImage2 = diceToString((currentFace[0] % 6) + 1);
IconComponent newIcon1 = new IconComponent(rotatingImage1);
newIcon1.setIconSize(new Vector2f(100, 100));
app.enqueue(() -> imageLabel.setIcon(newIcon1));
IconComponent newIcon2 = new IconComponent(rotatingImage2);
newIcon2.setIconSize(new Vector2f(100, 100));
app.enqueue(() -> imageLabel2.setIcon(newIcon2));
// Warte 100 ms, bevor die Bilder wechseln
Thread.sleep(100);
}
// Animation beenden
animatingDice = false; animatingDice = false;
if (latestDiceRollEvent != null) { if (latestDiceRollEvent != null) {
showFinalDiceResult(latestDiceRollEvent); showFinalDiceResult(latestDiceRollEvent);

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, if the balance is negative at the end of a player´s turn // TODO welche menü-Klasse * Bankrupt ist ein Overlay-Menü, welches aufgerufen werden kann, wenn man mit einem negativen Kontostand den Zug beenden möchte. // TODO welche menü-Klasse
*/ */
public class Bankrupt extends Dialog { public class Bankrupt extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -40,26 +40,26 @@ public class Bankrupt extends Dialog {
app.getGuiNode().attachChild(backgroundContainer); app.getGuiNode().attachChild(backgroundContainer);
// Hauptcontainer für die Warnung // Hauptcontainer für die Gebäudekarte
bankruptContainer = new Container(); bankruptContainer = new Container();
bankruptContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); bankruptContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f)));
bankruptContainer.setPreferredSize(new Vector3f(550,250,10)); bankruptContainer.setPreferredSize(new Vector3f(550,250,10));
float padding = 10; // Passt den backgroundContainer an die Größe des bankruptContainers an float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(bankruptContainer.getPreferredSize().addLocal(padding, padding, 0)); backgroundContainer.setPreferredSize(bankruptContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel // Titel
// Die Namen werden dynamisch dem BoardManager entnommen
Label gateFieldTitle = bankruptContainer.addChild(new Label("Vorsicht !", new ElementId("settings-title"))); //TODO Dicke Schrift 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);
// Text, der im Popup steht // Text, der auf der Karte steht
Container textContainer = bankruptContainer.addChild(new Container()); // Die Preise werden dynamisch dem BoardManager entnommen
textContainer.addChild(new Label("Du hast noch einen negativen Kontostand. Wenn du jetzt deinen Zug beendest, gehst du Bankrott und verlierst das Spiel!", new ElementId("label-Text"))); Container Container = bankruptContainer.addChild(new Container());
textContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); Container.addChild(new Label("Du hast noch einen negativen Kontostand. Wenn du jetzt deinen Zug beendest, gehst du Bankrott und verlierst das Spiel!", new ElementId("label-Text")));
Container.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
// Passt den textContainer an die Größe des bankruptContainers an Container.setPreferredSize(bankruptContainer.getPreferredSize().addLocal(-250,-200,0));
textContainer.setPreferredSize(bankruptContainer.getPreferredSize().addLocal(-250,-200,0));
// Beenden-Button // Beenden-Button
Button quitButton = bankruptContainer.addChild(new Button("Bestätigen", new ElementId("button"))); Button quitButton = bankruptContainer.addChild(new Button("Bestätigen", new ElementId("button")));
@ -67,14 +67,14 @@ public class Bankrupt extends Dialog {
quitButton.addClickCommands(source -> close()); quitButton.addClickCommands(source -> close());
// Zentriere den Container // Zentriere das Menü
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 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,
@ -101,7 +101,7 @@ public class Bankrupt extends Dialog {
} }
/** /**
* Closes the menu and removes the GUI elements. * Schließt das Menü und entfernt die GUI-Elemente.
*/ */
@Override @Override
public void close() { public void close() {
@ -115,4 +115,5 @@ public class Bankrupt extends Dialog {
public void escape() { public void escape() {
close(); close();
} }
} }

View File

@ -17,7 +17,7 @@ import pp.monopoly.notification.Sound;
import static pp.monopoly.Resources.lookup; import static pp.monopoly.Resources.lookup;
/** /**
* TimeOut is a warning popup that is triggered when the connection to the server is interrupted. * TimeOut ist ein Overlay-Menü, welches aufgerufen wird, wenn die Verbindung zum Server unterbrochen wurde.
*/ */
public class TimeOut extends Dialog { public class TimeOut extends Dialog {
private final MonopolyApp app; private final MonopolyApp app;
@ -43,24 +43,26 @@ public class TimeOut extends Dialog {
// Hauptcontainer für die Warnung // Hauptcontainer für die Gebäudekarte
timeOutContainer = new Container(); timeOutContainer = new Container();
timeOutContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f))); timeOutContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.8657f, 0.8735f, 0.8892f, 1.0f)));
timeOutContainer.setPreferredSize(new Vector3f(550,250,10)); timeOutContainer.setPreferredSize(new Vector3f(550,250,10));
float padding = 10; // Passt den backgroundContainer an die Größe des bankruptContainers an float padding = 10; // Padding around the settingsContainer for the background
backgroundContainer.setPreferredSize(timeOutContainer.getPreferredSize().addLocal(padding, padding, 0)); backgroundContainer.setPreferredSize(timeOutContainer.getPreferredSize().addLocal(padding, padding, 0));
// Titel // Titel
// Die Namen werden dynamisch dem BoardManager entnommen
Label gateFieldTitle = timeOutContainer.addChild(new Label("Vorsicht !", new ElementId("settings-title"))); //TODO dicke Schrift 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);
// Text, der auf der Karte steht // Text, der auf der Karte steht
Container textContainer = timeOutContainer.addChild(new Container()); // Die Preise werden dynamisch dem BoardManager entnommen
textContainer.addChild(new Label("Du hast die Verbindung verloren und kannst nichts dagegen machen. Akzeptiere einfach, dass du verloren hast!", new ElementId("label-Text"))); Container propertyValuesContainer = timeOutContainer.addChild(new Container());
textContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f))); propertyValuesContainer.addChild(new Label("Du hast die Verbindung verloren und kannst nichts dagegen machen. Akzeptiere einfach, dass du verloren hast!", new ElementId("label-Text")));
textContainer.setPreferredSize(timeOutContainer.getPreferredSize().addLocal(-250,-200,0)); propertyValuesContainer.setBackground(new QuadBackgroundComponent(new ColorRGBA(0.4657f, 0.4735f, 0.4892f, 1.0f)));
propertyValuesContainer.setPreferredSize(timeOutContainer.getPreferredSize().addLocal(-250,-200,0));
// Beenden-Button // Beenden-Button
Button quitButton = timeOutContainer.addChild(new Button("Bestätigen", new ElementId("button"))); Button quitButton = timeOutContainer.addChild(new Button("Bestätigen", new ElementId("button")));
@ -68,14 +70,14 @@ public class TimeOut extends Dialog {
quitButton.addClickCommands(source -> close()); quitButton.addClickCommands(source -> close());
// Zentriere den Container // Zentriere das Menü
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 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,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 153 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 150 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@ -226,10 +226,12 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
@Override @Override
public void received(GameOver msg) { public void received(GameOver msg) {
if (msg.isWinner()) { if (msg.isWinner()) {
notifyListeners(new PopUpEvent("Winner"));
//Winner popup
playSound(Sound.WINNER); playSound(Sound.WINNER);
} else { } else {
notifyListeners(new PopUpEvent("Looser"));
// Looser popup
playSound(Sound.LOSER); playSound(Sound.LOSER);
} }
} }
@ -331,6 +333,6 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
@Override @Override
public void received(BuyPropertyRequest msg) { public void received(BuyPropertyRequest msg) {
notifyListeners(new PopUpEvent("Buy")); notifyListeners(new PopUpEvent());
} }
} }

View File

@ -1,6 +1,6 @@
package pp.monopoly.notification; package pp.monopoly.notification;
public record PopUpEvent(String msg) implements GameEvent{ public record PopUpEvent() implements GameEvent{
@Override @Override
public void notifyListener(GameEventListener listener) { public void notifyListener(GameEventListener listener) {