From ad096d4ce309c4813ffc8da53cde6154bad4f0d3 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Fri, 23 Aug 2024 20:15:58 +0200 Subject: [PATCH] Work for teleports --- package-lock.json | 12 +- src/components/World.vue | 118 --------- src/components/Zone.vue | 233 ++++++++++++++++++ src/components/sprites/Character.vue | 33 ++- .../utilities/zoneEditor/ZoneEditor.vue | 22 +- .../zoneEditor/partials/ZoneList.vue | 3 +- .../useGamePointerHandlers.ts | 2 +- .../useZoneEditorPointerHandlers.ts | 0 src/composables/useCameraControls.ts | 4 +- src/composables/usePointerHandlers.ts | 4 +- src/screens/Game.vue | 31 ++- src/services/zone.ts | 6 +- src/stores/game.ts | 3 + 13 files changed, 303 insertions(+), 168 deletions(-) delete mode 100644 src/components/World.vue create mode 100644 src/components/Zone.vue rename src/composables/{ => pointerHandlers}/useGamePointerHandlers.ts (97%) rename src/composables/{ => pointerHandlers}/useZoneEditorPointerHandlers.ts (100%) diff --git a/package-lock.json b/package-lock.json index 8071350..8ac3727 100644 --- a/package-lock.json +++ b/package-lock.json @@ -150,9 +150,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.4.tgz", - "integrity": "sha512-NFtZmZsyzDPJnk9Zg3BbTfKKc9UlHYzD0E//p2Z3B9nCwwtJW9T0gVbCz8+fBngnn4zf1Dr3IK8PHQQHq0lDQw==", + "version": "7.25.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz", + "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==", "dev": true, "license": "MIT", "dependencies": { @@ -2750,9 +2750,9 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", diff --git a/src/components/World.vue b/src/components/World.vue deleted file mode 100644 index f1a7d43..0000000 --- a/src/components/World.vue +++ /dev/null @@ -1,118 +0,0 @@ - - - diff --git a/src/components/Zone.vue b/src/components/Zone.vue new file mode 100644 index 0000000..cb0e589 --- /dev/null +++ b/src/components/Zone.vue @@ -0,0 +1,233 @@ + + + diff --git a/src/components/sprites/Character.vue b/src/components/sprites/Character.vue index 9fa5550..2ff0524 100644 --- a/src/components/sprites/Character.vue +++ b/src/components/sprites/Character.vue @@ -17,6 +17,7 @@ import { Container, Image, RoundRectangle, Sprite, Text } from 'phavuer' import { type ExtendedCharacter as CharacterT } from '@/types' import { tileToWorldX, tileToWorldY } from '@/services/zone' import { watch, computed, ref, onMounted, onUnmounted } from 'vue' +import config from '@/config' interface Props { layer: Phaser.Tilemaps.TilemapLayer @@ -48,19 +49,27 @@ const updatePosition = (x: number, y: number) => { } const distance = Math.sqrt(Math.pow(targetX - currentX.value, 2) + Math.pow(targetY - currentY.value, 2)) - const duration = distance * 5 // Adjust this multiplier to control overall speed - tween.value = props.layer.scene.tweens.add({ - targets: { x: currentX.value, y: currentY.value }, - x: targetX, - y: targetY, - duration: duration, - ease: 'Linear', - onUpdate: (tween) => { - currentX.value = tween.targets[0].x ?? 0 - currentY.value = tween.targets[0].y ?? 0 - } - }) + if (distance > config.tile_size.x) { + // Teleport: No animation + currentX.value = targetX + currentY.value = targetY + } else { + // Normal movement: Animate + const duration = distance * 5 // Adjust this multiplier to control overall speed + + tween.value = props.layer.scene.tweens.add({ + targets: { x: currentX.value, y: currentY.value }, + x: targetX, + y: targetY, + duration: duration, + ease: 'Linear', + onUpdate: (tween) => { + currentX.value = tween.targets[0].x ?? 0 + currentY.value = tween.targets[0].y ?? 0 + } + }) + } } watch( diff --git a/src/components/utilities/zoneEditor/ZoneEditor.vue b/src/components/utilities/zoneEditor/ZoneEditor.vue index 9bb296f..79ff00d 100644 --- a/src/components/utilities/zoneEditor/ZoneEditor.vue +++ b/src/components/utilities/zoneEditor/ZoneEditor.vue @@ -1,6 +1,6 @@ diff --git a/src/services/zone.ts b/src/services/zone.ts index 5352f68..6b3df35 100644 --- a/src/services/zone.ts +++ b/src/services/zone.ts @@ -23,7 +23,7 @@ export function tileToWorldX(layer: Phaser.Tilemaps.TilemapLayer, pos_x: number, return worldPoint.x + config.tile_size.x / 2 } -export function tileToWorldY(layer: Phaser.Tilemaps.TilemapLayer, pos_x: number, pos_y: number): number { +export function tileToWorldY(layer: TilemapLayer, pos_x: number, pos_y: number): number { const worldPoint = layer.tileToWorldXY(pos_x, pos_y) return worldPoint.y + config.tile_size.y * 1.5 } @@ -86,8 +86,8 @@ export const updateZoneTiles = (zoneTilemap: Tilemap, tiles: Phaser.Tilemaps.Til } // Update the tilemap with any new 'blank_tile' entries - zoneTiles.forEach((row: any, y: number) => { - row.forEach((tileId, x) => { + zoneTiles.forEach((row: any, y: any) => { + row.forEach((tileId: any, x: any) => { placeTile(zoneTilemap, tiles, x, y, tileId) }) }) diff --git a/src/stores/game.ts b/src/stores/game.ts index 0b96d95..5145440 100644 --- a/src/stores/game.ts +++ b/src/stores/game.ts @@ -70,6 +70,9 @@ export const useGameStore = defineStore('game', { this.token = null this.user = null this.character = null + this.isGmPanelOpen = false + this.isMovingCamera = false + this.isChatOpen = false useCookies().remove('token') }