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
|
// 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
|
||||||
|
@ -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))
|
||||||
return
|
}
|
||||||
|
|
||||||
|
private async handleZoneLeave(): Promise<void> {
|
||||||
|
try {
|
||||||
|
if (!this.socket.character) {
|
||||||
|
logger.error('zone:character:leave error', 'Character not found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.socket.character.zoneId) {
|
||||||
|
logger.error('zone:character:leave error', 'Character not in a zone')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const zone = await ZoneRepository.getById(this.socket.character.zoneId)
|
||||||
|
|
||||||
|
if (!zone) {
|
||||||
|
logger.error('zone:character:leave error', 'Zone not found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.socket.leave(zone.id.toString())
|
||||||
|
|
||||||
|
// let other clients know of character leaving
|
||||||
|
this.io.to(zone.id.toString()).emit('zone:character:leave', this.socket.character.id)
|
||||||
|
|
||||||
|
// 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)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (!socket.character.zoneId) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const zone = await ZoneRepository.getById(socket.character.zoneId)
|
|
||||||
|
|
||||||
if (!zone) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
socket.leave(zone.id.toString())
|
|
||||||
|
|
||||||
// let other clients know of new character
|
|
||||||
io.to(zone.id.toString()).emit('zone:character:leave', socket.character.id)
|
|
||||||
|
|
||||||
// remove character to zone manager
|
|
||||||
await CharacterManager.removeCharacter(socket.character)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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> {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
|
@ -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[][]> {
|
||||||
@ -46,4 +46,4 @@ class LoadedZone {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default LoadedZone
|
export default LoadedZone
|
||||||
|
Loading…
x
Reference in New Issue
Block a user