Bugfixes: ObjectController-Toolbar, Emitter ingame, Esc-Shortcut
ObjectController: Welt-Toolbar bleibt beim F7-Öffnen sichtbar (kein eigener Toolbar mehr). Modus wechselt automatisch: Platzieren wenn Modell/Ordner ausgewählt, sonst Bearbeiten. Neuer Button + Esc-Shortcut zum Aufheben der Platzierungs-Auswahl. WorldScene: EmitterSystem eingebunden — platzierte Emitter werden jetzt auch im Spiel geladen und proximity-basiert aktiviert. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5409,6 +5409,9 @@ public class EditorApp extends Application {
|
||||
|| input.activeLayer == SharedInput.LAYER_WATERFALL
|
||||
|| input.activeLayer == SharedInput.LAYER_VOXEL_CLIFF))
|
||||
input.cancelZoneDrawing = true;
|
||||
else if (pressed && input.activeLayer == SharedInput.LAYER_OBJECTS
|
||||
&& "objecteditor".equals(registry.activeToolId()))
|
||||
Platform.runLater(objectController::cancelPlacement);
|
||||
}
|
||||
case DELETE -> {
|
||||
if (pressed) {
|
||||
|
||||
@@ -6,7 +6,6 @@ import de.blight.editor.ToolContext;
|
||||
import de.blight.editor.ToolController;
|
||||
import de.blight.editor.ui.TextureChooser;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Orientation;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.layout.*;
|
||||
@@ -40,8 +39,6 @@ public class ObjectController implements ToolController {
|
||||
private Button objMergeBtn;
|
||||
private Button objSaveBtn;
|
||||
private Button objDeleteBtn;
|
||||
private ToggleButton objPlaceBtn;
|
||||
private ToggleButton objEditBtn;
|
||||
private ToggleButton selModeObjectBtn;
|
||||
private ToggleGroup meshToggleGroup;
|
||||
private Label randomTreeStatusLabel;
|
||||
@@ -61,7 +58,6 @@ public class ObjectController implements ToolController {
|
||||
@Override
|
||||
public void activate() {
|
||||
ctx.setCenterView().accept(ctx.viewportSupplier().get());
|
||||
ctx.setMainToolbar().accept(buildObjectEditorToolBar(pendingPlaceMode));
|
||||
if (pendingPlaceMode) {
|
||||
ctx.input().activeLayer = SharedInput.LAYER_OBJECTS;
|
||||
ctx.setRightPanel().accept(buildObjectPlacePanel());
|
||||
@@ -108,7 +104,10 @@ public class ObjectController implements ToolController {
|
||||
// ── Öffentliche API ─────────────────────────────────────────────────────
|
||||
|
||||
public void activatePlaceMode() {
|
||||
pendingPlaceMode = true;
|
||||
// Place mode only when something is actually selected; otherwise fall back to edit mode
|
||||
boolean hasSelection = (ctx.input().pendingModelPath != null && !ctx.input().pendingModelPath.isEmpty())
|
||||
|| (ctx.input().treeFolderPath != null && !ctx.input().treeFolderPath.isEmpty());
|
||||
pendingPlaceMode = hasSelection;
|
||||
if (ctx.registry().getActive() == this) {
|
||||
activate();
|
||||
} else {
|
||||
@@ -129,48 +128,26 @@ public class ObjectController implements ToolController {
|
||||
if (multiPlaceCB != null) multiPlaceCB.setSelected(true);
|
||||
}
|
||||
|
||||
/** Zeigt das Platzieren-Panel (ohne Toolbar-Wechsel – für Aufrufe aus dem Welt-Editor). */
|
||||
/** Zeigt das Platzieren-Panel. */
|
||||
public void showPlacePanel() {
|
||||
pendingPlaceMode = true;
|
||||
ctx.input().activeLayer = SharedInput.LAYER_OBJECTS;
|
||||
ctx.setRightPanel().accept(buildObjectPlacePanel());
|
||||
if (objPlaceBtn != null) objPlaceBtn.setSelected(true);
|
||||
}
|
||||
|
||||
/** Zeigt das Bearbeiten-Panel (ohne Toolbar-Wechsel). */
|
||||
/** Zeigt das Bearbeiten-Panel. */
|
||||
public void showEditPanel() {
|
||||
pendingPlaceMode = false;
|
||||
ctx.input().activeLayer = SharedInput.LAYER_OBJECTS_EDIT;
|
||||
ctx.input().pendingModelPath = null;
|
||||
ctx.setRightPanel().accept(buildObjectEditPanel());
|
||||
if (objEditBtn != null) objEditBtn.setSelected(true);
|
||||
}
|
||||
|
||||
// ── Toolbar ──────────────────────────────────────────────────────────────
|
||||
|
||||
private ToolBar buildObjectEditorToolBar(boolean placeMode) {
|
||||
Button backBtn = new Button("← Welteneditor");
|
||||
backBtn.setOnAction(e -> ctx.switchToWorld().run());
|
||||
|
||||
objPlaceBtn = new ToggleButton("+ Platzieren");
|
||||
objEditBtn = new ToggleButton("# Bearbeiten");
|
||||
objPlaceBtn.setStyle("-fx-font-weight: bold;");
|
||||
objEditBtn.setStyle("-fx-font-weight: bold;");
|
||||
|
||||
ToggleGroup objGroup = new ToggleGroup();
|
||||
objPlaceBtn.setToggleGroup(objGroup);
|
||||
objEditBtn.setToggleGroup(objGroup);
|
||||
if (placeMode) objPlaceBtn.setSelected(true);
|
||||
else objEditBtn.setSelected(true);
|
||||
|
||||
objPlaceBtn.setOnAction(e -> showPlacePanel());
|
||||
objEditBtn.setOnAction(e -> showEditPanel());
|
||||
|
||||
Label label = new Label("Objekt Editor");
|
||||
label.setStyle("-fx-font-weight: bold; -fx-font-size: 13;");
|
||||
ToolBar tb = new ToolBar();
|
||||
tb.getItems().addAll(backBtn, new Separator(Orientation.VERTICAL),
|
||||
objPlaceBtn, objEditBtn,
|
||||
new Separator(Orientation.VERTICAL), label);
|
||||
return tb;
|
||||
/** Hebt die Platzierungs-Auswahl auf und wechselt zum Selektier-Modus. */
|
||||
public void cancelPlacement() {
|
||||
ctx.input().pendingModelPath = null;
|
||||
ctx.input().treeFolderPath = null;
|
||||
showEditPanel();
|
||||
}
|
||||
|
||||
// ── Platzieren-Panel ─────────────────────────────────────────────────────
|
||||
@@ -179,6 +156,12 @@ public class ObjectController implements ToolController {
|
||||
VBox inner = new VBox(8);
|
||||
inner.setPadding(new Insets(10));
|
||||
|
||||
Button cancelBtn = new Button("✕ Auswahl aufheben [Esc]");
|
||||
cancelBtn.setMaxWidth(Double.MAX_VALUE);
|
||||
cancelBtn.setStyle("-fx-background-color: #e8e8e8;");
|
||||
cancelBtn.setOnAction(e -> cancelPlacement());
|
||||
inner.getChildren().add(cancelBtn);
|
||||
|
||||
inner.getChildren().addAll(sectionTitle("Baum aus Ordner"), new Separator());
|
||||
|
||||
treeFolderCB = new ComboBox<>();
|
||||
|
||||
Reference in New Issue
Block a user