Compare commits

..

No commits in common. "fba82f670be2a58907ed6d7f44908e14246c3526" and "44d64c4e0f09ade7920190d906ecddcb93aa9cfe" have entirely different histories.

8 changed files with 49 additions and 38 deletions

View File

@ -71,9 +71,11 @@ public class GameAppState extends MonopolyAppState {
* Creates the opponent's map view and adds a grid overlay to it. * Creates the opponent's map view and adds a grid overlay to it.
*/ */
private void initializeGuiComponents() { private void initializeGuiComponents() {
// Abrufen der Spielerliste aus der ClientGameLogic
List<Player> players = getApp().getGameLogic().getPlayerHandler().getPlayers();
// Initialisiere TestWorld mit Spielern // Initialisiere TestWorld mit Spielern
testWorld = new TestWorld(getApp()); testWorld = new TestWorld(getApp(), players);
testWorld.initializeScene(); testWorld.initializeScene();
} }
@ -107,7 +109,7 @@ public class GameAppState extends MonopolyAppState {
@Override @Override
public void update(float tpf) { public void update(float tpf) {
// testWorld.update(tpf); testWorld.update(tpf);
super.update(tpf); super.update(tpf);
} }
} }

View File

@ -337,7 +337,6 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga
super.simpleUpdate(tpf); super.simpleUpdate(tpf);
dialogManager.update(tpf); dialogManager.update(tpf);
logic.update(tpf); logic.update(tpf);
stateManager.update(tpf);
//TODO testing replace later //TODO testing replace later
if (testWorld != null) { if (testWorld != null) {

View File

@ -1,5 +1,6 @@
package pp.monopoly.client.gui; package pp.monopoly.client.gui;
import com.jme3.math.FastMath;
import com.jme3.math.Vector3f; import com.jme3.math.Vector3f;
import com.jme3.renderer.Camera; import com.jme3.renderer.Camera;
@ -8,7 +9,11 @@ import com.jme3.renderer.Camera;
*/ */
public class CameraController { public class CameraController {
private final Camera camera; private final Camera camera;
private final float height = 25; // Höhe der Kamera über dem Spielfeld // Aktueller Winkel in der Kreisbewegung private final Vector3f center; // Fokuspunkt der Kamera
private final float radius; // Radius der Kreisbewegung
private final float height; // Höhe der Kamera über dem Spielfeld
private final float speed; // Geschwindigkeit der Kamerabewegung
private float angle; // Aktueller Winkel in der Kreisbewegung
/** /**
* Konstruktor für den CameraController. * Konstruktor für den CameraController.
@ -19,10 +24,13 @@ public class CameraController {
* @param height Die Höhe der Kamera über dem Fokuspunkt * @param height Die Höhe der Kamera über dem Fokuspunkt
* @param speed Die Geschwindigkeit der Kamerabewegung * @param speed Die Geschwindigkeit der Kamerabewegung
*/ */
public CameraController(Camera camera) { public CameraController(Camera camera, Vector3f center, float radius, float height, float speed) {
this.camera = camera; this.camera = camera;
setPosition(0); this.center = center;
camera.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y); this.radius = radius;
this.height = height;
this.speed = speed;
this.angle = 0; // Starte bei Winkel 0
} }
/** /**
@ -31,7 +39,7 @@ public class CameraController {
* @param tpf Zeit pro Frame * @param tpf Zeit pro Frame
*/ */
public void update(float tpf) { public void update(float tpf) {
camera.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y); camera.lookAt(center, Vector3f.UNIT_Y);
} }
public void setPosition(int fieldID) { public void setPosition(int fieldID) {

View File

@ -2,8 +2,6 @@ package pp.monopoly.client.gui;
import java.util.List; import java.util.List;
import com.jme3.math.Vector3f;
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.EventCardPopup;
@ -13,14 +11,12 @@ import pp.monopoly.client.gui.popups.LooserPopUp;
import pp.monopoly.client.gui.popups.TimeOut; import pp.monopoly.client.gui.popups.TimeOut;
import pp.monopoly.client.gui.popups.WinnerPopUp; import pp.monopoly.client.gui.popups.WinnerPopUp;
import pp.monopoly.game.server.Player; import pp.monopoly.game.server.Player;
import pp.monopoly.game.server.PlayerHandler;
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.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;
import pp.monopoly.notification.UpdatePlayerView;
/** /**
* TestWorld zeigt eine einfache Szene mit Spielfeld und Spielfiguren. * TestWorld zeigt eine einfache Szene mit Spielfeld und Spielfiguren.
@ -28,7 +24,7 @@ import pp.monopoly.notification.UpdatePlayerView;
public class TestWorld implements GameEventListener{ public class TestWorld implements GameEventListener{
private final MonopolyApp app; private final MonopolyApp app;
private PlayerHandler playerHandler; // 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; private Toolbar toolbar;
@ -38,11 +34,10 @@ public class TestWorld implements GameEventListener{
* @param app Die Hauptanwendung * @param app Die Hauptanwendung
* @param players Die Liste der Spieler mit ihren Figuren * @param players Die Liste der Spieler mit ihren Figuren
*/ */
public TestWorld(MonopolyApp app) { public TestWorld(MonopolyApp app, List<Player> players) {
this.app = app; this.app = app;
this.playerHandler = app.getGameLogic().getPlayerHandler(); this.players = players;
app.getGameLogic().addListener(this); app.getGameLogic().addListener(this);
cameraController = new CameraController(app.getCamera());
} }
/** /**
@ -59,6 +54,7 @@ public class TestWorld implements GameEventListener{
setSkyColor(); setSkyColor();
createBoard(); createBoard();
createPlayerFigures(); // Lädt Figuren aus der bereits vorhandenen Liste createPlayerFigures(); // Lädt Figuren aus der bereits vorhandenen Liste
setupCamera();
toolbar = new Toolbar(app); toolbar = new Toolbar(app);
toolbar.open(); toolbar.open();
} }
@ -99,8 +95,8 @@ public class TestWorld implements GameEventListener{
* Erstellt die Spielfiguren basierend auf der bereits bekannten Spielerliste. * Erstellt die Spielfiguren basierend auf der bereits bekannten Spielerliste.
*/ */
private void createPlayerFigures() { private void createPlayerFigures() {
for (int i = 0; i < playerHandler.getPlayers().size(); i++) { for (int i = 0; i < players.size(); i++) {
Player player = playerHandler.getPlayers().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() + "/" + player.getFigure().getType() + ".j3o");
@ -120,6 +116,15 @@ public class TestWorld implements GameEventListener{
} }
} }
/**
* Richtet die Kamera auf das Spielfeld aus.
*/
private void setupCamera() {
app.getCamera().setLocation(new com.jme3.math.Vector3f(0, 20, 20)); // Über dem Spielfeld
app.getCamera().lookAt(new com.jme3.math.Vector3f(0, 0, 0), com.jme3.math.Vector3f.UNIT_Y); // Fokus auf Spielfeldmitte
System.out.println("Kamera eingerichtet.");
}
/** /**
* Wird bei jedem Frame aufgerufen, um die Szene zu aktualisieren. * Wird bei jedem Frame aufgerufen, um die Szene zu aktualisieren.
* *
@ -157,11 +162,4 @@ public class TestWorld implements GameEventListener{
public void receivedEvent(EventCardEvent event) { public void receivedEvent(EventCardEvent event) {
new EventCardPopup(app, event.description()).open(); new EventCardPopup(app, event.description()).open();
} }
@Override
public void receivedEvent(UpdatePlayerView event) {
this.playerHandler = app.getGameLogic().getPlayerHandler();
cameraController.setPosition(playerHandler.getPlayerById(app.getId()).getFieldID());
cameraController.update(0);
}
} }

View File

@ -61,7 +61,7 @@ public class Toolbar extends Dialog implements GameEventListener {
// Spielerfarbe abrufen // Spielerfarbe abrufen
Player currentPlayer = playerHandler.getPlayerById(app.getId()); Player currentPlayer = playerHandler.getPlayerById(app.getId());
ColorRGBA playerColor = currentPlayer.getColor().getColor(); ColorRGBA playerColor = convertPlayerColor(currentPlayer.getColor());
// Füge einen farbigen Balken hinzu // Füge einen farbigen Balken hinzu
Container playerColorBar = new Container(); Container playerColorBar = new Container();
@ -88,6 +88,18 @@ 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));
@ -237,7 +249,7 @@ public class Toolbar extends Dialog implements GameEventListener {
@Override @Override
public void receivedEvent(UpdatePlayerView event) { public void receivedEvent(UpdatePlayerView event) {
playerHandler = app.getGameLogic().getPlayerHandler();
System.out.println("Update Player View"); System.out.println("Update Player View");
accountContainer.clearChildren(); accountContainer.clearChildren();
overviewContainer.clearChildren(); overviewContainer.clearChildren();
@ -258,7 +270,7 @@ public class Toolbar extends Dialog implements GameEventListener {
for (Player player : playerHandler.getPlayers()) { for (Player player : playerHandler.getPlayers()) {
if (player.getId() != app.getId()) { if (player.getId() != app.getId()) {
// Spielerfarbe abrufen // Spielerfarbe abrufen
ColorRGBA playerColor = (player.getColor().getColor()); ColorRGBA playerColor = convertPlayerColor(player.getColor());
// Label für den Spieler erstellen // Label für den Spieler erstellen
Label playerLabel = new Label( Label playerLabel = new Label(

View File

@ -44,7 +44,7 @@ public class LooserPopUp extends Dialog {
Button cancelButton = inputContainer.addChild(new Button("Spiel beenden")); Button cancelButton = inputContainer.addChild(new Button("Spiel beenden"));
cancelButton.addClickCommands(source -> ifTopDialog(app::closeApp)); cancelButton.addClickCommands(source -> ifTopDialog(app::closeApp));
inputContainer.setLocalTranslation(300, 800, 10); inputContainer.setLocalTranslation(300, 800, 0);
app.getGuiNode().attachChild(inputContainer); app.getGuiNode().attachChild(inputContainer);
} }

View File

@ -11,8 +11,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import javax.swing.JInternalFrame;
import com.jme3.network.serializing.Serializable; import com.jme3.network.serializing.Serializable;
import pp.monopoly.message.server.BuyPropertyRequest; import pp.monopoly.message.server.BuyPropertyRequest;
@ -338,6 +336,7 @@ public class Player implements FieldVisitor<Void>{
@Override @Override
public Void visit(GulagField field) { public Void visit(GulagField field) {
state = new JailState();
return null; return null;
} }
@ -359,7 +358,6 @@ public class Player implements FieldVisitor<Void>{
@Override @Override
public Void visit(WacheField field) { public Void visit(WacheField field) {
setPosition(10); setPosition(10);
jail();
return null; return null;
} }
@ -388,10 +386,6 @@ public class Player implements FieldVisitor<Void>{
return properties; return properties;
} }
public void jail() {
state = new JailState();
}
/** /**
* Return the number of Properties of the speciefied fild type * Return the number of Properties of the speciefied fild type
* @param field the type of field to search for * @param field the type of field to search for

View File

@ -243,12 +243,10 @@ public class DeckHelper{
private void schimmelGulak(Player player) { private void schimmelGulak(Player player) {
player.setPosition(10); player.setPosition(10);
player.jail();
} }
private void partynachtGulak(Player player) { private void partynachtGulak(Player player) {
player.setPosition(10); player.setPosition(10);
player.jail();
} }
private void jahresabschlussantreten(Player player) { private void jahresabschlussantreten(Player player) {