mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-29 03:09:46 +01:00
event card complete
This commit is contained in:
parent
9e595b92ba
commit
6d72a94fe4
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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) {
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package pp.monopoly.notification;
|
||||||
|
|
||||||
|
public record EventCardEvent(String description) implements GameEvent{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyListener(GameEventListener listener) {
|
||||||
|
listener.receivedEvent(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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 */}
|
||||||
}
|
}
|
||||||
|
@ -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() {
|
||||||
|
Loading…
Reference in New Issue
Block a user