Refractored MVP for teleport
This commit is contained in:
parent
1aa3d1a208
commit
89cca1d0f8
@ -65,6 +65,7 @@ export default class CharacterMoveEvent {
|
||||
|
||||
if (zoneEventTile) {
|
||||
await this.handleZoneEventTile(zoneEventTile)
|
||||
break
|
||||
}
|
||||
|
||||
await this.characterMoveService.updatePosition(character, position)
|
||||
@ -85,8 +86,7 @@ export default class CharacterMoveEvent {
|
||||
|
||||
const teleport = zoneEventTile.teleport
|
||||
if (teleport) {
|
||||
await this.characterMoveService.updatePosition(character, { x: teleport.toPositionX, y: teleport.toPositionY }, teleport.toZoneId)
|
||||
await this.zoneEventTileService.handleTeleport(this.socket, character, teleport)
|
||||
await this.zoneEventTileService.handleTeleport(this.io, this.socket, character, teleport)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
@ -2,15 +2,19 @@ import { ExtendedCharacter, TSocket } from '../utilities/types'
|
||||
import prisma from '../utilities/prisma'
|
||||
import ZoneRepository from '../repositories/zoneRepository'
|
||||
import ZoneManager from '../managers/zoneManager'
|
||||
import { ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
|
||||
import { Character, ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
|
||||
import { Server } from 'socket.io'
|
||||
|
||||
export class ZoneEventTileService {
|
||||
public async handleTeleport(socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> {
|
||||
public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise<void> {
|
||||
if (teleport.toZoneId === character.zoneId) return
|
||||
|
||||
const zone = await ZoneRepository.getById(teleport.toZoneId)
|
||||
if (!zone) return
|
||||
|
||||
const oldZoneId = character.zoneId
|
||||
const newZoneId = teleport.toZoneId
|
||||
|
||||
character.zoneId = teleport.toZoneId
|
||||
character.positionX = teleport.toPositionX
|
||||
character.positionY = teleport.toPositionY
|
||||
@ -18,6 +22,11 @@ export class ZoneEventTileService {
|
||||
socket.leave(character.zoneId.toString())
|
||||
socket.join(teleport.toZoneId.toString())
|
||||
|
||||
io.to(oldZoneId.toString()).emit('zone:character:leave', character);
|
||||
io.to(newZoneId.toString()).emit('zone:character:join', character);
|
||||
ZoneManager.removeCharacterFromZone(oldZoneId, character as Character);
|
||||
ZoneManager.addCharacterToZone(newZoneId, character as Character);
|
||||
|
||||
socket.emit('zone:teleport', {
|
||||
zone,
|
||||
characters: ZoneManager.getCharactersInZone(zone.id)
|
||||
|
Loading…
x
Reference in New Issue
Block a user