Cleaned characterMove event, moved some of its logic into char. move service
This commit is contained in:
@ -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()
|
||||
|
Reference in New Issue
Block a user