From 7d927886e13167e5d88e0e0f749abc75aa4c16a4 Mon Sep 17 00:00:00 2001 From: inc0der Date: Mon, 8 Apr 2024 17:45:13 -0300 Subject: [PATCH 1/8] add base tool switching functionality --- src/components/Toolbar.hx | 35 +++++++++++++++++++++++++------ src/components/tilemap/Tilemap.hx | 14 +++++++++++-- src/constants/MapEditorTool.hx | 22 +++++++++++++++++++ src/constants/MapEvent.hx | 3 +++ src/views/MapEditor.hx | 5 +++++ 5 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 src/constants/MapEditorTool.hx diff --git a/src/components/Toolbar.hx b/src/components/Toolbar.hx index a77eb63..90a6793 100644 --- a/src/components/Toolbar.hx +++ b/src/components/Toolbar.hx @@ -1,6 +1,29 @@ -package components; - -import haxe.ui.containers.VBox; - -@:build(haxe.ui.ComponentBuilder.build('../../assets/main/toolbar.xml')) -class Toolbar extends VBox {} \ No newline at end of file +package components; + +import haxe.ui.events.UIEvent; +import haxe.ui.events.MouseEvent; +import haxe.ui.containers.VBox; + +using StringTools; + +@:build(haxe.ui.ComponentBuilder.build('../../assets/main/toolbar.xml')) +class Toolbar extends VBox { + public function new() { + super(); + + toolPencil.registerEvent(MouseEvent.CLICK, onToolSelected); + toolBrush.registerEvent(MouseEvent.CLICK, onToolSelected); + toolFill.registerEvent(MouseEvent.CLICK, onToolSelected); + toolEraser.registerEvent(MouseEvent.CLICK, onToolSelected); + } + + public function onToolSelected(event: MouseEvent) { + var tool = event.target.id; + if (tool.contains('tool')) { + var toolName = tool.replace('tool', '').toLowerCase(); + var toolEvent = new UIEvent(MapEvent.TOOL_SELECT, false, toolName); + trace(toolEvent.data); + dispatch(toolEvent); + } + } +} \ No newline at end of file diff --git a/src/components/tilemap/Tilemap.hx b/src/components/tilemap/Tilemap.hx index af10791..21fe007 100644 --- a/src/components/tilemap/Tilemap.hx +++ b/src/components/tilemap/Tilemap.hx @@ -25,6 +25,7 @@ class Tilemap extends ScrollView { public var overlay: GridQuad; public var activeLayer(default, set): TilemapLayerData; public var selectedTilesetCells(default, set): Array; + public var activeTool: MapEditorTool; var selectedTilesetTiles: Array; var tilesetRect: Rect; @@ -228,8 +229,17 @@ class Tilemap extends ScrollView { new Rect(x, y, tilesetRect.width, tilesetRect.height) ); - if (buttonId == 0) { - drawTile(cellsToEdit); + if (buttonId == 0) { + switch (activeTool) { + case MapEditorTool.Pencil: + drawTile(cellsToEdit); + case MapEditorTool.Eraser: + eraseTile(cellsToEdit); + case MapEditorTool.Fill: + case MapEditorTool.Rect: + case MapEditorTool.Elipse: + case MapEditorTool.Clone: + } } else if (buttonId == 2) { eraseTile(cellsToEdit); } diff --git a/src/constants/MapEditorTool.hx b/src/constants/MapEditorTool.hx new file mode 100644 index 0000000..189bff8 --- /dev/null +++ b/src/constants/MapEditorTool.hx @@ -0,0 +1,22 @@ +package constants; + +enum abstract MapEditorTool(String) from String to String { + var Pencil = 'pencil'; + var Fill = 'fill'; + var Rect = 'rect'; + var Elipse = 'elipse'; + var Eraser = 'eraser'; + var Clone = 'clone'; + + static public function fromName(name: String): MapEditorTool { + switch (name) { + case 'pencil': return MapEditorTool.Pencil; + case Fill: return MapEditorTool.Fill; + case Rect: return MapEditorTool.Rect; + case Elipse: return MapEditorTool.Elipse; + case Eraser: return MapEditorTool.Eraser; + case Clone: return MapEditorTool.Clone; + case _: return MapEditorTool.Pencil; + } + } +} diff --git a/src/constants/MapEvent.hx b/src/constants/MapEvent.hx index dc3173c..7d3e157 100644 --- a/src/constants/MapEvent.hx +++ b/src/constants/MapEvent.hx @@ -24,4 +24,7 @@ class MapEvent extends UIEvent { /* Dispatched when the tilemap is zoomed' */ public static final MAP_ZOOM: EventType = EventType.name('mapZoom'); + + /* Dispatched when a tool is selected */ + public static final TOOL_SELECT: EventType = EventType.name('toolChange'); } \ No newline at end of file diff --git a/src/views/MapEditor.hx b/src/views/MapEditor.hx index acaab51..77e437a 100644 --- a/src/views/MapEditor.hx +++ b/src/views/MapEditor.hx @@ -26,6 +26,7 @@ class MapEditor extends VBox { layerPanel.registerEvent(MapEvent.LAYER_RENAME, onLayerRename); mapListPanel.registerEvent(MapEvent.MAP_SELECT, onActiveMapChanged); tilePicker.registerEvent(MapEvent.TILESET_TILE_SELECTION, onTileSelection); + toolbar.registerEvent(MapEvent.TOOL_SELECT, onToolSelect); } public function menu(): Array { @@ -143,6 +144,10 @@ class MapEditor extends VBox { layerPanel.activeLayer.name = event.data; } + function onToolSelect(event: UIEvent) { + tilemapView.activeTool = MapEditorTool.fromName(event.data); + } + public function update(dt: Float) {} function emptyTilemapData(name: String) { From 39f61de3bc1dcfb2c1042052af084b689310ce70 Mon Sep 17 00:00:00 2001 From: inc0der Date: Mon, 8 Apr 2024 19:41:36 -0300 Subject: [PATCH 2/8] add rect and ellipse tool buttons --- assets/icons/dark/toolEllipse.png | Bin 0 -> 860 bytes assets/icons/dark/toolRect.png | Bin 0 -> 270 bytes assets/main/toolbar.xml | 2 ++ src/styles/light/toolbar.css | 6 ++++++ 4 files changed, 8 insertions(+) create mode 100644 assets/icons/dark/toolEllipse.png create mode 100644 assets/icons/dark/toolRect.png diff --git a/assets/icons/dark/toolEllipse.png b/assets/icons/dark/toolEllipse.png new file mode 100644 index 0000000000000000000000000000000000000000..5880fa8808ce4e60561032f1cc7dbfa4187403ef GIT binary patch literal 860 zcmV-i1Ec(jP)t<88FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10_jOa zK~!jg?V3-BO;H@jKW|2cnZ{r>$vJ@}mt(c080cUs{PX#pbW!siZ{_xn_@wlsMNq2;2oK&bP?y z^Z_U0IwXm707Jmi{4!&!Mug6|;J+ zA!Zah=kNG-7VaN8NMP#YfEg{7X{Dw7a@fz;VpT z6vZpdNF+)CnRcuWN&4w|E1^$Pb3M7Th#+Z|q&pr2K1kY|B~w`^$*Nj53hkY md7jjV$eb{5UaFZlBL4uJFN;RYBG=IX0000XRz{VI;m7fyw|QhYkTsY&6aDInor;4{?nysa{bYpX(={U z6ML_zoX;{4>96%Gx?jCmU)OV4)`hcIjarTgNI7TlEHos@SjErWud;rz_|1&JCM)cC h{w&Q~H%-wbKPP~HQ3=mPEub?QJYD@<);T3K0RV18V0Hii literal 0 HcmV?d00001 diff --git a/assets/main/toolbar.xml b/assets/main/toolbar.xml index 9f501e1..d6ec853 100644 --- a/assets/main/toolbar.xml +++ b/assets/main/toolbar.xml @@ -8,6 +8,8 @@