update view

This commit is contained in:
Johannes Schmelz 2024-11-29 18:27:25 +01:00
parent 44d64c4e0f
commit f0eeff3493
5 changed files with 28 additions and 47 deletions

View File

@ -71,11 +71,9 @@ 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(), players); testWorld = new TestWorld(getApp());
testWorld.initializeScene(); testWorld.initializeScene();
} }
@ -109,7 +107,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,6 +337,7 @@ 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,6 +1,5 @@
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;
@ -9,11 +8,7 @@ import com.jme3.renderer.Camera;
*/ */
public class CameraController { public class CameraController {
private final Camera camera; private final Camera camera;
private final Vector3f center; // Fokuspunkt der Kamera private final float height = 25; // Höhe der Kamera über dem Spielfeld // Aktueller Winkel in der Kreisbewegung
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.
@ -24,13 +19,10 @@ 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, Vector3f center, float radius, float height, float speed) { public CameraController(Camera camera) {
this.camera = camera; this.camera = camera;
this.center = center; setPosition(0);
this.radius = radius; camera.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
this.height = height;
this.speed = speed;
this.angle = 0; // Starte bei Winkel 0
} }
/** /**
@ -39,7 +31,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(center, Vector3f.UNIT_Y); camera.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
} }
public void setPosition(int fieldID) { public void setPosition(int fieldID) {

View File

@ -2,6 +2,8 @@ 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;
@ -11,12 +13,14 @@ 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.
@ -24,7 +28,7 @@ import pp.monopoly.notification.PopUpEvent;
public class TestWorld implements GameEventListener{ public class TestWorld implements GameEventListener{
private final MonopolyApp app; private final MonopolyApp app;
private final List<Player> players; // Liste der Spieler, bereits aus GameStart geladen private PlayerHandler playerHandler; // Liste der Spieler, bereits aus GameStart geladen
private CameraController cameraController; private CameraController cameraController;
private Toolbar toolbar; private Toolbar toolbar;
@ -34,10 +38,11 @@ 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, List<Player> players) { public TestWorld(MonopolyApp app) {
this.app = app; this.app = app;
this.players = players; this.playerHandler = app.getGameLogic().getPlayerHandler();
app.getGameLogic().addListener(this); app.getGameLogic().addListener(this);
cameraController = new CameraController(app.getCamera());
} }
/** /**
@ -54,7 +59,6 @@ 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();
} }
@ -95,8 +99,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 < players.size(); i++) { for (int i = 0; i < playerHandler.getPlayers().size(); i++) {
Player player = players.get(i); Player player = playerHandler.getPlayers().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");
@ -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. * Wird bei jedem Frame aufgerufen, um die Szene zu aktualisieren.
* *
@ -162,4 +157,11 @@ 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 = convertPlayerColor(currentPlayer.getColor()); ColorRGBA playerColor = currentPlayer.getColor().getColor();
// Füge einen farbigen Balken hinzu // Füge einen farbigen Balken hinzu
Container playerColorBar = new Container(); Container playerColorBar = new Container();
@ -88,18 +88,6 @@ 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));
@ -249,7 +237,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();
@ -270,7 +258,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 = convertPlayerColor(player.getColor()); ColorRGBA playerColor = (player.getColor().getColor());
// Label für den Spieler erstellen // Label für den Spieler erstellen
Label playerLabel = new Label( Label playerLabel = new Label(