diff --git a/src/components/gameMaster/zoneEditor/partials/Toolbar.vue b/src/components/gameMaster/zoneEditor/partials/Toolbar.vue index fd03439..f14bbcc 100644 --- a/src/components/gameMaster/zoneEditor/partials/Toolbar.vue +++ b/src/components/gameMaster/zoneEditor/partials/Toolbar.vue @@ -171,13 +171,26 @@ function handleClick(tool: string) { selectEraserOpen.value = tool === 'eraser' ? !selectEraserOpen.value : false } -// Key bindings +function cycleToolMode(tool: 'pencil' | 'eraser') { + const modes = ['tile', 'object', 'teleport', 'blocking tile']; + const currentMode = tool === 'pencil' ? zoneEditorStore.drawMode : zoneEditorStore.eraserMode; + const currentIndex = modes.indexOf(currentMode); + const nextIndex = (currentIndex + 1) % modes.length; + const nextMode = modes[nextIndex]; + + if (tool === 'pencil') { + setDrawMode(nextMode); + } else { + setEraserMode(nextMode); + } +} + function initKeyShortcuts(event: KeyboardEvent) { if (!zoneEditorStore.zone) return // prevent if focused on composables if (document.activeElement?.tagName === 'INPUT') return - const keyActions: any = { + const keyActions: { [key: string]: string } = { m: 'move', p: 'pencil', e: 'eraser', @@ -186,7 +199,12 @@ function initKeyShortcuts(event: KeyboardEvent) { } if (keyActions.hasOwnProperty(event.key)) { - handleClick(keyActions[event.key]) + const tool = keyActions[event.key]; + if ((tool === 'pencil' || tool === 'eraser') && zoneEditorStore.tool === tool) { + cycleToolMode(tool); + } else { + handleClick(tool); + } } }