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.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)) {
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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" />
|
||||||
|
Loading…
Reference in New Issue
Block a user