Replaced old teleport func. with new one
This commit is contained in:
@ -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()
|
Reference in New Issue
Block a user