From f2dd1a2ffef09f0f6a2052d8f6023b57bc2d6954 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sun, 16 Feb 2025 18:16:17 +0100 Subject: [PATCH] Minor movement improvements --- src/events/map/characterMove.ts | 5 +++++ src/services/characterMoveService.ts | 7 +++---- src/services/characterTeleportService.ts | 9 ++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/events/map/characterMove.ts b/src/events/map/characterMove.ts index 85efc72..c3ebf28 100644 --- a/src/events/map/characterMove.ts +++ b/src/events/map/characterMove.ts @@ -121,6 +121,11 @@ export default class CharacterMove extends BaseEvent { if (mapEventTile) { if (mapEventTile.type === 'BLOCK') break if (mapEventTile.type === 'TELEPORT' && mapEventTile.teleport) { + // Force clear movement state before teleport + mapCharacter.isMoving = false + mapCharacter.currentPath = null + this.lastKnownPosition = null // Reset last known position + await CharacterMoveService.handleTeleportMapEventTile(character.id, mapEventTile as MapEventTileWithTeleport) return } diff --git a/src/services/characterMoveService.ts b/src/services/characterMoveService.ts index cf40b5e..9b3a56a 100644 --- a/src/services/characterMoveService.ts +++ b/src/services/characterMoveService.ts @@ -13,8 +13,6 @@ type Position = { positionX: number; positionY: number } export type Node = Position & { parent?: Node; g: number; h: number; f: number } class CharacterMoveService extends BaseService { - private io: Server = SocketManager.getIO() - // Rotation lookup table for better performance private readonly ROTATION_MAP = { diagonal: { @@ -223,8 +221,9 @@ class CharacterMoveService extends BaseService { return path } - public broadcastMovement(character: Character, isMoving: boolean): void { - this.io.in(character.map.id).emit(SocketEvent.MAP_CHARACTER_MOVE, [character.id, character.getPositionX(), character.getPositionY(), character.getRotation(), isMoving]) + public broadcastMovement(character: Character, isMoving: boolean = false): void { + const io: Server = SocketManager.getIO() + io.in(character.map.id).emit(SocketEvent.MAP_CHARACTER_MOVE, [character.id, character.getPositionX(), character.getPositionY(), character.getRotation(), isMoving]) } public validateMovementDistance( diff --git a/src/services/characterTeleportService.ts b/src/services/characterTeleportService.ts index 0402305..d332485 100644 --- a/src/services/characterTeleportService.ts +++ b/src/services/characterTeleportService.ts @@ -6,6 +6,7 @@ import MapManager from '@/managers/mapManager' import SocketManager from '@/managers/socketManager' import MapCharacter from '@/models/mapCharacter' import MapRepository from '@/repositories/mapRepository' +import CharacterMoveService from '@/services/characterMoveService' interface TeleportOptions { targetMapId: UUID @@ -61,13 +62,7 @@ class CharacterTeleportService { // If the current map is the target map and we are not joining, send move event if (currentMapId === options.targetMapId && !options.isInitialJoin) { // If the current map is the target map, send move event - io.in(currentMapId).emit(SocketEvent.MAP_CHARACTER_MOVE, { - characterId: mapCharacter.character.id, - positionX: options.targetX, - positionY: options.targetY, - rotation: options.rotation ?? 0, - isMoving: false - }) + CharacterMoveService.broadcastMovement(mapCharacter.character, false) return true }