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.data.xml.Tile;
import org.badvision.outlaweditor.ui.TileSelectModal; import org.badvision.outlaweditor.ui.TileSelectModal;
import org.badvision.outlaweditor.ui.ToolType; 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 @Override
public void setDrawMode(DrawMode drawMode) { public void setDrawMode(DrawMode drawMode) {
this.drawMode = drawMode; this.drawMode = drawMode;
switch (drawMode) { switch (drawMode) {
case Eraser: case TileEraser:
ImageCursor cursor = new ImageCursor(new Image("images/eraser.png")); ImageCursor cursor = new ImageCursor(new Image("images/eraser.png"));
drawCanvas.setCursor(cursor); drawCanvas.setCursor(cursor);
break; break;
case Select: case Select:
drawCanvas.setCursor(Cursor.CROSSHAIR); drawCanvas.setCursor(Cursor.CROSSHAIR);
break; break;
case ScriptPencil:
drawCanvas.setCursor(Cursor.CLOSED_HAND);
break;
default: default:
setCurrentTile(getCurrentTile()); setCurrentTile(getCurrentTile());
break; break;
@ -171,6 +177,25 @@ public class MapEditor extends Editor<Map, MapEditor.DrawMode> implements EventH
getCurrentMap().getBackingMap().getScripts().getScript().add(script); 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) { public void assignScript(Script script, double x, double y) {
int xx = (int) (x / tileWidth) + posX; int xx = (int) (x / tileWidth) + posX;
int yy = (int) (y / tileHeight) + posY; 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) { private void zoom(double delta) {
// double oldZoom = zoom;
zoom += delta; zoom += delta;
zoom = Math.min(Math.max(0.15, zoom), 4.0); 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; tileWidth = getCurrentPlatform().tileRenderer.getWidth() * zoom;
tileHeight = getCurrentPlatform().tileRenderer.getHeight() * zoom; tileHeight = getCurrentPlatform().tileRenderer.getHeight() * zoom;
fullRedraw.set(true); fullRedraw.set(true);
@ -448,7 +462,7 @@ public class MapEditor extends Editor<Map, MapEditor.DrawMode> implements EventH
* @return Same tile (necessary for callback support) * @return Same tile (necessary for callback support)
*/ */
public Tile setCurrentTile(Tile currentTile) { public Tile setCurrentTile(Tile currentTile) {
if (drawMode == DrawMode.Eraser) { if (drawMode == DrawMode.TileEraser) {
drawMode = DrawMode.Pencil1px; drawMode = DrawMode.Pencil1px;
} }
this.currentTile = currentTile; this.currentTile = currentTile;
@ -550,7 +564,7 @@ public class MapEditor extends Editor<Map, MapEditor.DrawMode> implements EventH
public static enum DrawMode { 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; boolean requireTile = false;
@ -687,7 +701,7 @@ public class MapEditor extends Editor<Map, MapEditor.DrawMode> implements EventH
lastDrawMode = drawMode; lastDrawMode = drawMode;
lastTile = getCurrentTile(); lastTile = getCurrentTile();
switch (drawMode) { switch (drawMode) {
case Eraser: { case TileEraser: {
if (canSkip) { if (canSkip) {
return; return;
} }
@ -723,6 +737,13 @@ public class MapEditor extends Editor<Map, MapEditor.DrawMode> implements EventH
trackState(); trackState();
fillSelection(); fillSelection();
} }
case ScriptPencil:
if (canSkip) {
return;
}
trackState();
drawScript(x, y, getSelectedScript());
break;
case Select: case Select:
updateSelection(t.getX(), t.getY()); updateSelection(t.getX(), t.getY());
if (t.getEventType().equals(MouseEvent.MOUSE_RELEASED)) { if (t.getEventType().equals(MouseEvent.MOUSE_RELEASED)) {

View File

@ -84,6 +84,9 @@ public abstract class MapEditorTabController {
@FXML @FXML
abstract public void mapDrawFilledRectMode(ActionEvent event); abstract public void mapDrawFilledRectMode(ActionEvent event);
@FXML
abstract public void mapScriptPaint(ActionEvent event);
@FXML @FXML
abstract public void mapTogglePanZoom(ActionEvent event); 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.HashMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.ListCell; import javafx.scene.control.ListCell;
import javafx.scene.control.ListView; import javafx.scene.control.ListView;
import javafx.scene.control.Menu; import javafx.scene.control.Menu;
@ -22,6 +25,7 @@ import javafx.scene.control.cell.ComboBoxListCell;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage; import javafx.scene.image.WritableImage;
import javafx.scene.input.MouseEvent;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import javafx.scene.text.FontWeight; import javafx.scene.text.FontWeight;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
@ -55,7 +59,7 @@ public class MapEditorTabControllerImpl extends MapEditorTabController {
@Override @Override
public void mapEraser(ActionEvent event) { public void mapEraser(ActionEvent event) {
if (getCurrentEditor() != null) { 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 @Override
public void mapTogglePanZoom(ActionEvent event) { public void mapTogglePanZoom(ActionEvent event) {
if (getCurrentEditor() != null) { if (getCurrentEditor() != null) {
@ -365,6 +376,23 @@ public class MapEditorTabControllerImpl extends MapEditorTabController {
} }
}); });
toolDragDrop.registerDragSupport(scriptEraseTool, ToolType.ERASER); 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 @Override

View File

@ -26,7 +26,8 @@
<MenuItem mnemonicParsing="false" onAction="#mapDraw3" text="Radius 3" /> <MenuItem mnemonicParsing="false" onAction="#mapDraw3" text="Radius 3" />
<MenuItem mnemonicParsing="false" onAction="#mapDraw5" text="Radius 5" /> <MenuItem mnemonicParsing="false" onAction="#mapDraw5" text="Radius 5" />
<MenuItem mnemonicParsing="false" onAction="#mapDrawFilledRectMode" text="Filled Rectangle" /> <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> </items>
</Menu> </Menu>
<MenuItem mnemonicParsing="false" onAction="#mapTogglePanZoom" text="Toggle pan/zoom controls" /> <MenuItem mnemonicParsing="false" onAction="#mapTogglePanZoom" text="Toggle pan/zoom controls" />