diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java index e7694e79..1654b738 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/MapEditor.java @@ -53,7 +53,6 @@ import org.badvision.outlaweditor.data.xml.Scripts; import org.badvision.outlaweditor.data.xml.Tile; import org.badvision.outlaweditor.ui.TileSelectModal; import org.badvision.outlaweditor.ui.ToolType; -import org.badvision.outlaweditor.ui.UIAction; /** * @@ -93,17 +92,24 @@ public class MapEditor extends Editor implements EventH } }; + public DrawMode getDrawMode() { + return drawMode; + } + @Override public void setDrawMode(DrawMode drawMode) { this.drawMode = drawMode; switch (drawMode) { - case Eraser: + case TileEraser: ImageCursor cursor = new ImageCursor(new Image("images/eraser.png")); drawCanvas.setCursor(cursor); break; case Select: drawCanvas.setCursor(Cursor.CROSSHAIR); break; + case ScriptPencil: + drawCanvas.setCursor(Cursor.CLOSED_HAND); + break; default: setCurrentTile(getCurrentTile()); break; @@ -171,6 +177,25 @@ public class MapEditor extends Editor implements EventH getCurrentMap().getBackingMap().getScripts().getScript().add(script); } + Script selectedScript = null; + + public void setSelectedScript(Script script) { + selectedScript = script; + } + + public Script getSelectedScript() { + return selectedScript; + } + + private void drawScript(double x, double y, Script script) { + if (script != null) { + getCurrentMap().putLocationScript((int) x, (int) y, script); + } else { + getCurrentMap().removeLocationScripts((int) x, (int) y); + } + redraw(); + } + public void assignScript(Script script, double x, double y) { int xx = (int) (x / tileWidth) + posX; int yy = (int) (y / tileHeight) + posY; @@ -216,19 +241,8 @@ public class MapEditor extends Editor implements EventH } private void zoom(double delta) { -// double oldZoom = zoom; zoom += delta; zoom = Math.min(Math.max(0.15, zoom), 4.0); -// double left = mapEditorScroll.getHvalue(); -// double top = mapEditorScroll.getVvalue(); -// -// double pointerX = t.getX(); -// double pointerY = t.getY(); -// -// double ratio = zoom / oldZoom; -// -// double newLeft = (left + pointerX) * ratio - pointerX; -// double newTop = (top + pointerY) * ratio - pointerY; tileWidth = getCurrentPlatform().tileRenderer.getWidth() * zoom; tileHeight = getCurrentPlatform().tileRenderer.getHeight() * zoom; fullRedraw.set(true); @@ -448,7 +462,7 @@ public class MapEditor extends Editor implements EventH * @return Same tile (necessary for callback support) */ public Tile setCurrentTile(Tile currentTile) { - if (drawMode == DrawMode.Eraser) { + if (drawMode == DrawMode.TileEraser) { drawMode = DrawMode.Pencil1px; } this.currentTile = currentTile; @@ -550,7 +564,7 @@ public class MapEditor extends Editor implements EventH public static enum DrawMode { - Pencil1px, Pencil3px, Pencil5px, FilledRect, Eraser(false), Select(false); + Pencil1px, Pencil3px, Pencil5px, FilledRect, TileEraser(false), ScriptPencil(false), Select(false); boolean requireTile = false; @@ -687,7 +701,7 @@ public class MapEditor extends Editor implements EventH lastDrawMode = drawMode; lastTile = getCurrentTile(); switch (drawMode) { - case Eraser: { + case TileEraser: { if (canSkip) { return; } @@ -723,6 +737,13 @@ public class MapEditor extends Editor implements EventH trackState(); fillSelection(); } + case ScriptPencil: + if (canSkip) { + return; + } + trackState(); + drawScript(x, y, getSelectedScript()); + break; case Select: updateSelection(t.getX(), t.getY()); if (t.getEventType().equals(MouseEvent.MOUSE_RELEASED)) { diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/MapEditorTabController.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/MapEditorTabController.java index 9d197bb9..6e50b983 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/MapEditorTabController.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/MapEditorTabController.java @@ -84,6 +84,9 @@ public abstract class MapEditorTabController { @FXML abstract public void mapDrawFilledRectMode(ActionEvent event); + @FXML + abstract public void mapScriptPaint(ActionEvent event); + @FXML abstract public void mapTogglePanZoom(ActionEvent event); diff --git a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/MapEditorTabControllerImpl.java b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/MapEditorTabControllerImpl.java index ac9b64ef..66bd9c23 100644 --- a/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/MapEditorTabControllerImpl.java +++ b/OutlawEditor/src/main/java/org/badvision/outlaweditor/ui/impl/MapEditorTabControllerImpl.java @@ -12,7 +12,10 @@ package org.badvision.outlaweditor.ui.impl; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; +import javafx.event.EventHandler; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.Menu; @@ -22,6 +25,7 @@ import javafx.scene.control.cell.ComboBoxListCell; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; +import javafx.scene.input.MouseEvent; import javafx.scene.text.Font; import javafx.scene.text.FontWeight; import javax.xml.bind.JAXBException; @@ -55,7 +59,7 @@ public class MapEditorTabControllerImpl extends MapEditorTabController { @Override public void mapEraser(ActionEvent event) { if (getCurrentEditor() != null) { - getCurrentEditor().setDrawMode(MapEditor.DrawMode.Eraser); + getCurrentEditor().setDrawMode(MapEditor.DrawMode.TileEraser); } } @@ -87,6 +91,13 @@ public class MapEditorTabControllerImpl extends MapEditorTabController { } } + @Override + public void mapScriptPaint(ActionEvent event) { + if (getCurrentEditor() != null) { + getCurrentEditor().setDrawMode(MapEditor.DrawMode.ScriptPencil); + } + } + @Override public void mapTogglePanZoom(ActionEvent event) { if (getCurrentEditor() != null) { @@ -365,6 +376,23 @@ public class MapEditorTabControllerImpl extends MapEditorTabController { } }); toolDragDrop.registerDragSupport(scriptEraseTool, ToolType.ERASER); + mapScriptsList.getSelectionModel().selectedItemProperty().addListener((val, oldValue, newValue) -> { + if (getCurrentEditor() != null) { + if (newValue == null && + getCurrentEditor().getDrawMode() == MapEditor.DrawMode.ScriptPencil && + getCurrentEditor().getSelectedScript() != null) { + mapScriptsList.getSelectionModel().select(oldValue); + } else { + getCurrentEditor().setSelectedScript(newValue); + } + } + }); + scriptEraseTool.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> { + if (getCurrentEditor() != null) { + getCurrentEditor().setSelectedScript(null); + } + mapScriptsList.getSelectionModel().clearSelection(); + }); } @Override diff --git a/OutlawEditor/src/main/resources/mapEditorTab.fxml b/OutlawEditor/src/main/resources/mapEditorTab.fxml index cb6277e7..841e1e64 100644 --- a/OutlawEditor/src/main/resources/mapEditorTab.fxml +++ b/OutlawEditor/src/main/resources/mapEditorTab.fxml @@ -26,7 +26,8 @@ - + +