figuren drehen

This commit is contained in:
Luca Puderbach 2024-12-02 05:15:47 +01:00
parent e93791e6e8
commit af79e39492

View File

@ -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<Vector3f> 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.");
}