Hintergrund + Felder ID hinzugefügt

This commit is contained in:
Luca Puderbach 2024-11-18 09:09:05 +01:00
parent e889a61d43
commit f97cbd778d
2 changed files with 60 additions and 50 deletions

View File

@ -1,7 +1,5 @@
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.ColorRGBA;
import com.jme3.math.Vector3f; import com.jme3.math.Vector3f;
@ -12,14 +10,14 @@ import com.jme3.texture.Texture;
import pp.monopoly.client.MonopolyApp; import pp.monopoly.client.MonopolyApp;
/** /**
* TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat und einem Würfel. * TestWorld zeigt eine einfache Szene mit einem texturierten Quadrat.
* Die Kamera wird durch den CameraController gesteuert. * Die Kamera wird durch den CameraController gesteuert.
*/ */
public class TestWorld { public class TestWorld {
private final MonopolyApp app; private final MonopolyApp app;
private CameraController cameraController; // Steuert die Kamera private CameraController cameraController; // Steuert die Kamera
private Toolbar toolbar; // Toolbar-Instanz private Geometry cube; // Spielfigur
/** /**
* Konstruktor für TestWorld. * Konstruktor für TestWorld.
@ -37,18 +35,21 @@ public class TestWorld {
app.getGuiNode().detachAllChildren(); // Entferne GUI app.getGuiNode().detachAllChildren(); // Entferne GUI
app.getRootNode().detachAllChildren(); // Entferne andere Szenenobjekte app.getRootNode().detachAllChildren(); // Entferne andere Szenenobjekte
setSkyColor(); // Setze den Himmel auf hellblau
createBoard(); // Erstelle das Spielfeld createBoard(); // Erstelle das Spielfeld
Geometry cube = createCube(); // Erstelle den Würfel und speichere ihn createCube(); // Füge den Würfel hinzu
toolbar = new Toolbar(app, cube); // Erstelle die Toolbar und übergebe den Würfel
// Übergib die Kamerasteuerung an CameraController // Erstelle den 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
3, // Radius des Kreises 5, // Radius des Kreises
2, // Höhe der Kamera 3, // Höhe der Kamera
0.05f // Geschwindigkeit der Bewegung 0.5f // Geschwindigkeit der Bewegung
); );
// Füge die Toolbar hinzu
new Toolbar(app, cube);
} }
/** /**
@ -62,6 +63,13 @@ public class TestWorld {
} }
} }
/**
* Setzt die Hintergrundfarbe der Szene auf hellblau.
*/
private void setSkyColor() {
app.getViewPort().setBackgroundColor(new ColorRGBA(0.5f, 0.7f, 1.0f, 1.0f)); // Hellblauer Himmel
}
/** /**
* Erstelle das Spielfeld. * Erstelle das Spielfeld.
*/ */
@ -80,46 +88,20 @@ public class TestWorld {
} }
/** /**
* Füge einen kleinen blauen 3D-Würfel hinzu und zeige seine Koordinaten an. * Erstellt den Würfel (Spielfigur) in der Szene.
*/ */
private Geometry createCube() { private void createCube() {
// Erstelle einen kleinen 3D-Würfel Box box = new Box(0.05f, 0.05f, 0.05f); // Kleinere Größe für Spielfigur
Box cube = new Box(0.04f, 0.04f, 0.04f); // Sehr kleine Kantenlänge cube = new Geometry("Cube", box);
Geometry cubeGeom = new Geometry("PlayerPiece", cube);
// Erstelle ein Material mit einer blauen Farbe // Setze das Material für den Würfel
Material cubeMat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); Material mat = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
cubeMat.setColor("Color", ColorRGBA.Blue); // Blaue Farbe mat.setColor("Color", ColorRGBA.Blue); // Blau gefärbter Würfel
cubeGeom.setMaterial(cubeMat); cube.setMaterial(mat);
// Positioniere den Würfel // Setze den Startpunkt des Würfels
cubeGeom.setLocalTranslation(0.9f, 0.01f, -0.9f); cube.setLocalTranslation(0.8999999f, 0.1f, -0.9f);
// Füge den Würfel zur Szene hinzu app.getRootNode().attachChild(cube);
app.getRootNode().attachChild(cubeGeom);
return cubeGeom; // Rückgabe des Würfels
}
/**
* 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);
} }
} }

View File

@ -2,6 +2,7 @@ package pp.monopoly.client.gui;
import java.util.Random; import java.util.Random;
import com.jme3.font.BitmapText;
import com.jme3.math.Vector3f; import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry; import com.jme3.scene.Geometry;
import com.simsilica.lemur.Axis; import com.simsilica.lemur.Axis;
@ -20,6 +21,7 @@ public class Toolbar {
private final MonopolyApp app; private final MonopolyApp app;
private final Container toolbarContainer; private final Container toolbarContainer;
private final Geometry cube; // Referenz auf den Würfel private final Geometry cube; // Referenz auf den Würfel
private final BitmapText positionText; // Anzeige für die aktuelle Position
private final float boardLimit = 0.95f; // Grenzen des Bretts private final float boardLimit = 0.95f; // Grenzen des Bretts
private final float stepSize = 0.18f; // Schrittgröße pro Bewegung private final float stepSize = 0.18f; // Schrittgröße pro Bewegung
private int currentPosition = 0; // Aktuelle Position auf dem Spielfeld private int currentPosition = 0; // Aktuelle Position auf dem Spielfeld
@ -52,6 +54,10 @@ public class Toolbar {
// Füge die Toolbar zur GUI hinzu // Füge die Toolbar zur GUI hinzu
app.getGuiNode().attachChild(toolbarContainer); app.getGuiNode().attachChild(toolbarContainer);
// Erstelle die Position-Anzeige
positionText = createPositionDisplay();
updatePositionDisplay(); // Initialisiere die Anzeige mit der Startposition
} }
/** /**
@ -104,7 +110,8 @@ public class Toolbar {
currentPosition = (currentPosition + step + 4 * positionsPerSide) % (4 * positionsPerSide); currentPosition = (currentPosition + step + 4 * positionsPerSide) % (4 * positionsPerSide);
Vector3f newPosition = calculatePosition(currentPosition); Vector3f newPosition = calculatePosition(currentPosition);
cube.setLocalTranslation(newPosition); cube.setLocalTranslation(newPosition);
System.out.println("Würfelposition: " + newPosition); updatePositionDisplay(); // Aktualisiere die Positionsanzeige
System.out.println("Würfelposition: " + newPosition + " (Feld-ID: " + currentPosition + ")");
} }
/** /**
@ -131,10 +138,31 @@ public class Toolbar {
} }
} }
/**
* Erstellt die Anzeige für die aktuelle Position.
*
* @return Das BitmapText-Objekt für die Anzeige
*/
private BitmapText createPositionDisplay() {
BitmapText text = new BitmapText(app.getAssetManager().loadFont("Interface/Fonts/Default.fnt"), false);
text.setSize(20); // Schriftgröße
text.setLocalTranslation(10, app.getCamera().getHeight() - 10, 0); // Oben links
app.getGuiNode().attachChild(text);
return text;
}
/**
* Aktualisiert die Anzeige für die aktuelle Position.
*/
private void updatePositionDisplay() {
positionText.setText("Feld-ID: " + currentPosition);
}
/** /**
* Entfernt die Toolbar. * Entfernt die Toolbar.
*/ */
public void remove() { public void remove() {
app.getGuiNode().detachChild(toolbarContainer); app.getGuiNode().detachChild(toolbarContainer);
app.getGuiNode().detachChild(positionText);
} }
} }