diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameAppState.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameAppState.java index 01a264c..c474659 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameAppState.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/GameAppState.java @@ -71,11 +71,9 @@ public class GameAppState extends MonopolyAppState { * Creates the opponent's map view and adds a grid overlay to it. */ private void initializeGuiComponents() { - // Abrufen der Spielerliste aus der ClientGameLogic - List players = getApp().getGameLogic().getPlayerHandler().getPlayers(); // Initialisiere TestWorld mit Spielern - testWorld = new TestWorld(getApp(), players); + testWorld = new TestWorld(getApp()); testWorld.initializeScene(); } @@ -109,7 +107,7 @@ public class GameAppState extends MonopolyAppState { @Override public void update(float tpf) { - testWorld.update(tpf); + // testWorld.update(tpf); super.update(tpf); } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java index b713c1d..b3bc086 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/MonopolyApp.java @@ -337,6 +337,7 @@ public class MonopolyApp extends SimpleApplication implements MonopolyClient, Ga super.simpleUpdate(tpf); dialogManager.update(tpf); logic.update(tpf); + stateManager.update(tpf); //TODO testing replace later if (testWorld != null) { diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CameraController.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CameraController.java index a2d04cf..61fe44c 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CameraController.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/CameraController.java @@ -1,6 +1,5 @@ package pp.monopoly.client.gui; -import com.jme3.math.FastMath; import com.jme3.math.Vector3f; import com.jme3.renderer.Camera; @@ -9,11 +8,7 @@ import com.jme3.renderer.Camera; */ public class CameraController { private final Camera camera; - 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 + private final float height = 25; // Höhe der Kamera über dem Spielfeld // Aktueller Winkel in der Kreisbewegung /** * Konstruktor für den CameraController. @@ -24,13 +19,10 @@ public class CameraController { * @param height Die Höhe der Kamera über dem Fokuspunkt * @param speed Die Geschwindigkeit der Kamerabewegung */ - public CameraController(Camera camera, Vector3f center, float radius, float height, float speed) { + public CameraController(Camera camera) { this.camera = camera; - this.center = center; - this.radius = radius; - this.height = height; - this.speed = speed; - this.angle = 0; // Starte bei Winkel 0 + setPosition(0); + camera.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y); } /** @@ -39,7 +31,7 @@ public class CameraController { * @param tpf Zeit pro Frame */ public void update(float tpf) { - camera.lookAt(center, Vector3f.UNIT_Y); + camera.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y); } public void setPosition(int fieldID) { diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/TestWorld.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/TestWorld.java index 6d4b485..2cbcb60 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/TestWorld.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/TestWorld.java @@ -2,6 +2,8 @@ package pp.monopoly.client.gui; import java.util.List; +import com.jme3.math.Vector3f; + import pp.monopoly.client.MonopolyApp; import pp.monopoly.client.gui.popups.BuyCard; import pp.monopoly.client.gui.popups.EventCardPopup; @@ -11,12 +13,14 @@ import pp.monopoly.client.gui.popups.LooserPopUp; import pp.monopoly.client.gui.popups.TimeOut; import pp.monopoly.client.gui.popups.WinnerPopUp; import pp.monopoly.game.server.Player; +import pp.monopoly.game.server.PlayerHandler; import pp.monopoly.model.fields.BuildingProperty; import pp.monopoly.model.fields.FoodField; import pp.monopoly.model.fields.GateField; import pp.monopoly.notification.EventCardEvent; import pp.monopoly.notification.GameEventListener; import pp.monopoly.notification.PopUpEvent; +import pp.monopoly.notification.UpdatePlayerView; /** * TestWorld zeigt eine einfache Szene mit Spielfeld und Spielfiguren. @@ -24,7 +28,7 @@ import pp.monopoly.notification.PopUpEvent; public class TestWorld implements GameEventListener{ private final MonopolyApp app; - private final List players; // Liste der Spieler, bereits aus GameStart geladen + private PlayerHandler playerHandler; // Liste der Spieler, bereits aus GameStart geladen private CameraController cameraController; private Toolbar toolbar; @@ -34,10 +38,11 @@ public class TestWorld implements GameEventListener{ * @param app Die Hauptanwendung * @param players Die Liste der Spieler mit ihren Figuren */ - public TestWorld(MonopolyApp app, List players) { + public TestWorld(MonopolyApp app) { this.app = app; - this.players = players; + this.playerHandler = app.getGameLogic().getPlayerHandler(); app.getGameLogic().addListener(this); + cameraController = new CameraController(app.getCamera()); } /** @@ -54,7 +59,6 @@ public class TestWorld implements GameEventListener{ setSkyColor(); createBoard(); createPlayerFigures(); // Lädt Figuren aus der bereits vorhandenen Liste - setupCamera(); toolbar = new Toolbar(app); toolbar.open(); } @@ -95,8 +99,8 @@ public class TestWorld implements GameEventListener{ * Erstellt die Spielfiguren basierend auf der bereits bekannten Spielerliste. */ private void createPlayerFigures() { - for (int i = 0; i < players.size(); i++) { - Player player = players.get(i); + for (int i = 0; i < playerHandler.getPlayers().size(); i++) { + Player player = playerHandler.getPlayers().get(i); try { // Lade das 3D-Modell der Spielfigur com.jme3.scene.Spatial model = app.getAssetManager().loadModel("Models/" + player.getFigure().getType() + "/" + player.getFigure().getType() + ".j3o"); @@ -116,15 +120,6 @@ 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. * @@ -162,4 +157,11 @@ public class TestWorld implements GameEventListener{ public void receivedEvent(EventCardEvent event) { 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); + } } diff --git a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java index 73e67b8..7712d78 100644 --- a/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java +++ b/Projekte/monopoly/client/src/main/java/pp/monopoly/client/gui/Toolbar.java @@ -61,7 +61,7 @@ public class Toolbar extends Dialog implements GameEventListener { // Spielerfarbe abrufen Player currentPlayer = playerHandler.getPlayerById(app.getId()); - ColorRGBA playerColor = convertPlayerColor(currentPlayer.getColor()); + ColorRGBA playerColor = currentPlayer.getColor().getColor(); // Füge einen farbigen Balken hinzu Container playerColorBar = new Container(); @@ -87,18 +87,6 @@ public class Toolbar extends Dialog implements GameEventListener { 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() { @@ -249,7 +237,7 @@ public class Toolbar extends Dialog implements GameEventListener { @Override public void receivedEvent(UpdatePlayerView event) { - + playerHandler = app.getGameLogic().getPlayerHandler(); System.out.println("Update Player View"); accountContainer.clearChildren(); overviewContainer.clearChildren(); @@ -270,7 +258,7 @@ public class Toolbar extends Dialog implements GameEventListener { for (Player player : playerHandler.getPlayers()) { if (player.getId() != app.getId()) { // Spielerfarbe abrufen - ColorRGBA playerColor = convertPlayerColor(player.getColor()); + ColorRGBA playerColor = (player.getColor().getColor()); // Label für den Spieler erstellen Label playerLabel = new Label(