Cleaned characterMove event, moved some of its logic into char. move service

This commit is contained in:
2025-02-15 22:27:57 +01:00
parent 086c7cd6d6
commit 5acebfe377
5 changed files with 46 additions and 46 deletions

View File

@ -1,7 +1,10 @@
import { BaseService } from '@/application/base/baseService'
import config from '@/application/config'
import type { MapEventTileWithTeleport, UUID } from '@/application/types'
import { Character } from '@/entities/character'
import MapManager from '@/managers/mapManager'
import MapEventTileRepository from '@/repositories/mapEventTileRepository'
import TeleportService from '@/services/characterTeleportService'
type Position = { positionX: number; positionY: number }
export type Node = Position & { parent?: Node; g: number; h: number; f: number }
@ -225,6 +228,27 @@ class CharacterMoveService extends BaseService {
.filter((pos) => this.isValidPosition(pos, grid, end))
}
isValidStep(current: { positionX: number; positionY: number }, next: { positionX: number; positionY: number }): boolean {
return Math.abs(next.positionX - current.positionX) <= 1 && Math.abs(next.positionY - current.positionY) <= 1
}
async checkMapEvents(map_id: UUID, nextTile: { positionX: number; positionY: number }) {
const mapEventTileRepository = new MapEventTileRepository()
return mapEventTileRepository.getEventTileByMapIdAndPosition(map_id, nextTile.positionX, nextTile.positionY)
}
async handleTeleportMapEventTile(character_id: UUID, mapEventTile: MapEventTileWithTeleport): Promise<void> {
const teleport = mapEventTile.getTeleport()
if (teleport) {
await TeleportService.teleportCharacter(character_id, {
targetMapId: teleport.getToMap().getId(),
targetX: teleport.getToPositionX(),
targetY: teleport.getToPositionY(),
rotation: teleport.getToRotation()
})
}
}
private isValidPosition(pos: Position, grid: number[][], end: Position): boolean {
return (
pos.positionX >= 0 &&
@ -280,10 +304,6 @@ class CharacterMoveService extends BaseService {
distance: requestDistance
}
}
public isValidStep(current: { positionX: number; positionY: number }, next: { positionX: number; positionY: number }): boolean {
return Math.abs(next.positionX - current.positionX) <= 1 && Math.abs(next.positionY - current.positionY) <= 1
}
}
export default new CharacterMoveService()