Fixed pathfinding teleporting issue due to not cancelling last movement.
This commit is contained in:
parent
a64506d3ee
commit
84ca1f412b
@ -16,6 +16,7 @@ export default class CharacterMoveEvent {
|
|||||||
private characterMoveService: CharacterMoveService
|
private characterMoveService: CharacterMoveService
|
||||||
private zoneEventTileService: ZoneEventTileService
|
private zoneEventTileService: ZoneEventTileService
|
||||||
private movementValidator: MovementValidator
|
private movementValidator: MovementValidator
|
||||||
|
private nextPath: {[index: number]: {character: ExtendedCharacter, path: {x: number, y: number}[]}} = [];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly io: Server,
|
private readonly io: Server,
|
||||||
@ -44,7 +45,15 @@ export default class CharacterMoveEvent {
|
|||||||
return
|
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<void> {
|
private async moveAlongPath(character: ExtendedCharacter, path: Array<{ x: number; y: number }>): Promise<void> {
|
||||||
@ -56,7 +65,18 @@ export default class CharacterMoveEvent {
|
|||||||
break;
|
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);
|
character.rotation = Rotation.calculate(start.x, start.y, end.x, end.y);
|
||||||
|
|
||||||
const zoneEventTile = await prisma.zoneEventTile.findFirst({
|
const zoneEventTile = await prisma.zoneEventTile.findFirst({
|
||||||
|
@ -18,6 +18,7 @@ export type TSocket = Socket & {
|
|||||||
|
|
||||||
export type ExtendedCharacter = Character & {
|
export type ExtendedCharacter = Character & {
|
||||||
isMoving?: boolean
|
isMoving?: boolean
|
||||||
|
resetMovement: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TAsset = {
|
export type TAsset = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user