1
0
forked from noxious/server

update characterLeave event to new event format, npm run format

This commit is contained in:
Dennis Postma 2024-09-15 02:06:16 +02:00
parent b08b4cb013
commit d93044d9d7
5 changed files with 64 additions and 56 deletions

View File

@ -51,7 +51,7 @@ export default function (socket: TSocket, io: Server) {
// add character to zone manager // add character to zone manager
// ZoneManager.addCharacterToZone(zone.id, socket.character as Character) // ZoneManager.addCharacterToZone(zone.id, socket.character as Character)
CharacterManager.initCharacter(socket.character as ExtendedCharacter); CharacterManager.initCharacter(socket.character as ExtendedCharacter)
// ZoneManager.addCharacterToZone(zone.id, socket.character as Character) // ZoneManager.addCharacterToZone(zone.id, socket.character as Character)
// send over zone and characters to socket // send over zone and characters to socket

View File

@ -4,39 +4,48 @@ import ZoneRepository from '../../repositories/zoneRepository'
import ZoneManager from '../../managers/zoneManager' import ZoneManager from '../../managers/zoneManager'
import { Character, Zone } from '@prisma/client' import { Character, Zone } from '@prisma/client'
import CharacterManager from '../../managers/characterManager' import CharacterManager from '../../managers/characterManager'
import logger from '../../utilities/logger'
/** export default class ZoneLeaveEvent {
* Handle character zone leave event constructor(
* @param socket private readonly io: Server,
* @param io private readonly socket: TSocket
*/ ) {}
export default function (socket: TSocket, io: Server) {
socket.on('zone:character:leave', async () => { public listen(): void {
if (!socket.character) { this.socket.on('zone:character:leave', this.handleZoneLeave.bind(this))
}
private async handleZoneLeave(): Promise<void> {
try {
if (!this.socket.character) {
logger.error('zone:character:leave error', 'Character not found')
return return
} }
if (!socket.character.zoneId) { if (!this.socket.character.zoneId) {
logger.error('zone:character:leave error', 'Character not in a zone')
return return
} }
const zone = await ZoneRepository.getById(socket.character.zoneId) const zone = await ZoneRepository.getById(this.socket.character.zoneId)
if (!zone) { if (!zone) {
logger.error('zone:character:leave error', 'Zone not found')
return return
} }
socket.leave(zone.id.toString()) this.socket.leave(zone.id.toString())
// let other clients know of new character // let other clients know of character leaving
io.to(zone.id.toString()).emit('zone:character:leave', socket.character.id) this.io.to(zone.id.toString()).emit('zone:character:leave', this.socket.character.id)
// remove character to zone manager // remove character from zone manager
await CharacterManager.removeCharacter(socket.character) await CharacterManager.removeCharacter(this.socket.character)
})
logger.info('zone:character:leave', `Character ${this.socket.character.id} left zone ${zone.id}`)
} catch (error: any) {
logger.error('zone:character:leave error', error.message)
}
}
} }
/**
* Resources:
* https://stackoverflow.com/questions/6873607/socket-io-rooms-difference-between-broadcast-to-and-sockets-in
*/

View File

@ -32,15 +32,15 @@ export default class CharacterMove {
} }
private async handleCharacterMove({ positionX, positionY }: { positionX: number; positionY: number }): Promise<void> { private async handleCharacterMove({ positionX, positionY }: { positionX: number; positionY: number }): Promise<void> {
let character = CharacterManager.getCharacterFromSocket(this.socket); let character = CharacterManager.getCharacterFromSocket(this.socket)
if (!character) { if (!character) {
logger.error('character:move error', 'Character not found') logger.error('character:move error', 'Character not found')
return return
} }
if(!character) { if (!character) {
logger.error('character:move error', 'character has not been initialized?'); logger.error('character:move error', 'character has not been initialized?')
return; return
} }
const path = await this.characterMoveService.calculatePath(character, positionX, positionY) const path = await this.characterMoveService.calculatePath(character, positionX, positionY)
@ -49,15 +49,15 @@ export default class CharacterMove {
return return
} }
if(!character.isMoving && character.resetMovement) { if (!character.isMoving && character.resetMovement) {
character.resetMovement = false; character.resetMovement = false
} }
if (character.isMoving && !character.resetMovement) { if (character.isMoving && !character.resetMovement) {
character.resetMovement = true character.resetMovement = true
this.nextPath[character.id] = path this.nextPath[character.id] = path
} }
if(!character.isMoving && !character.resetMovement) { if (!character.isMoving && !character.resetMovement) {
character.isMoving = true; character.isMoving = true
await this.moveAlongPath(character, path) await this.moveAlongPath(character, path)
} }
} }
@ -72,7 +72,6 @@ export default class CharacterMove {
// } // }
if (character.resetMovement) { if (character.resetMovement) {
break break
} }
@ -110,9 +109,9 @@ export default class CharacterMove {
await this.characterMoveService.applyMovementDelay() await this.characterMoveService.applyMovementDelay()
} }
if(character.resetMovement) { if (character.resetMovement) {
character.resetMovement = false; character.resetMovement = false
await this.moveAlongPath(character, this.nextPath[character.id]); await this.moveAlongPath(character, this.nextPath[character.id])
} else { } else {
this.finalizeMovement(character) this.finalizeMovement(character)
} }
@ -133,7 +132,7 @@ export default class CharacterMove {
} }
private finalizeMovement(character: ExtendedCharacter): void { private finalizeMovement(character: ExtendedCharacter): void {
character.isMoving = false; character.isMoving = false
this.io.in(character.zoneId.toString()).emit('character:move', character) this.io.in(character.zoneId.toString()).emit('character:move', character)
} }
} }

View File

@ -3,10 +3,10 @@ import { Zone } from '@prisma/client'
import prisma from '../utilities/prisma' import prisma from '../utilities/prisma'
class CharacterManager { class CharacterManager {
private characters!: ExtendedCharacter[]; private characters!: ExtendedCharacter[]
public async boot() { public async boot() {
this.characters = []; this.characters = []
} }
public initCharacter(character: ExtendedCharacter) { public initCharacter(character: ExtendedCharacter) {
@ -23,20 +23,20 @@ class CharacterManager {
zoneId: character.zoneId zoneId: character.zoneId
} }
}) })
this.characters = this.characters.filter(x => x.id !== character.id); this.characters = this.characters.filter((x) => x.id !== character.id)
} }
public getCharacter(characterId: number) { public getCharacter(characterId: number) {
return this.characters.find((x) => x.id === characterId); return this.characters.find((x) => x.id === characterId)
} }
public getCharacterFromSocket(socket: TSocket) { public getCharacterFromSocket(socket: TSocket) {
return this.characters.find((x) => x.id === socket?.character?.id); return this.characters.find((x) => x.id === socket?.character?.id)
} }
public getCharactersInZone(zone: Zone) { public getCharactersInZone(zone: Zone) {
return this.characters.filter(x => x.zoneId === zone.id); return this.characters.filter((x) => x.zoneId === zone.id)
} }
} }
export default new CharacterManager(); export default new CharacterManager()

View File

@ -17,7 +17,7 @@ class LoadedZone {
} }
public getCharacters(): ExtendedCharacter[] { public getCharacters(): ExtendedCharacter[] {
return characterManager.getCharactersInZone(this.zone); return characterManager.getCharactersInZone(this.zone)
} }
public async getGrid(): Promise<number[][]> { public async getGrid(): Promise<number[][]> {