forked from noxious/server
More TP work
This commit is contained in:
@ -1,13 +1,19 @@
|
||||
import { Server } from 'socket.io'
|
||||
import { TSocket, ExtendedCharacter } from '../../utilities/types'
|
||||
import { CharacterMoveService } from '../../services/character/characterMoveService'
|
||||
import { TeleportService } from '../../services/character/teleportService'
|
||||
import { MovementValidator } from '../../services/character/movementValidator'
|
||||
import { ZoneEventTileService } from '../../services/zoneEventTileService'
|
||||
import { MovementValidator } from '../../utilities/movementValidator'
|
||||
import { SocketEmitter } from '../../utilities/socketEmitter'
|
||||
import prisma from '../../utilities/prisma'
|
||||
import { ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client'
|
||||
|
||||
type ZoneEventTileWithTeleport = ZoneEventTile & {
|
||||
teleport: ZoneEventTileTeleport | null
|
||||
}
|
||||
|
||||
export default class CharacterMoveEvent {
|
||||
private characterMoveService: CharacterMoveService
|
||||
private teleportService: TeleportService
|
||||
private zoneEventTileService: ZoneEventTileService
|
||||
private movementValidator: MovementValidator
|
||||
private socketEmitter: SocketEmitter
|
||||
|
||||
@ -16,7 +22,7 @@ export default class CharacterMoveEvent {
|
||||
private readonly socket: TSocket
|
||||
) {
|
||||
this.characterMoveService = new CharacterMoveService()
|
||||
this.teleportService = new TeleportService()
|
||||
this.zoneEventTileService = new ZoneEventTileService()
|
||||
this.movementValidator = new MovementValidator()
|
||||
this.socketEmitter = new SocketEmitter(io, socket)
|
||||
}
|
||||
@ -47,11 +53,18 @@ export default class CharacterMoveEvent {
|
||||
break
|
||||
}
|
||||
|
||||
const teleport = await this.teleportService.checkForTeleport(character, position)
|
||||
if (teleport) {
|
||||
await this.characterMoveService.updatePosition(character, position, teleport.toZoneId)
|
||||
await this.teleportService.handleTeleport(this.socket, character, teleport)
|
||||
break
|
||||
const zoneEventTile = await prisma.zoneEventTile.findFirst({
|
||||
where: {
|
||||
zoneId: character.zoneId,
|
||||
type: 'TELEPORT',
|
||||
positionX: Math.floor(position.x),
|
||||
positionY: Math.floor(position.y)
|
||||
},
|
||||
include: { teleport: true }
|
||||
}) as ZoneEventTileWithTeleport | null
|
||||
|
||||
if (zoneEventTile) {
|
||||
await this.handleZoneEventTile(zoneEventTile)
|
||||
}
|
||||
|
||||
await this.characterMoveService.updatePosition(character, position)
|
||||
@ -63,6 +76,21 @@ export default class CharacterMoveEvent {
|
||||
this.finalizeMovement(character)
|
||||
}
|
||||
|
||||
private async handleZoneEventTile(zoneEventTile: ZoneEventTileWithTeleport): Promise<void> {
|
||||
const { character } = this.socket
|
||||
if (!character) {
|
||||
console.error('character:move error', 'Character not found')
|
||||
return
|
||||
}
|
||||
|
||||
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)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
private finalizeMovement(character: ExtendedCharacter): void {
|
||||
character.isMoving = false
|
||||
this.socketEmitter.emitCharacterMove(character)
|
||||
|
Reference in New Issue
Block a user