Replaced old teleport func. with new one
This commit is contained in:
parent
21f4c5328f
commit
ae269be196
@ -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
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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()
|
Loading…
x
Reference in New Issue
Block a user