mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-09-29 11:55:21 +00:00
Script painter
This commit is contained in:
parent
707bfd15cd
commit
93729ba77a
@ -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)) {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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" />
|
||||
|
Loading…
Reference in New Issue
Block a user