Fixes for anims
This commit is contained in:
parent
e069d9293a
commit
e219bb19ee
@ -6,6 +6,7 @@ import { MovementValidator } from '../../utilities/movementValidator'
|
|||||||
import { SocketEmitter } from '../../utilities/socketEmitter'
|
import { SocketEmitter } from '../../utilities/socketEmitter'
|
||||||
import prisma from '../../utilities/prisma'
|
import prisma from '../../utilities/prisma'
|
||||||
import { ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
|
import { ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
|
||||||
|
import Rotation from '../../utilities/character/rotation'
|
||||||
|
|
||||||
type ZoneEventTileWithTeleport = ZoneEventTile & {
|
type ZoneEventTileWithTeleport = ZoneEventTile & {
|
||||||
teleport: ZoneEventTileTeleport | null
|
teleport: ZoneEventTileTeleport | null
|
||||||
@ -38,6 +39,7 @@ export default class CharacterMoveEvent {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const path = await this.characterMoveService.calculatePath(character, positionX, positionY)
|
const path = await this.characterMoveService.calculatePath(character, positionX, positionY)
|
||||||
if (!path) {
|
if (!path) {
|
||||||
this.socketEmitter.emitMoveError('No valid path found')
|
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<void> {
|
private async moveAlongPath(character: ExtendedCharacter, path: Array<{ x: number; y: number }>): Promise<void> {
|
||||||
for (const position of path) {
|
for (let i = 0; i < path.length - 1; i++) {
|
||||||
if (!(await this.movementValidator.isValidMove(character, position))) {
|
const start = path[i];
|
||||||
break
|
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({
|
const zoneEventTile = await prisma.zoneEventTile.findFirst({
|
||||||
where: {
|
where: {
|
||||||
zoneId: character.zoneId,
|
zoneId: character.zoneId,
|
||||||
type: 'TELEPORT',
|
type: 'TELEPORT',
|
||||||
positionX: Math.floor(position.x),
|
positionX: Math.floor(end.x),
|
||||||
positionY: Math.floor(position.y)
|
positionY: Math.floor(end.y)
|
||||||
},
|
},
|
||||||
include: { teleport: true }
|
include: { teleport: true }
|
||||||
}) as ZoneEventTileWithTeleport | null
|
}) as ZoneEventTileWithTeleport | null
|
||||||
@ -68,7 +76,7 @@ export default class CharacterMoveEvent {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.characterMoveService.updatePosition(character, position)
|
await this.characterMoveService.updatePosition(character, end)
|
||||||
this.socketEmitter.emitCharacterMove(character)
|
this.socketEmitter.emitCharacterMove(character)
|
||||||
|
|
||||||
await this.characterMoveService.applyMovementDelay()
|
await this.characterMoveService.applyMovementDelay()
|
||||||
|
@ -52,6 +52,6 @@ export class CharacterMoveService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public async applyMovementDelay(): Promise<void> {
|
public async applyMovementDelay(): Promise<void> {
|
||||||
await new Promise((resolve) => setTimeout(resolve, 250)) // 50ms delay between steps
|
await new Promise((resolve) => setTimeout(resolve, 240)) // 50ms delay between steps
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user