Merge remote-tracking branch 'origin/gui' into gui

This commit is contained in:
Yvonne Schmidt 2024-11-18 07:27:21 +01:00
commit cc47acbd3f
2 changed files with 95 additions and 38 deletions

View File

@ -5,51 +5,55 @@ import com.jme3.math.Vector3f;
import com.jme3.renderer.Camera;
/**
* CameraController steuert die Bewegung der Kamera in einem Kreis um eine Zielposition.
* Steuert die Kamerabewegung in der Szene.
*/
public class CameraController {
private final Camera camera; // Die Kamera, die gesteuert wird
private final Vector3f target; // Zielpunkt, den die Kamera fokussieren soll
private final float radius; // Radius des Kreises
private final float height; // Höhe der Kamera über dem Zielpunkt
private final float speed; // Geschwindigkeit der Bewegung in Radiant pro Sekunde
private float angle = 0; // Aktueller Winkel der Kamera in Radiant
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
/**
* Erstellt einen neuen CameraController.
* Konstruktor für den CameraController.
*
* @param camera Die Kamera, die gesteuert wird
* @param target Der Punkt, auf den die Kamera ausgerichtet wird
* @param radius Der Radius des Kreises, auf dem sich die Kamera bewegt
* @param height Die Höhe der Kamera über dem Zielpunkt
* @param speed Die Geschwindigkeit der Bewegung in Radiant pro Sekunde
* @param camera Die Kamera, die gesteuert werden soll
* @param center Der Mittelpunkt der Kreisbewegung (Fokuspunkt)
* @param radius Der Radius der Kreisbewegung
* @param height Die Höhe der Kamera über dem Fokuspunkt
* @param speed Die Geschwindigkeit der Kamerabewegung
*/
public CameraController(Camera camera, Vector3f target, float radius, float height, float speed) {
public CameraController(Camera camera, Vector3f center, float radius, float height, float speed) {
this.camera = camera;
this.target = target;
this.center = center;
this.radius = radius;
this.height = height;
this.speed = speed;
this.angle = 0; // Starte bei Winkel 0
}
/**
* Aktualisiert die Kameraposition basierend auf der verstrichenen Zeit.
* Aktualisiert die Kameraposition und -ausrichtung.
*
* @param tpf Zeit pro Frame
*/
public void update(float tpf) {
angle += speed * tpf; // Winkel basierend auf Geschwindigkeit und Zeit erhöhen
if (angle > FastMath.TWO_PI) {
angle -= FastMath.TWO_PI; // Zurücksetzen, um Überlauf zu vermeiden
// Aktualisiere den Winkel basierend auf der Geschwindigkeit
angle += speed * tpf;
if (angle >= FastMath.TWO_PI) {
angle -= FastMath.TWO_PI; // Winkel zurücksetzen, um Überläufe zu vermeiden
}
// Berechne die neue Kameraposition auf der Kreisbahn
float x = FastMath.cos(angle) * radius;
float z = FastMath.sin(angle) * radius;
// Berechne die neue Position der Kamera
float x = center.x + radius * FastMath.cos(angle);
float z = center.z + radius * FastMath.sin(angle);
float y = center.y + height;
// Setze die neue Position der Kamera
camera.setLocation(new Vector3f(x, height, z));
camera.lookAt(target, Vector3f.UNIT_Y); // Kamera bleibt auf das Ziel fokussiert
// Setze die Kameraposition
camera.setLocation(new Vector3f(x, y, z));
// Lasse die Kamera auf den Fokuspunkt blicken
camera.lookAt(center, Vector3f.UNIT_Y);
}
}

View File

@ -1,6 +1,9 @@
package pp.monopoly.client.gui;
import com.jme3.font.BitmapFont;
import com.jme3.font.BitmapText;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
@ -9,8 +12,8 @@ import com.jme3.texture.Texture;
import pp.monopoly.client.MonopolyApp;
/**
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat.
* Die Kamera wird durch den CameraController gesteuert.
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat und einem kleinen Würfel.
* Die Kamera wird durch den CameraController gesteuert, und die Koordinaten des Würfels werden angezeigt.
*/
public class TestWorld {
@ -34,18 +37,16 @@ public class TestWorld {
app.getRootNode().detachAllChildren(); // Entferne andere Szenenobjekte
createBoard(); // Erstelle das Spielfeld
createCube(); // Füge den Würfel hinzu
// Erstelle den CameraController
// Übergib die Kamerasteuerung an CameraController
cameraController = new CameraController(
app.getCamera(), // Die Kamera der App
Vector3f.ZERO, // Fokus auf die Mitte des Spielfelds
5, // Radius des Kreises
3, // Höhe der Kamera
0.5f // Geschwindigkeit der Bewegung
app.getCamera(), // Die Kamera der App
Vector3f.ZERO, // Fokus auf die Mitte des Spielfelds
5, // Radius des Kreises
3, // Höhe der Kamera
0.5f // Geschwindigkeit der Bewegung
);
// Deaktiviere den Maus-Cursor
app.enqueue(() -> app.getInputManager().setCursorVisible(false));
}
/**
@ -65,7 +66,7 @@ public class TestWorld {
private void createBoard() {
// Erstelle ein Quadrat
Box box = new Box(1, 0.01f, 1); // Dünnes Quadrat für die Textur
Geometry geom = new Geometry("Box", box);
Geometry geom = new Geometry("Board", box);
// Setze das Material mit Textur
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
@ -75,4 +76,56 @@ public class TestWorld {
app.getRootNode().attachChild(geom);
}
/**
* Füge einen kleinen blauen 3D-Würfel hinzu und zeige seine Koordinaten an.
*/
private void createCube() {
// Erstelle einen kleinen 3D-Würfel
Box cube = new Box(0.1f, 0.1f, 0.1f); // Sehr kleine Kantenlänge
Geometry cubeGeom = new Geometry("PlayerPiece", cube);
// Erstelle ein Material mit einer blauen Farbe
Material cubeMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
cubeMat.setColor("Color", ColorRGBA.Blue); // Blaue Farbe
cubeGeom.setMaterial(cubeMat);
// Positioniere den Würfel
float boardWidth = 1; // Breite des Bretts (aus `createBoard`)
float boardDepth = 1; // Tiefe des Bretts (aus `createBoard`)
Vector3f cubePosition = new Vector3f(
boardWidth + 0.3f, // Verschiebe den Würfel nach rechts
0.1f, // Höhe knapp über dem Brett
boardDepth - 0.3f // Position in Richtung der unteren rechten Ecke
);
cubeGeom.setLocalTranslation(cubePosition);
// Füge den Würfel zur Szene hinzu
app.getRootNode().attachChild(cubeGeom);
// Zeige die Koordinaten des Würfels an
displayCubeCoordinates(cubePosition);
}
/**
* Zeige die Koordinaten des Würfels im GUI an.
*
* @param position Die Position des Würfels
*/
private void displayCubeCoordinates(Vector3f position) {
// Lade die Schriftart
BitmapFont font = app.getAssetManager().loadFont("Interface/Fonts/Default.fnt");
BitmapText coordinatesText = new BitmapText(font);
// Setze den Text mit den Koordinaten
coordinatesText.setText(String.format("Würfel Koordinaten: X=%.2f, Y=%.2f, Z=%.2f",
position.x, position.y, position.z));
// Positioniere den Text auf dem Bildschirm
coordinatesText.setLocalTranslation(10, app.getCamera().getHeight() - 10, 0); // X, Y (oben links)
coordinatesText.setSize(font.getCharSet().getRenderedSize() * 1.5f); // Schriftgröße
// Füge den Text zum GUI-Node hinzu
app.getGuiNode().attachChild(coordinatesText);
}
}