forked from noxious/server
update characterLeave event to new event format, npm run format
This commit is contained in:
parent
b08b4cb013
commit
d93044d9d7
@ -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
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
if (!character) {
|
||||
logger.error('character:move error', 'character has not been initialized?')
|
||||
return
|
||||
}
|
||||
|
||||
const path = await this.characterMoveService.calculatePath(character, positionX, positionY)
|
||||
@ -49,15 +49,15 @@ export default class CharacterMove {
|
||||
return
|
||||
}
|
||||
|
||||
if(!character.isMoving && character.resetMovement) {
|
||||
character.resetMovement = false;
|
||||
if (!character.isMoving && character.resetMovement) {
|
||||
character.resetMovement = false
|
||||
}
|
||||
if (character.isMoving && !character.resetMovement) {
|
||||
character.resetMovement = true
|
||||
this.nextPath[character.id] = path
|
||||
}
|
||||
if(!character.isMoving && !character.resetMovement) {
|
||||
character.isMoving = true;
|
||||
if (!character.isMoving && !character.resetMovement) {
|
||||
character.isMoving = true
|
||||
await this.moveAlongPath(character, path)
|
||||
}
|
||||
}
|
||||
@ -72,7 +72,6 @@ export default class CharacterMove {
|
||||
// }
|
||||
|
||||
if (character.resetMovement) {
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
@ -110,9 +109,9 @@ export default class CharacterMove {
|
||||
await this.characterMoveService.applyMovementDelay()
|
||||
}
|
||||
|
||||
if(character.resetMovement) {
|
||||
character.resetMovement = false;
|
||||
await this.moveAlongPath(character, this.nextPath[character.id]);
|
||||
if (character.resetMovement) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -17,7 +17,7 @@ class LoadedZone {
|
||||
}
|
||||
|
||||
public getCharacters(): ExtendedCharacter[] {
|
||||
return characterManager.getCharactersInZone(this.zone);
|
||||
return characterManager.getCharactersInZone(this.zone)
|
||||
}
|
||||
|
||||
public async getGrid(): Promise<number[][]> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user