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 @@