Script painter

This commit is contained in:
badvision 2016-12-24 16:01:05 -06:00
parent 707bfd15cd
commit 93729ba77a
4 changed files with 71 additions and 18 deletions

View File

@ -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<Map, MapEditor.DrawMode> 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<Map, MapEditor.DrawMode> 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<Map, MapEditor.DrawMode> 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<Map, MapEditor.DrawMode> 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<Map, MapEditor.DrawMode> 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<Map, MapEditor.DrawMode> implements EventH
lastDrawMode = drawMode;
lastTile = getCurrentTile();
switch (drawMode) {
case Eraser: {
case TileEraser: {
if (canSkip) {
return;
}
@ -723,6 +737,13 @@ public class MapEditor extends Editor<Map, MapEditor.DrawMode> 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)) {

View File

@ -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);

View File

@ -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

View File

@ -26,7 +26,8 @@
<MenuItem mnemonicParsing="false" onAction="#mapDraw3" text="Radius 3" />
<MenuItem mnemonicParsing="false" onAction="#mapDraw5" text="Radius 5" />
<MenuItem mnemonicParsing="false" onAction="#mapDrawFilledRectMode" text="Filled Rectangle" />
<MenuItem mnemonicParsing="false" onAction="#mapEraser" text="Eraser" />
<MenuItem mnemonicParsing="false" onAction="#mapEraser" text="Tile Eraser" />
<MenuItem mnemonicParsing="false" onAction="#mapScriptPaint" text="Script Painter" />
</items>
</Menu>
<MenuItem mnemonicParsing="false" onAction="#mapTogglePanZoom" text="Toggle pan/zoom controls" />