diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 6f40582..5d7bb6d 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -3,13 +3,11 @@ require('@rushstack/eslint-patch/modern-module-resolution') module.exports = { root: true, - 'extends': [ - 'plugin:vue/vue3-essential', - 'eslint:recommended', - '@vue/eslint-config-typescript', - '@vue/eslint-config-prettier/skip-formatting' - ], + extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/eslint-config-typescript', '@vue/eslint-config-prettier/skip-formatting'], parserOptions: { ecmaVersion: 'latest' + }, + rules: { + 'vue/multi-word-component-names': 'off' } } diff --git a/package-lock.json b/package-lock.json index 8ac3727..6598a1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4915,9 +4915,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -6750,9 +6750,9 @@ "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "dev": true, "license": "0BSD" }, diff --git a/src/components/Zone.vue b/src/components/Zone.vue deleted file mode 100644 index cb0e589..0000000 --- a/src/components/Zone.vue +++ /dev/null @@ -1,233 +0,0 @@ - - - diff --git a/src/components/utilities/GmPanel.vue b/src/components/gameMaster/GmPanel.vue similarity index 93% rename from src/components/utilities/GmPanel.vue rename to src/components/gameMaster/GmPanel.vue index 553e8cd..cf5c9db 100644 --- a/src/components/utilities/GmPanel.vue +++ b/src/components/gameMaster/GmPanel.vue @@ -20,7 +20,7 @@ diff --git a/src/components/zone/Objects.vue b/src/components/zone/Objects.vue new file mode 100644 index 0000000..d0e7cdb --- /dev/null +++ b/src/components/zone/Objects.vue @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/src/components/zone/Tiles.vue b/src/components/zone/Tiles.vue new file mode 100644 index 0000000..a3aff15 --- /dev/null +++ b/src/components/zone/Tiles.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/src/components/zone/Zone.vue b/src/components/zone/Zone.vue new file mode 100644 index 0000000..749a979 --- /dev/null +++ b/src/components/zone/Zone.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/composables/pointerHandlers/useGamePointerHandlers.ts b/src/composables/pointerHandlers/useGamePointerHandlers.ts index db323ba..0328799 100644 --- a/src/composables/pointerHandlers/useGamePointerHandlers.ts +++ b/src/composables/pointerHandlers/useGamePointerHandlers.ts @@ -3,7 +3,7 @@ import { getTile, tileToWorldXY } from '@/services/zone' import { useGameStore } from '@/stores/game' import config from '@/config' -export function useGamePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Ref) { +export function useGamePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Ref, isDragging: Ref) { const gameStore = useGameStore() function updateWaypoint(pointer: Phaser.Input.Pointer) { @@ -18,7 +18,16 @@ export function useGamePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilema } } + function dragZone(pointer: Phaser.Input.Pointer) { + if (isDragging.value) { + const { x, y, prevPosition } = pointer + const { scrollX, scrollY, zoom } = camera.value + camera.value.setScroll(scrollX - (x - prevPosition.x) / zoom, scrollY - (y - prevPosition.y) / zoom) + } + } + function handlePointerMove(pointer: Phaser.Input.Pointer) { + dragZone(pointer) updateWaypoint(pointer) } diff --git a/src/composables/useCameraControls.ts b/src/composables/useCameraControls.ts index d4c81ff..ae4d7fd 100644 --- a/src/composables/useCameraControls.ts +++ b/src/composables/useCameraControls.ts @@ -12,7 +12,7 @@ export function useCameraControls(scene: Phaser.Scene): any { const MOVE_RESET_DELAY = 100 function onPointerDown(pointer: Phaser.Input.Pointer) { - if (pointer.event instanceof MouseEvent || pointer.event.altKey) { + if (pointer.event instanceof MouseEvent || pointer.event.shiftKey) { pointerDownTimer = setTimeout(() => { isDragging.value = true gameStore.setMovingCamera(true) diff --git a/src/composables/usePointerHandlers.ts b/src/composables/usePointerHandlers.ts index adcfba4..1efeb52 100644 --- a/src/composables/usePointerHandlers.ts +++ b/src/composables/usePointerHandlers.ts @@ -1,30 +1,32 @@ -import { computed, type Ref } from 'vue' +import { computed, type Ref, watch } from 'vue' import { useZoneEditorStore } from '@/stores/zoneEditor' import { useGamePointerHandlers } from '@/composables/pointerHandlers/useGamePointerHandlers' import { useZoneEditorPointerHandlers } from '@/composables/pointerHandlers/useZoneEditorPointerHandlers' +import { useGameStore } from '@/stores/game' export function usePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Ref, isDragging: Ref) { + const gameStore = useGameStore() const zoneEditorStore = useZoneEditorStore() - const isZoneEditorActive = computed(() => zoneEditorStore.active) - const gameHandlers = useGamePointerHandlers(scene, layer, waypoint, camera) + const gameHandlers = useGamePointerHandlers(scene, layer, waypoint, camera, isDragging) const zoneEditorHandlers = useZoneEditorPointerHandlers(scene, layer, waypoint, camera, isDragging) + let currentHandlers = computed(() => zoneEditorStore.active ? zoneEditorHandlers : gameHandlers) + const setupPointerHandlers = () => { - if (isZoneEditorActive.value) { - zoneEditorHandlers.setupPointerHandlers() - } else { - gameHandlers.setupPointerHandlers() - } + currentHandlers.value.setupPointerHandlers() } const cleanupPointerHandlers = () => { - if (isZoneEditorActive.value) { - zoneEditorHandlers.cleanupPointerHandlers() - } else { - gameHandlers.cleanupPointerHandlers() - } + currentHandlers.value.cleanupPointerHandlers() } + watch(() => zoneEditorStore.active, (newValue, oldValue) => { + if (newValue !== oldValue) { + cleanupPointerHandlers() + setupPointerHandlers() + } + }) + return { setupPointerHandlers, cleanupPointerHandlers } -} +} \ No newline at end of file diff --git a/src/config.ts b/src/config.ts index 7793640..a663e30 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,8 +1,8 @@ -const dev: boolean = false +const dev: boolean = true export default { name: 'New Quest', development: dev, server_endpoint: dev ? 'http://localhost:4000' : 'https://nq-server.cr-a.directonline.io', - tile_size: { x: 64, y: 32, z: 1 }, + tile_size: { x: 64, y: 32, z: 1 } } diff --git a/src/screens/Characters.vue b/src/screens/Characters.vue index 228eb19..0ebe8c3 100644 --- a/src/screens/Characters.vue +++ b/src/screens/Characters.vue @@ -74,6 +74,7 @@ import { useGameStore } from '@/stores/game' import { onBeforeMount, onBeforeUnmount, onMounted, ref } from 'vue' import Modal from '@/components/utilities/Modal.vue' import { type Character as CharacterT } from '@/types' +import { useZoneStore } from '@/stores/zone' const isLoading = ref(true) const characters = ref([]) diff --git a/src/screens/Game.vue b/src/screens/Game.vue index a0e72af..6c4fac2 100644 --- a/src/screens/Game.vue +++ b/src/screens/Game.vue @@ -5,14 +5,14 @@
- +
- +
@@ -37,24 +37,22 @@