From af79e3949260f9f67692a4c8328a5c025c65c9ee Mon Sep 17 00:00:00 2001 From: Luca Puderbach Date: Mon, 2 Dec 2024 05:15:47 +0100 Subject: [PATCH] figuren drehen --- .../pp/monopoly/client/gui/TestWorld.java | 65 +++++++++++-------- 1 file changed, 38 insertions(+), 27 deletions(-) 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 b1a02fb..eabb48b 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 @@ -131,6 +131,26 @@ public class TestWorld implements GameEventListener { app.getRootNode().addLight(ambient); } + private com.jme3.math.Quaternion calculateRotationForField(int fieldID) { + com.jme3.math.Quaternion rotation = new com.jme3.math.Quaternion(); + + if (fieldID >= 0 && fieldID <= 9) { + // Untere Seite (0-9) + rotation.fromAngleAxis(0, Vector3f.UNIT_Y); // Richtung: nach oben + } else if (fieldID >= 10 && fieldID <= 19) { + // Rechte Seite (10-19) + rotation.fromAngleAxis(FastMath.HALF_PI, Vector3f.UNIT_Y); // Richtung: nach links + } else if (fieldID >= 20 && fieldID <= 29) { + // Obere Seite (20-29) + rotation.fromAngleAxis(FastMath.PI, Vector3f.UNIT_Y); // Richtung: nach unten + } else if (fieldID >= 30 && fieldID <= 39) { + // Linke Seite (30-39) + rotation.fromAngleAxis(3 * FastMath.HALF_PI, Vector3f.UNIT_Y); // Richtung: nach rechts + } + + return rotation; + } + /** * Erstellt die Spielfiguren basierend auf der bereits bekannten Spielerliste. */ @@ -141,17 +161,14 @@ public class TestWorld implements GameEventListener { com.jme3.scene.Spatial model = app.getAssetManager().loadModel( "models/" + "Spielfiguren/" + player.getFigure().getType() + "/" + player.getFigure().getType() + ".j3o"); - // Setze das Material mit silberner Farbe - Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Light/Lighting.j3md"); - //mat.setColor("Diffuse", new com.jme3.math.ColorRGBA(0.45f, 0.45f, 0.45f, 1.0f)); // Silberne Farbe - //mat.setColor("Specular", new com.jme3.math.ColorRGBA(0.6f, 0.6f, 0.6f, 1.0f)); // Glanzlicht - //mat.setFloat("Shininess", 64f); // Höhere Werte machen das Material glänzender - //model.setMaterial(mat); - // Skaliere und positioniere das Modell model.setLocalScale(0.5f); Vector3f startPosition = calculateFieldPosition(player.getFieldID(), player.getId()); model.setLocalTranslation(startPosition); + + // Setze die Rotation basierend auf der Feld-ID + model.setLocalRotation(calculateRotationForField(player.getFieldID())); + model.setName("PlayerFigure_" + player.getId()); // Füge das Modell zur Szene hinzu @@ -223,27 +240,21 @@ public class TestWorld implements GameEventListener { com.jme3.scene.Spatial figure = app.getRootNode().getChild(figureName); if (figure != null) { - // Berechne das aktuelle Feld basierend auf der Position der Figur - int startFieldID = getFieldIDFromPosition(figure.getLocalTranslation()); - int targetFieldID = player.getFieldID(); + // Füge einen Delay hinzu (z.B. 3 Sekunden) + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + app.enqueue(() -> { + // Setze die Position + Vector3f targetPosition = calculateFieldPosition(player.getFieldID(), player.getId()); + figure.setLocalTranslation(targetPosition); - // Bewege die Figur nur, wenn das Ziel-Feld unterschiedlich ist - if (startFieldID != targetFieldID) { - // Verzögerung vor Start der Animation (z.B. 3 Sekunden) - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - // Berechne den Pfad basierend auf den Feld-IDs - List pathPoints = calculatePath(startFieldID, targetFieldID, playerIndexOnField); - - // Starte die Animation entlang des Pfads - animateMovementAlongPath(figure, pathPoints); - } - }, 3000); // Verzögerung von 3000ms (3 Sekunden) - } else { - System.out.println("Figur für Spieler " + player.getId() + " bleibt auf dem gleichen Feld."); - } + // Aktualisiere die Rotation basierend auf der Feld-ID + figure.setLocalRotation(calculateRotationForField(player.getFieldID())); + }); + } + }, 3000); // 3000 Millisekunden Delay } else { System.err.println("Figur für Spieler " + player.getId() + " nicht gefunden."); }