1
0
forked from noxious/server

Updated create and update calls to services

This commit is contained in:
Colin Kallemein 2024-11-17 20:59:24 +01:00
parent 2e267a36aa
commit fc92d9ea79
4 changed files with 37 additions and 27 deletions

View File

@ -1,5 +1,5 @@
import { Character } from '@prisma/client' import { Character } from '@prisma/client'
import prisma from '../utilities/prisma' import { CharacterService } from '../services/character/characterService'
class ZoneCharacter { class ZoneCharacter {
public readonly character: Character public readonly character: Character
@ -11,15 +11,8 @@ class ZoneCharacter {
} }
public async savePosition() { public async savePosition() {
await prisma.character.update({ const characterService = new CharacterService()
where: { id: this.character.id }, await characterService.updateCharacterPosition(this.character.id, this.character.positionX, this.character.positionY, this.character.rotation, this.character.zoneId)
data: {
positionX: this.character.positionX,
positionY: this.character.positionY,
rotation: this.character.rotation,
zoneId: this.character.zoneId
}
})
} }
} }

View File

@ -1,15 +1,16 @@
import { AStar } from '../../utilities/character/aStar' import { AStar } from '../../utilities/character/aStar'
import ZoneManager from '../../managers/zoneManager' import ZoneManager from '../../managers/zoneManager'
import prisma from '../../utilities/prisma'
import Rotation from '../../utilities/character/rotation' import Rotation from '../../utilities/character/rotation'
import { gameLogger } from '../../utilities/logger' import { gameLogger } from '../../utilities/logger'
import { Character } from '@prisma/client' import { Character, CharacterGender, CharacterRace } from '@prisma/client'
interface Position { interface Position {
x: number x: number
y: number y: number
} }
export class CharacterMoveService { export class CharacterService {
private static readonly MOVEMENT_DELAY_MS = 250 private static readonly MOVEMENT_DELAY_MS = 250
public updatePosition(character: Character, position: Position, newZoneId?: number): void { public updatePosition(character: Character, position: Position, newZoneId?: number): void {
@ -48,10 +49,32 @@ export class CharacterMoveService {
} }
public async applyMovementDelay(): Promise<void> { public async applyMovementDelay(): Promise<void> {
await new Promise((resolve) => setTimeout(resolve, CharacterMoveService.MOVEMENT_DELAY_MS)) await new Promise((resolve) => setTimeout(resolve, CharacterService.MOVEMENT_DELAY_MS))
} }
private isValidPosition(position: Position): boolean { private isValidPosition(position: Position): boolean {
return Number.isFinite(position.x) && Number.isFinite(position.y) && position.x >= 0 && position.y >= 0 return Number.isFinite(position.x) && Number.isFinite(position.y) && position.x >= 0 && position.y >= 0
} }
async create(name: string, userId: number) {
return prisma.character.create({
data: {
name,
userId
// characterTypeId: 1 // @TODO set to chosen character type
}
})
}
async updateCharacterPosition(id: number, positionX: number, positionY: number, rotation: number, zoneId: number) {
await prisma.character.update({
where: { id },
data: {
positionX,
positionY,
rotation,
zoneId
}
})
}
} }

View File

@ -2,8 +2,8 @@ import { Server } from 'socket.io'
import { TSocket } from '../../utilities/types' import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client' import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/characterRepository' import CharacterRepository from '../../repositories/characterRepository'
import { CharacterService } from '../../services/character/characterService'
import { ZCharacterCreate } from '../../utilities/zodTypes' import { ZCharacterCreate } from '../../utilities/zodTypes'
import prisma from '../../utilities/prisma'
import { gameLogger } from '../../utilities/logger' import { gameLogger } from '../../utilities/logger'
import { ZodError } from 'zod' import { ZodError } from 'zod'
@ -38,13 +38,8 @@ export default class CharacterCreateEvent {
return this.socket.emit('notification', { message: 'You can only have 4 characters' }) return this.socket.emit('notification', { message: 'You can only have 4 characters' })
} }
const character: Character = await prisma.character.create({ const characterService = new CharacterService()
data: { const character: Character = await characterService.create(data.name, user_id)
name: data.name,
userId: user_id
// characterTypeId: 1 // @TODO set to chosen character type
}
})
characters = [...characters, character] characters = [...characters, character]

View File

@ -1,8 +1,7 @@
import { Server } from 'socket.io' import { Server } from 'socket.io'
import { TSocket, ZoneEventTileWithTeleport } from '../../utilities/types' import { TSocket, ZoneEventTileWithTeleport } from '../../utilities/types'
import { CharacterMoveService } from '../../services/character/characterMoveService' import { CharacterService } from '../../services/character/characterService'
import { ZoneEventTileService } from '../../services/zoneEventTileService' import { ZoneEventTileService } from '../../services/zoneEventTileService'
import prisma from '../../utilities/prisma'
import Rotation from '../../utilities/character/rotation' import Rotation from '../../utilities/character/rotation'
import { gameLogger } from '../../utilities/logger' import { gameLogger } from '../../utilities/logger'
import ZoneManager from '../../managers/zoneManager' import ZoneManager from '../../managers/zoneManager'
@ -10,7 +9,7 @@ import ZoneCharacter from '../../models/zoneCharacter'
import zoneEventTileRepository from '../../repositories/zoneEventTileRepository' import zoneEventTileRepository from '../../repositories/zoneEventTileRepository'
export default class CharacterMove { export default class CharacterMove {
private readonly characterMoveService = new CharacterMoveService() private readonly characterService = new CharacterService()
private readonly zoneEventTileService = new ZoneEventTileService() private readonly zoneEventTileService = new ZoneEventTileService()
constructor( constructor(
@ -35,7 +34,7 @@ export default class CharacterMove {
await new Promise((resolve) => setTimeout(resolve, 100)) await new Promise((resolve) => setTimeout(resolve, 100))
} }
const path = await this.characterMoveService.calculatePath(zoneCharacter.character, positionX, positionY) const path = await this.characterService.calculatePath(zoneCharacter.character, positionX, positionY)
if (!path) { if (!path) {
this.io.in(zoneCharacter.character.zoneId.toString()).emit('character:moveError', 'No valid path found') this.io.in(zoneCharacter.character.zoneId.toString()).emit('character:moveError', 'No valid path found')
return return
@ -67,9 +66,9 @@ export default class CharacterMove {
break break
} }
this.characterMoveService.updatePosition(character, end) this.characterService.updatePosition(character, end)
this.io.in(character.zoneId.toString()).emit('character:move', zoneCharacter) this.io.in(character.zoneId.toString()).emit('character:move', zoneCharacter)
await this.characterMoveService.applyMovementDelay() await this.characterService.applyMovementDelay()
} }
// Only finalize if this path wasn't interrupted // Only finalize if this path wasn't interrupted