diff --git a/src/events/zone/characterMoveEvent.ts b/src/events/zone/characterMoveEvent.ts index f3e7d2a..7712849 100644 --- a/src/events/zone/characterMoveEvent.ts +++ b/src/events/zone/characterMoveEvent.ts @@ -16,6 +16,7 @@ export default class CharacterMoveEvent { private characterMoveService: CharacterMoveService private zoneEventTileService: ZoneEventTileService private movementValidator: MovementValidator + private nextPath: {[index: number]: {character: ExtendedCharacter, path: {x: number, y: number}[]}} = []; constructor( private readonly io: Server, @@ -44,7 +45,15 @@ export default class CharacterMoveEvent { return } - await this.moveAlongPath(character, path) + if(character.isMoving && !character.resetMovement) { + character.resetMovement = true; + this.nextPath[character.id] = { + character, + path + } + } else { + await this.moveAlongPath(character, path) + } } private async moveAlongPath(character: ExtendedCharacter, path: Array<{ x: number; y: number }>): Promise { @@ -56,7 +65,18 @@ export default class CharacterMoveEvent { break; } - character.isMoving = true; + if(character.isMoving && character.resetMovement) { + character.isMoving = false; + character.resetMovement = false; + const nextPath = this.nextPath[character.id]; + this.moveAlongPath(nextPath.character, nextPath.path); + break; + } + + if(!character.isMoving) { + character.isMoving = true; + } + character.rotation = Rotation.calculate(start.x, start.y, end.x, end.y); const zoneEventTile = await prisma.zoneEventTile.findFirst({ diff --git a/src/utilities/types.ts b/src/utilities/types.ts index 1a77c37..2f206d2 100644 --- a/src/utilities/types.ts +++ b/src/utilities/types.ts @@ -18,6 +18,7 @@ export type TSocket = Socket & { export type ExtendedCharacter = Character & { isMoving?: boolean + resetMovement: boolean } export type TAsset = {