mirror of
https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
synced 2024-11-25 01:09:46 +01:00
Hinzugefügt Kamera und 1. Spielfigut
This commit is contained in:
parent
5fde7451c8
commit
1c99da4fc5
@ -5,51 +5,55 @@ import com.jme3.math.Vector3f;
|
|||||||
import com.jme3.renderer.Camera;
|
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 {
|
public class CameraController {
|
||||||
|
private final Camera camera;
|
||||||
private final Camera camera; // Die Kamera, die gesteuert wird
|
private final Vector3f center; // Fokuspunkt der Kamera
|
||||||
private final Vector3f target; // Zielpunkt, den die Kamera fokussieren soll
|
private final float radius; // Radius der Kreisbewegung
|
||||||
private final float radius; // Radius des Kreises
|
private final float height; // Höhe der Kamera über dem Spielfeld
|
||||||
private final float height; // Höhe der Kamera über dem Zielpunkt
|
private final float speed; // Geschwindigkeit der Kamerabewegung
|
||||||
private final float speed; // Geschwindigkeit der Bewegung in Radiant pro Sekunde
|
private float angle; // Aktueller Winkel in der Kreisbewegung
|
||||||
private float angle = 0; // Aktueller Winkel der Kamera in Radiant
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erstellt einen neuen CameraController.
|
* Konstruktor für den CameraController.
|
||||||
*
|
*
|
||||||
* @param camera Die Kamera, die gesteuert wird
|
* @param camera Die Kamera, die gesteuert werden soll
|
||||||
* @param target Der Punkt, auf den die Kamera ausgerichtet wird
|
* @param center Der Mittelpunkt der Kreisbewegung (Fokuspunkt)
|
||||||
* @param radius Der Radius des Kreises, auf dem sich die Kamera bewegt
|
* @param radius Der Radius der Kreisbewegung
|
||||||
* @param height Die Höhe der Kamera über dem Zielpunkt
|
* @param height Die Höhe der Kamera über dem Fokuspunkt
|
||||||
* @param speed Die Geschwindigkeit der Bewegung in Radiant pro Sekunde
|
* @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.camera = camera;
|
||||||
this.target = target;
|
this.center = center;
|
||||||
this.radius = radius;
|
this.radius = radius;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.speed = speed;
|
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
|
* @param tpf Zeit pro Frame
|
||||||
*/
|
*/
|
||||||
public void update(float tpf) {
|
public void update(float tpf) {
|
||||||
angle += speed * tpf; // Winkel basierend auf Geschwindigkeit und Zeit erhöhen
|
// Aktualisiere den Winkel basierend auf der Geschwindigkeit
|
||||||
if (angle > FastMath.TWO_PI) {
|
angle += speed * tpf;
|
||||||
angle -= FastMath.TWO_PI; // Zurücksetzen, um Überlauf zu vermeiden
|
if (angle >= FastMath.TWO_PI) {
|
||||||
|
angle -= FastMath.TWO_PI; // Winkel zurücksetzen, um Überläufe zu vermeiden
|
||||||
}
|
}
|
||||||
|
|
||||||
// Berechne die neue Kameraposition auf der Kreisbahn
|
// Berechne die neue Position der Kamera
|
||||||
float x = FastMath.cos(angle) * radius;
|
float x = center.x + radius * FastMath.cos(angle);
|
||||||
float z = FastMath.sin(angle) * radius;
|
float z = center.z + radius * FastMath.sin(angle);
|
||||||
|
float y = center.y + height;
|
||||||
|
|
||||||
// Setze die neue Position der Kamera
|
// Setze die Kameraposition
|
||||||
camera.setLocation(new Vector3f(x, height, z));
|
camera.setLocation(new Vector3f(x, y, z));
|
||||||
camera.lookAt(target, Vector3f.UNIT_Y); // Kamera bleibt auf das Ziel fokussiert
|
|
||||||
|
// Lasse die Kamera auf den Fokuspunkt blicken
|
||||||
|
camera.lookAt(center, Vector3f.UNIT_Y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package pp.monopoly.client.gui;
|
package pp.monopoly.client.gui;
|
||||||
|
|
||||||
|
import com.jme3.font.BitmapFont;
|
||||||
|
import com.jme3.font.BitmapText;
|
||||||
import com.jme3.material.Material;
|
import com.jme3.material.Material;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Geometry;
|
import com.jme3.scene.Geometry;
|
||||||
import com.jme3.scene.shape.Box;
|
import com.jme3.scene.shape.Box;
|
||||||
@ -9,8 +12,8 @@ import com.jme3.texture.Texture;
|
|||||||
import pp.monopoly.client.MonopolyApp;
|
import pp.monopoly.client.MonopolyApp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat.
|
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat und einem kleinen Würfel.
|
||||||
* Die Kamera wird durch den CameraController gesteuert.
|
* Die Kamera wird durch den CameraController gesteuert, und die Koordinaten des Würfels werden angezeigt.
|
||||||
*/
|
*/
|
||||||
public class TestWorld {
|
public class TestWorld {
|
||||||
|
|
||||||
@ -34,8 +37,9 @@ public class TestWorld {
|
|||||||
app.getRootNode().detachAllChildren(); // Entferne andere Szenenobjekte
|
app.getRootNode().detachAllChildren(); // Entferne andere Szenenobjekte
|
||||||
|
|
||||||
createBoard(); // Erstelle das Spielfeld
|
createBoard(); // Erstelle das Spielfeld
|
||||||
|
createCube(); // Füge den Würfel hinzu
|
||||||
|
|
||||||
// Erstelle den CameraController
|
// Übergib die Kamerasteuerung an CameraController
|
||||||
cameraController = new CameraController(
|
cameraController = new CameraController(
|
||||||
app.getCamera(), // Die Kamera der App
|
app.getCamera(), // Die Kamera der App
|
||||||
Vector3f.ZERO, // Fokus auf die Mitte des Spielfelds
|
Vector3f.ZERO, // Fokus auf die Mitte des Spielfelds
|
||||||
@ -43,9 +47,6 @@ public class TestWorld {
|
|||||||
3, // Höhe der Kamera
|
3, // Höhe der Kamera
|
||||||
0.5f // Geschwindigkeit der Bewegung
|
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() {
|
private void createBoard() {
|
||||||
// Erstelle ein Quadrat
|
// Erstelle ein Quadrat
|
||||||
Box box = new Box(1, 0.01f, 1); // Dünnes Quadrat für die Textur
|
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
|
// Setze das Material mit Textur
|
||||||
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
|
||||||
@ -75,4 +76,56 @@ public class TestWorld {
|
|||||||
|
|
||||||
app.getRootNode().attachChild(geom);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user