From 293b2be919640340db31612cdd2ea14076e0833a Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Mon, 9 Sep 2024 20:50:14 +0200 Subject: [PATCH] Fixed char move --- src/events/zone/characterLeave.ts | 8 ++------ src/models/zone/loadedZone.ts | 19 +++++-------------- src/models/zone/zoneCharacter.ts | 14 -------------- .../character/characterMoveService.ts | 2 +- src/services/zoneEventTileService.ts | 8 ++++---- 5 files changed, 12 insertions(+), 39 deletions(-) delete mode 100644 src/models/zone/zoneCharacter.ts diff --git a/src/events/zone/characterLeave.ts b/src/events/zone/characterLeave.ts index 0a69239..e1caa9c 100644 --- a/src/events/zone/characterLeave.ts +++ b/src/events/zone/characterLeave.ts @@ -3,6 +3,7 @@ import { TSocket } from '../../utilities/types' import ZoneRepository from '../../repositories/zoneRepository' import ZoneManager from '../../managers/zoneManager' import { Character, Zone } from '@prisma/client' +import CharacterManager from '../../managers/characterManager' /** * Handle character zone leave event @@ -11,22 +12,17 @@ import { Character, Zone } from '@prisma/client' */ export default function (socket: TSocket, io: Server) { socket.on('zone:character:leave', async () => { - console.log(`---Socket ${socket.character?.id} has leaved zone.`) - if (!socket.character) { - console.log('Socket leaved zone but had no character set') return } if (!socket.character.zoneId) { - console.log(`---Zone id not provided.`) return } const zone = await ZoneRepository.getById(socket.character.zoneId) if (!zone) { - console.log(`---Zone not found.`) return } @@ -36,7 +32,7 @@ export default function (socket: TSocket, io: Server) { io.to(zone.id.toString()).emit('zone:character:leave', socket.character) // add character to zone manager - ZoneManager.removeCharacterFromZone(zone.id, socket.character as Character) + CharacterManager.removeCharacter(socket.character) }) } diff --git a/src/models/zone/loadedZone.ts b/src/models/zone/loadedZone.ts index c7db5f4..857f1a1 100644 --- a/src/models/zone/loadedZone.ts +++ b/src/models/zone/loadedZone.ts @@ -1,10 +1,10 @@ -import { Character, Zone } from '@prisma/client' -import ZoneCharacter from './zoneCharacter' +import { Zone } from '@prisma/client' import zoneRepository from '../../repositories/zoneRepository' +import characterManager from '../../managers/characterManager' +import { ExtendedCharacter } from '../../utilities/types' class LoadedZone { private readonly zone: Zone - private characters: ZoneCharacter[] = [] // private readonly npcs: ZoneNPC[] = [] private readonly grid: number[][] = [] @@ -16,17 +16,8 @@ class LoadedZone { return this.zone } - public getCharacters(): ZoneCharacter[] { - return this.characters - } - - public addCharacter(character: Character): void { - const zoneCharacter = new ZoneCharacter(character) - this.characters.push(zoneCharacter) - } - - public removeCharacter(character: Character): void { - this.characters = this.characters.filter((zoneCharacter) => zoneCharacter.getCharacter().id !== character.id) + public getCharacters(): ExtendedCharacter[] { + return characterManager.getCharactersInZone(this.zone); } public async getGrid(): Promise { diff --git a/src/models/zone/zoneCharacter.ts b/src/models/zone/zoneCharacter.ts deleted file mode 100644 index 128de8e..0000000 --- a/src/models/zone/zoneCharacter.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Character } from '@prisma/client' - -export default class ZoneCharacter { - private readonly character: Character - private isMoving: boolean = false - - constructor(character: Character) { - this.character = character - } - - public getCharacter(): Character { - return this.character - } -} diff --git a/src/services/character/characterMoveService.ts b/src/services/character/characterMoveService.ts index e1352b3..4361c6b 100644 --- a/src/services/character/characterMoveService.ts +++ b/src/services/character/characterMoveService.ts @@ -26,7 +26,7 @@ export class CharacterMoveService { } public async calculatePath(character: ExtendedCharacter, targetX: number, targetY: number): Promise | null> { - const grid = await ZoneManager.getGrid(character.zoneId) + const grid = await ZoneManager.getZoneById(character.zoneId)?.getGrid() if (!grid?.length) { logger.error('character:move error', 'Grid not found or empty') return null diff --git a/src/services/zoneEventTileService.ts b/src/services/zoneEventTileService.ts index ce99751..683278b 100644 --- a/src/services/zoneEventTileService.ts +++ b/src/services/zoneEventTileService.ts @@ -4,6 +4,7 @@ import ZoneRepository from '../repositories/zoneRepository' import ZoneManager from '../managers/zoneManager' import { Character, ZoneEventTile, ZoneEventTileTeleport } from '@prisma/client' import { Server } from 'socket.io' +import CharacterManager from '../managers/characterManager' export class ZoneEventTileService { public async handleTeleport(io: Server, socket: TSocket, character: ExtendedCharacter, teleport: ZoneEventTileTeleport): Promise { @@ -12,6 +13,8 @@ export class ZoneEventTileService { const zone = await ZoneRepository.getById(teleport.toZoneId) if (!zone) return + // CharacterManager.moveCharacterBetweenZones(character, zone) + const oldZoneId = character.zoneId const newZoneId = teleport.toZoneId @@ -30,9 +33,6 @@ export class ZoneEventTileService { character.positionX = teleport.toPositionX character.positionY = teleport.toPositionY - // Atomic operation in ZoneManager - await ZoneManager.moveCharacterBetweenZones(oldZoneId, newZoneId, character as Character) - // Emit events io.to(oldZoneId.toString()).emit('zone:character:leave', character.id) io.to(newZoneId.toString()).emit('zone:character:join', character) @@ -44,7 +44,7 @@ export class ZoneEventTileService { // Send teleport information to the client socket.emit('zone:teleport', { zone, - characters: ZoneManager.getCharactersInZone(zone.id) + characters: CharacterManager.getCharactersInZone(zone) }) } }