From e219bb19ee3d3dfd455a87da1705bf565a05d16b Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Tue, 27 Aug 2024 00:34:02 +0200 Subject: [PATCH] Fixes for anims --- src/events/zone/characterMoveEvent.ts | 20 +++++++++++++------ .../character/characterMoveService.ts | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/events/zone/characterMoveEvent.ts b/src/events/zone/characterMoveEvent.ts index 04072b9..012fe0c 100644 --- a/src/events/zone/characterMoveEvent.ts +++ b/src/events/zone/characterMoveEvent.ts @@ -6,6 +6,7 @@ import { MovementValidator } from '../../utilities/movementValidator' import { SocketEmitter } from '../../utilities/socketEmitter' import prisma from '../../utilities/prisma' import { ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client' +import Rotation from '../../utilities/character/rotation' type ZoneEventTileWithTeleport = ZoneEventTile & { teleport: ZoneEventTileTeleport | null @@ -38,6 +39,7 @@ export default class CharacterMoveEvent { return } + const path = await this.characterMoveService.calculatePath(character, positionX, positionY) if (!path) { this.socketEmitter.emitMoveError('No valid path found') @@ -48,17 +50,23 @@ export default class CharacterMoveEvent { } private async moveAlongPath(character: ExtendedCharacter, path: Array<{ x: number; y: number }>): Promise { - for (const position of path) { - if (!(await this.movementValidator.isValidMove(character, position))) { - break + for (let i = 0; i < path.length - 1; i++) { + const start = path[i]; + const end = path[i + 1]; + + if (!(await this.movementValidator.isValidMove(character, end))) { + break; } + character.isMoving = true; + character.rotation = Rotation.calculate(start.x, start.y, end.x, end.y); + const zoneEventTile = await prisma.zoneEventTile.findFirst({ where: { zoneId: character.zoneId, type: 'TELEPORT', - positionX: Math.floor(position.x), - positionY: Math.floor(position.y) + positionX: Math.floor(end.x), + positionY: Math.floor(end.y) }, include: { teleport: true } }) as ZoneEventTileWithTeleport | null @@ -68,7 +76,7 @@ export default class CharacterMoveEvent { break } - await this.characterMoveService.updatePosition(character, position) + await this.characterMoveService.updatePosition(character, end) this.socketEmitter.emitCharacterMove(character) await this.characterMoveService.applyMovementDelay() diff --git a/src/services/character/characterMoveService.ts b/src/services/character/characterMoveService.ts index 258f25d..f4b87e4 100644 --- a/src/services/character/characterMoveService.ts +++ b/src/services/character/characterMoveService.ts @@ -52,6 +52,6 @@ export class CharacterMoveService { } public async applyMovementDelay(): Promise { - await new Promise((resolve) => setTimeout(resolve, 250)) // 50ms delay between steps + await new Promise((resolve) => setTimeout(resolve, 240)) // 50ms delay between steps } }