Replaced old teleport func. with new one

This commit is contained in:
Dennis Postma 2025-01-04 20:14:56 +01:00
parent 21f4c5328f
commit ae269be196
2 changed files with 7 additions and 54 deletions

View File

@ -2,14 +2,12 @@ import { BaseEvent } from '#application/base/baseEvent'
import { MapEventTileWithTeleport } from '#application/types'
import MapManager from '#managers/mapManager'
import MapCharacter from '#models/mapCharacter'
import mapEventTileRepository from '#repositories/mapEventTileRepository'
import MapEventTileRepository from '#repositories/mapEventTileRepository'
import CharacterService from '#services/characterService'
import MapEventTileService from '#services/mapEventTileService'
import TeleportService from '#services/teleportService'
export default class CharacterMove extends BaseEvent {
private readonly characterService = CharacterService
private readonly mapEventTileService = MapEventTileService
public listen(): void {
this.socket.on('map:character:move', this.handleEvent.bind(this))
@ -88,9 +86,13 @@ export default class CharacterMove extends BaseEvent {
return
}
// @TODO: Replace with TeleportService
if (mapEventTile.teleport) {
await this.mapEventTileService.handleTeleport(this.io, this.socket, mapCharacter.character, mapEventTile.teleport)
await TeleportService.teleportCharacter(mapCharacter.character.id, {
targetMapId: mapEventTile.teleport.toMap.id,
targetX: mapEventTile.teleport.toPositionX,
targetY: mapEventTile.teleport.toPositionY,
rotation: mapCharacter.character.rotation
})
}
}

View File

@ -1,49 +0,0 @@
import { Server } from 'socket.io'
import { BaseService } from '#application/base/baseService'
import { ExtendedCharacter, TSocket } from '#application/types'
import { MapEventTileTeleport } from '#entities/mapEventTileTeleport'
import MapManager from '#managers/mapManager'
class MapEventTileService extends BaseService {
public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: MapEventTileTeleport): Promise<void> {
if (teleport.toMap.id === character.map.id) return
const loadedMap = MapManager.getMapById(teleport.toMap.id)
if (!loadedMap) {
this.logger.error('map:character:join error: Loaded map not found')
return
}
const map = loadedMap.getMap()
const oldMapId = character.map.id
const newMapId = teleport.toMap.id
character.isMoving = false
// Update local character object
character.setMap(teleport.toMap).setRotation(teleport.toRotation).setPositionX(teleport.toPositionX).setPositionY(teleport.toPositionY)
await character.save()
// Remove and add character to new map
await loadedMap.removeCharacter(character.id)
loadedMap.addCharacter(character)
// Emit events
io.to(oldMapId).emit('map:character:leave', character.id)
io.to(newMapId).emit('map:character:join', character)
// Update socket rooms
socket.leave(oldMapId)
socket.join(newMapId)
// Send teleport information to the client
socket.emit('map:character:teleport', {
map,
characters: loadedMap.getCharactersInMap()
})
}
}
export default new MapEventTileService()