diff --git a/package-lock.json b/package-lock.json index f91a0ff..64b6789 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3411,9 +3411,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.796", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz", - "integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA==", + "version": "1.4.798", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.798.tgz", + "integrity": "sha512-by9J2CiM9KPGj9qfp5U4FcPSbXJG7FNzqnYaY4WLzX+v2PHieVGmnsA4dxfpGE3QEC7JofpPZmn7Vn1B9NR2+Q==", "dev": true, "license": "ISC" }, @@ -5625,9 +5625,9 @@ } }, "node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "license": "MIT", "bin": { @@ -5915,9 +5915,9 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.0.tgz", - "integrity": "sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true, "license": "MIT" }, diff --git a/public/assets/tiles/default.png b/public/assets/tiles/default.png index ee2a6c9..91db658 100644 Binary files a/public/assets/tiles/default.png and b/public/assets/tiles/default.png differ diff --git a/src/App.vue b/src/App.vue index 0a0551b..f846db8 100644 --- a/src/App.vue +++ b/src/App.vue @@ -10,10 +10,10 @@ import { type Ref, ref } from 'vue' import { useSocketStore } from '@/stores/socket' import Notifications from '@/components/utilities/Notifications.vue' -import Login from '@/components/screens/Login.vue' -import Register from '@/components/screens/Register.vue' -import Characters from '@/components/screens/Characters.vue' -import Game from '@/components/Game.vue' +import Login from '@/screens/Login.vue' +import Register from '@/screens/Register.vue' +import Characters from '@/screens/Characters.vue' +import Game from '@/screens/Game.vue' const screen: Ref = ref('login') const socket = useSocketStore() diff --git a/src/components/utilities/Controls.vue b/src/components/utilities/Controls.vue index 03eaf8e..09489a1 100644 --- a/src/components/utilities/Controls.vue +++ b/src/components/utilities/Controls.vue @@ -4,10 +4,14 @@ diff --git a/src/components/utilities/zoneEditor/Tiles.vue b/src/components/utilities/zoneEditor/Tiles.vue index 0d4d62b..0e8214a 100644 --- a/src/components/utilities/zoneEditor/Tiles.vue +++ b/src/components/utilities/zoneEditor/Tiles.vue @@ -7,7 +7,7 @@ @@ -18,6 +18,7 @@ import { ref, onMounted, nextTick } from 'vue' import config from '@/config' import Modal from '@/components/utilities/Modal.vue' +import { useZoneEditorStore } from '@/stores/zoneEditor' const tileWidth = config.tile_size.x const tileHeight = config.tile_size.y @@ -25,6 +26,7 @@ const tiles = ref([]) const selectedTile = ref(null) const canvas = ref(null) const isModalOpen = ref(false) +const zoneEditorStore = useZoneEditorStore() // Hardcoded image path const imagePath = '/assets/tiles/default.png' diff --git a/src/components/utilities/zoneEditor/Toolbar.vue b/src/components/utilities/zoneEditor/Toolbar.vue index e64785c..cb23caa 100644 --- a/src/components/utilities/zoneEditor/Toolbar.vue +++ b/src/components/utilities/zoneEditor/Toolbar.vue @@ -2,16 +2,16 @@
-
-
-
@@ -38,10 +38,11 @@ const props = defineProps({ layer: Phaser.Tilemaps.TilemapLayer }) const scene = useScene() -const activeTool = ref('move') const emit = defineEmits(['erase', 'move', 'tile']) -function onPointerClick(pointer: Phaser.Input.Pointer) { +function drawTiles(pointer: Phaser.Input.Pointer) { + if (!pointer.isDown) return + const px = scene.cameras.main.worldView.x + pointer.x const py = scene.cameras.main.worldView.y + pointer.y @@ -50,15 +51,19 @@ function onPointerClick(pointer: Phaser.Input.Pointer) { return } - if (activeTool.value === 'eraser') { + if (zoneEditorStore.tool === 'eraser') { emit('erase', pointer_tile) } + + if (zoneEditorStore.tool === 'tile') { + emit('tile', pointer_tile) + } } -scene.input.on(Phaser.Input.Events.POINTER_UP, onPointerClick) +scene.input.on(Phaser.Input.Events.POINTER_MOVE, drawTiles) onBeforeUnmount(() => { - scene.input.off(Phaser.Input.Events.POINTER_UP, onPointerClick) + scene.input.off(Phaser.Input.Events.POINTER_MOVE, drawTiles) }) diff --git a/src/components/utilities/zoneEditor/ZoneEditor.vue b/src/components/utilities/zoneEditor/ZoneEditor.vue index a4a3f7a..b3a11b2 100644 --- a/src/components/utilities/zoneEditor/ZoneEditor.vue +++ b/src/components/utilities/zoneEditor/ZoneEditor.vue @@ -16,6 +16,7 @@ import { useSocketStore } from '@/stores/socket' import { useZoneStore } from '@/stores/zone' import Toolbar from '@/components/utilities/zoneEditor/Toolbar.vue' import Tiles from '@/components/utilities/zoneEditor/Tiles.vue' +import { useZoneEditorStore } from '@/stores/zoneEditor' // Phavuer logic let scene = useScene() @@ -39,6 +40,7 @@ scene.cameras.main.centerOn(centerX, centerY) // Multiplayer / server logics const zoneStore = useZoneStore() +const zoneEditorStore = useZoneEditorStore() const socket = useSocketStore() zoneStore.setTiles([ @@ -66,8 +68,11 @@ watch( ) function erase(tile: Phaser.Tilemaps.Tile) { - layer.removeTileAt(tile.x, tile.y) + layer.putTileAt(0, tile.x, tile.y) } -function tile() {} +function tile(tile: Phaser.Tilemaps.Tile) { + if (zoneEditorStore.selectedTile === null) return + layer.putTileAt(zoneEditorStore.selectedTile, tile.x, tile.y) +} diff --git a/src/components/screens/Characters.vue b/src/screens/Characters.vue similarity index 100% rename from src/components/screens/Characters.vue rename to src/screens/Characters.vue diff --git a/src/components/Game.vue b/src/screens/Game.vue similarity index 93% rename from src/components/Game.vue rename to src/screens/Game.vue index fe699a2..dbb8639 100644 --- a/src/components/Game.vue +++ b/src/screens/Game.vue @@ -3,7 +3,7 @@ -
+
@@ -27,7 +27,6 @@ import { onUnmounted } from 'vue' import GmTools from '@/components/utilities/GmTools.vue' import { useSocketStore } from '@/stores/socket' import { useZoneEditorStore } from '@/stores/zoneEditor' -import Toolbar from '@/components/utilities/zoneEditor/Toolbar.vue' import ZoneEditor from '@/components/utilities/zoneEditor/ZoneEditor.vue' const socket = useSocketStore() @@ -74,14 +73,6 @@ const preloadScene = (scene: Phaser.Scene) => { const playScene = (scene: Phaser.Scene) => {} const createScene = (scene: Phaser.Scene) => { - // Camera drag system - let cam = scene.cameras.main - scene.input.on('pointermove', function (pointer: Phaser.Input.Pointer) { - if (!pointer.isDown) return - cam.scrollX -= (pointer.x - pointer.prevPosition.x) / cam.zoom - cam.scrollY -= (pointer.y - pointer.prevPosition.y) / cam.zoom - }) - scene.anims.create({ key: 'walk', frameRate: 7, diff --git a/src/components/screens/Login.vue b/src/screens/Login.vue similarity index 93% rename from src/components/screens/Login.vue rename to src/screens/Login.vue index 982dc71..1bff36a 100644 --- a/src/components/screens/Login.vue +++ b/src/screens/Login.vue @@ -27,7 +27,7 @@