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
// 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)
// send over zone and characters to socket

View File

@ -4,39 +4,48 @@ import ZoneRepository from '../../repositories/zoneRepository'
import ZoneManager from '../../managers/zoneManager'
import { Character, Zone } from '@prisma/client'
import CharacterManager from '../../managers/characterManager'
import logger from '../../utilities/logger'
/**
* Handle character zone leave event
* @param socket
* @param io
*/
export default function (socket: TSocket, io: Server) {
socket.on('zone:character:leave', async () => {
if (!socket.character) {
export default class ZoneLeaveEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void {
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
}
if (!socket.character.zoneId) {
if (!this.socket.character.zoneId) {
logger.error('zone:character:leave error', 'Character not in a zone')
return
}
const zone = await ZoneRepository.getById(socket.character.zoneId)
const zone = await ZoneRepository.getById(this.socket.character.zoneId)
if (!zone) {
logger.error('zone:character:leave error', 'Zone not found')
return
}
socket.leave(zone.id.toString())
this.socket.leave(zone.id.toString())
// let other clients know of new character
io.to(zone.id.toString()).emit('zone:character:leave', socket.character.id)
// let other clients know of character leaving
this.io.to(zone.id.toString()).emit('zone:character:leave', this.socket.character.id)
// remove character to zone manager
await CharacterManager.removeCharacter(socket.character)
})
// remove character from zone manager
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> {
let character = CharacterManager.getCharacterFromSocket(this.socket);
let character = CharacterManager.getCharacterFromSocket(this.socket)
if (!character) {
logger.error('character:move error', 'Character not found')
return
}
if (!character) {
logger.error('character:move error', 'character has not been initialized?');
return;
logger.error('character:move error', 'character has not been initialized?')
return
}
const path = await this.characterMoveService.calculatePath(character, positionX, positionY)
@ -50,14 +50,14 @@ export default class CharacterMove {
}
if (!character.isMoving && character.resetMovement) {
character.resetMovement = false;
character.resetMovement = false
}
if (character.isMoving && !character.resetMovement) {
character.resetMovement = true
this.nextPath[character.id] = path
}
if (!character.isMoving && !character.resetMovement) {
character.isMoving = true;
character.isMoving = true
await this.moveAlongPath(character, path)
}
}
@ -72,7 +72,6 @@ export default class CharacterMove {
// }
if (character.resetMovement) {
break
}
@ -111,8 +110,8 @@ export default class CharacterMove {
}
if (character.resetMovement) {
character.resetMovement = false;
await this.moveAlongPath(character, this.nextPath[character.id]);
character.resetMovement = false
await this.moveAlongPath(character, this.nextPath[character.id])
} else {
this.finalizeMovement(character)
}
@ -133,7 +132,7 @@ export default class CharacterMove {
}
private finalizeMovement(character: ExtendedCharacter): void {
character.isMoving = false;
character.isMoving = false
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'
class CharacterManager {
private characters!: ExtendedCharacter[];
private characters!: ExtendedCharacter[]
public async boot() {
this.characters = [];
this.characters = []
}
public initCharacter(character: ExtendedCharacter) {
@ -23,20 +23,20 @@ class CharacterManager {
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) {
return this.characters.find((x) => x.id === characterId);
return this.characters.find((x) => x.id === characterId)
}
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) {
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[] {
return characterManager.getCharactersInZone(this.zone);
return characterManager.getCharactersInZone(this.zone)
}
public async getGrid(): Promise<number[][]> {