event card complete

This commit is contained in:
Johannes Schmelz 2024-11-28 00:07:32 +01:00
parent 9e595b92ba
commit 6d72a94fe4
10 changed files with 66 additions and 35 deletions

View File

@ -10,12 +10,16 @@ import com.jme3.scene.shape.Box;
import com.jme3.texture.Texture; import com.jme3.texture.Texture;
import pp.monopoly.client.MonopolyApp; import pp.monopoly.client.MonopolyApp;
import pp.monopoly.client.gui.popups.EventCard;
import pp.monopoly.notification.DiceRollEvent;
import pp.monopoly.notification.EventCardEvent;
import pp.monopoly.notification.GameEventListener;
/** /**
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat. * TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat.
* Die Kamera wird durch den CameraController gesteuert. * Die Kamera wird durch den CameraController gesteuert.
*/ */
public class TestWorld { public class TestWorld implements GameEventListener{
private final MonopolyApp app; private final MonopolyApp app;
private CameraController cameraController; // Steuert die Kamera private CameraController cameraController; // Steuert die Kamera
@ -28,6 +32,7 @@ public class TestWorld {
*/ */
public TestWorld(MonopolyApp app) { public TestWorld(MonopolyApp app) {
this.app = app; this.app = app;
app.getGameLogic().addListener(this);
} }
/** /**
@ -91,4 +96,9 @@ public class TestWorld {
app.getRootNode().attachChild(geom); app.getRootNode().attachChild(geom);
} }
@Override
public void receivedEvent(EventCardEvent event) {
new EventCard(app, event.description()).open();
}
} }

View File

@ -195,6 +195,8 @@ public class Toolbar extends Dialog implements GameEventListener{
@Override @Override
public void receivedEvent(UpdatePlayerView event) { public void receivedEvent(UpdatePlayerView event) {
playerHandler = app.getGameLogic().getPlayerHandler();
System.err.println("Update Player View");
// Clear existing accountContainer and overviewContainer content // Clear existing accountContainer and overviewContainer content
accountContainer.clearChildren(); accountContainer.clearChildren();
overviewContainer.clearChildren(); overviewContainer.clearChildren();

View File

@ -14,8 +14,6 @@ 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; import pp.monopoly.client.gui.SettingsMenu;
import pp.monopoly.model.card.Card; // TODO für den Import der Queue notwendig
import pp.monopoly.model.card.DeckHelper;
/** /**
* SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann. * SettingsMenu ist ein Overlay-Menü, das durch ESC aufgerufen werden kann.
*/ */
@ -24,14 +22,13 @@ public class EventCard extends Dialog {
private final Geometry overlayBackground; private final Geometry overlayBackground;
private final Container eventCardContainer; private final Container eventCardContainer;
private final Container backgroundContainer; private final Container backgroundContainer;
private final String description;
public EventCard(MonopolyApp app) { public EventCard(MonopolyApp app, String description) {
super(app.getDialogManager()); super(app.getDialogManager());
this.app = app; this.app = app;
this.description = description;
//Generate the corresponfing field
Card card = new DeckHelper().drawCard(); // TODO nimmt die Karten gerade unabhängig aus dem DeckHelper
// Halbtransparentes Overlay hinzufügen // Halbtransparentes Overlay hinzufügen
overlayBackground = createOverlayBackground(); overlayBackground = createOverlayBackground();
@ -56,7 +53,7 @@ public class EventCard extends Dialog {
// Text, der auf der Karte steht // Text, der auf der Karte steht
// Die Preise werden dynamisch dem BoardManager entnommen // Die Preise werden dynamisch dem BoardManager entnommen
Container propertyValuesContainer = eventCardContainer.addChild(new Container()); Container propertyValuesContainer = eventCardContainer.addChild(new Container());
propertyValuesContainer.addChild(new Label(card.getDescription(), 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)));
propertyValuesContainer.setPreferredSize(new Vector3f(300,200,10)); propertyValuesContainer.setPreferredSize(new Vector3f(300,200,10));
@ -114,6 +111,6 @@ public class EventCard extends Dialog {
@Override @Override
public void escape() { public void escape() {
new SettingsMenu(app).open(); close();
} }
} }

View File

@ -26,12 +26,14 @@ import pp.monopoly.model.IntPoint;
import pp.monopoly.model.fields.BoardManager; import pp.monopoly.model.fields.BoardManager;
import pp.monopoly.notification.ClientStateEvent; import pp.monopoly.notification.ClientStateEvent;
import pp.monopoly.notification.DiceRollEvent; import pp.monopoly.notification.DiceRollEvent;
import pp.monopoly.notification.EventCardEvent;
import pp.monopoly.notification.GameEvent; import pp.monopoly.notification.GameEvent;
import pp.monopoly.notification.GameEventBroker; import pp.monopoly.notification.GameEventBroker;
import pp.monopoly.notification.GameEventListener; import pp.monopoly.notification.GameEventListener;
import pp.monopoly.notification.InfoTextEvent; import pp.monopoly.notification.InfoTextEvent;
import pp.monopoly.notification.Sound; import pp.monopoly.notification.Sound;
import pp.monopoly.notification.SoundEvent; import pp.monopoly.notification.SoundEvent;
import pp.monopoly.notification.UpdatePlayerView;
/** /**
* Controls the client-side game logic for Monopoly. * Controls the client-side game logic for Monopoly.
@ -225,9 +227,8 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
*/ */
@Override @Override
public void received(EventDrawCard msg) { public void received(EventDrawCard msg) {
// Kartenlogik
playSound(Sound.EVENT_CARD); playSound(Sound.EVENT_CARD);
notifyListeners(new EventCardEvent(msg.getCardDescription()));
} }
/** /**
@ -282,8 +283,8 @@ public class ClientGameLogic implements ServerInterpreter, GameEventBroker {
*/ */
@Override @Override
public void received(PlayerStatusUpdate msg) { public void received(PlayerStatusUpdate msg) {
playerHandler = msg.getPlayerHandler();
notifyListeners(new UpdatePlayerView());
} }
/** /**

View File

@ -7,12 +7,15 @@
package pp.monopoly.game.server; package pp.monopoly.game.server;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import com.jme3.network.serializing.Serializable; import com.jme3.network.serializing.Serializable;
import pp.monopoly.message.server.DiceResult; import pp.monopoly.message.server.DiceResult;
import pp.monopoly.message.server.EventDrawCard;
import pp.monopoly.message.server.PlayerStatusUpdate;
import pp.monopoly.model.FieldVisitor; import pp.monopoly.model.FieldVisitor;
import pp.monopoly.model.Figure; import pp.monopoly.model.Figure;
import pp.monopoly.model.card.Card; import pp.monopoly.model.card.Card;
@ -36,7 +39,7 @@ public class Player implements FieldVisitor<Void>{
private String name; private String name;
private int accountBalance = 15000; private int accountBalance = 15000;
private Figure figure; private Figure figure;
private List<PropertyField> properties; private List<PropertyField> properties = new ArrayList<>();
private int getOutOfJailCard; private int getOutOfJailCard;
private int fieldID; private int fieldID;
private DiceResult rollResult; private DiceResult rollResult;
@ -319,7 +322,9 @@ public class Player implements FieldVisitor<Void>{
@Override @Override
public Void visit(EventField field) { public Void visit(EventField field) {
Card c = getHandler().getLogic().getDeckHelper().drawCard(); Card c = getHandler().getLogic().getDeckHelper().drawCard();
getHandler().getLogic().getDeckHelper().visit(c, this); getHandler().getLogic().getDeckHelper().visit(c, this); //Logic
getHandler().getLogic().send(this, new EventDrawCard(c.getDescription())); // Card notification
getHandler().getLogic().send(this, new PlayerStatusUpdate(getHandler())); //update view
return null; return null;
} }
@ -408,6 +413,10 @@ public class Player implements FieldVisitor<Void>{
return state.rollDice(); return state.rollDice();
} }
private void visitEvent() {
getHandler().getLogic().getBoardManager().getFieldAtIndex(36).accept(this);
}
/** /**
* A interface representing the PlayerStates * A interface representing the PlayerStates
*/ */
@ -519,6 +528,7 @@ public class Player implements FieldVisitor<Void>{
@Override @Override
public DiceResult rollDice() { public DiceResult rollDice() {
visitEvent();
return null; return null;
} }

View File

@ -2,36 +2,24 @@ package pp.monopoly.message.server;
import com.jme3.network.serializing.Serializable; import com.jme3.network.serializing.Serializable;
import pp.monopoly.game.server.PlayerColor; import pp.monopoly.game.server.PlayerHandler;
@Serializable @Serializable
public class PlayerStatusUpdate extends ServerMessage{ public class PlayerStatusUpdate extends ServerMessage{
private String playerName; private PlayerHandler playerHandler;
private String status;
private PlayerColor color;
/** /**
* Default constructor for serialization purposes. * Default constructor for serialization purposes.
*/ */
private PlayerStatusUpdate() { /* empty */ } private PlayerStatusUpdate() { /* empty */ }
public PlayerStatusUpdate(String playerName, String status, PlayerColor color) { public PlayerStatusUpdate(PlayerHandler playerHandler) {
this.playerName = playerName; this.playerHandler = playerHandler;
this.status = status;
this.color = color;
} }
public String getPlayerName() { public PlayerHandler getPlayerHandler() {
return playerName; return playerHandler;
}
public String getStatus() {
return status;
}
public PlayerColor getColor() {
return color;
} }
@Override @Override

View File

@ -48,6 +48,8 @@ public class DeckHelper{
cards.add(new Card("Du hast eine Party veranstaltet und dick Gewinn gemacht. Ziehe ein: 1500 EUR", "party-gewinn")); cards.add(new Card("Du hast eine Party veranstaltet und dick Gewinn gemacht. Ziehe ein: 1500 EUR", "party-gewinn"));
cards.add(new Card("Zur falschen Zeit am falschen Ort. Du musst einen Bergmarsch planen und setzt eine Runde aus.", "bergmarsch")); cards.add(new Card("Zur falschen Zeit am falschen Ort. Du musst einen Bergmarsch planen und setzt eine Runde aus.", "bergmarsch"));
cards.add(new Card("Dein Jodel eines Eispenis mit Unterhodenbeleuchtung geht viral. Ziehe ein: 1000 EUR", "jodel-eispenis")); cards.add(new Card("Dein Jodel eines Eispenis mit Unterhodenbeleuchtung geht viral. Ziehe ein: 1000 EUR", "jodel-eispenis"));
shuffle();
} }
public void visit(Card card, Player player) { public void visit(Card card, Player player) {
@ -203,7 +205,7 @@ public class DeckHelper{
} }
private void namensschildTruppenkueche(Player player) { private void namensschildTruppenkueche(Player player) {
//TODO //TODO 10 existiert nicht mehr
} }
private void spendierhosenUnibar(Player player) { private void spendierhosenUnibar(Player player) {

View File

@ -0,0 +1,10 @@
package pp.monopoly.notification;
public record EventCardEvent(String description) implements GameEvent{
@Override
public void notifyListener(GameEventListener listener) {
listener.receivedEvent(this);
}
}

View File

@ -58,5 +58,12 @@ public interface GameEventListener {
* *
* @param event the received event * @param event the received event
*/ */
default void receivedEvent(UpdatePlayerView event) { /*Do nothing */} default void receivedEvent(UpdatePlayerView event) { /*Do nothing */}
/**
* Indicates that an event card has been drawn
*
* @param event the received event
*/
default void receivedEvent(EventCardEvent event) { /*Do nothing */}
} }

View File

@ -38,8 +38,10 @@ import pp.monopoly.message.client.TradeOffer;
import pp.monopoly.message.client.TradeResponse; import pp.monopoly.message.client.TradeResponse;
import pp.monopoly.message.client.ViewAssetsRequest; import pp.monopoly.message.client.ViewAssetsRequest;
import pp.monopoly.message.server.DiceResult; import pp.monopoly.message.server.DiceResult;
import pp.monopoly.message.server.EventDrawCard;
import pp.monopoly.message.server.GameStart; import pp.monopoly.message.server.GameStart;
import pp.monopoly.message.server.NextPlayerTurn; import pp.monopoly.message.server.NextPlayerTurn;
import pp.monopoly.message.server.PlayerStatusUpdate;
import pp.monopoly.message.server.ServerMessage; import pp.monopoly.message.server.ServerMessage;
import pp.monopoly.model.Figure; import pp.monopoly.model.Figure;
import pp.monopoly.model.IntPoint; import pp.monopoly.model.IntPoint;
@ -132,6 +134,8 @@ public class MonopolyServer implements MessageListener<HostedConnection>, Connec
Serializer.registerClass(Figure.class); Serializer.registerClass(Figure.class);
Serializer.registerClass(PlayerHandler.class); Serializer.registerClass(PlayerHandler.class);
Serializer.registerClass(DiceResult.class); Serializer.registerClass(DiceResult.class);
Serializer.registerClass(EventDrawCard.class);
Serializer.registerClass(PlayerStatusUpdate.class);
} }
private void registerListeners() { private void registerListeners() {