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 { MapEventTileWithTeleport } from '#application/types'
|
||||||
import MapManager from '#managers/mapManager'
|
import MapManager from '#managers/mapManager'
|
||||||
import MapCharacter from '#models/mapCharacter'
|
import MapCharacter from '#models/mapCharacter'
|
||||||
import mapEventTileRepository from '#repositories/mapEventTileRepository'
|
|
||||||
import MapEventTileRepository from '#repositories/mapEventTileRepository'
|
import MapEventTileRepository from '#repositories/mapEventTileRepository'
|
||||||
import CharacterService from '#services/characterService'
|
import CharacterService from '#services/characterService'
|
||||||
import MapEventTileService from '#services/mapEventTileService'
|
import TeleportService from '#services/teleportService'
|
||||||
|
|
||||||
export default class CharacterMove extends BaseEvent {
|
export default class CharacterMove extends BaseEvent {
|
||||||
private readonly characterService = CharacterService
|
private readonly characterService = CharacterService
|
||||||
private readonly mapEventTileService = MapEventTileService
|
|
||||||
|
|
||||||
public listen(): void {
|
public listen(): void {
|
||||||
this.socket.on('map:character:move', this.handleEvent.bind(this))
|
this.socket.on('map:character:move', this.handleEvent.bind(this))
|
||||||
@ -88,9 +86,13 @@ export default class CharacterMove extends BaseEvent {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO: Replace with TeleportService
|
|
||||||
if (mapEventTile.teleport) {
|
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