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

View File

@ -1,15 +1,16 @@
import { AStar } from '../../utilities/character/aStar'
import ZoneManager from '../../managers/zoneManager'
import prisma from '../../utilities/prisma'
import Rotation from '../../utilities/character/rotation'
import { gameLogger } from '../../utilities/logger'
import { Character } from '@prisma/client'
import { Character, CharacterGender, CharacterRace } from '@prisma/client'
interface Position {
x: number
y: number
}
export class CharacterMoveService {
export class CharacterService {
private static readonly MOVEMENT_DELAY_MS = 250
public updatePosition(character: Character, position: Position, newZoneId?: number): void {
@ -48,10 +49,32 @@ export class CharacterMoveService {
}
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 {
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 { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/characterRepository'
import { CharacterService } from '../../services/character/characterService'
import { ZCharacterCreate } from '../../utilities/zodTypes'
import prisma from '../../utilities/prisma'
import { gameLogger } from '../../utilities/logger'
import { ZodError } from 'zod'
@ -38,13 +38,8 @@ export default class CharacterCreateEvent {
return this.socket.emit('notification', { message: 'You can only have 4 characters' })
}
const character: Character = await prisma.character.create({
data: {
name: data.name,
userId: user_id
// characterTypeId: 1 // @TODO set to chosen character type
}
})
const characterService = new CharacterService()
const character: Character = await characterService.create(data.name, user_id)
characters = [...characters, character]

View File

@ -1,8 +1,7 @@
import { Server } from 'socket.io'
import { TSocket, ZoneEventTileWithTeleport } from '../../utilities/types'
import { CharacterMoveService } from '../../services/character/characterMoveService'
import { CharacterService } from '../../services/character/characterService'
import { ZoneEventTileService } from '../../services/zoneEventTileService'
import prisma from '../../utilities/prisma'
import Rotation from '../../utilities/character/rotation'
import { gameLogger } from '../../utilities/logger'
import ZoneManager from '../../managers/zoneManager'
@ -10,7 +9,7 @@ import ZoneCharacter from '../../models/zoneCharacter'
import zoneEventTileRepository from '../../repositories/zoneEventTileRepository'
export default class CharacterMove {
private readonly characterMoveService = new CharacterMoveService()
private readonly characterService = new CharacterService()
private readonly zoneEventTileService = new ZoneEventTileService()
constructor(
@ -35,7 +34,7 @@ export default class CharacterMove {
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) {
this.io.in(zoneCharacter.character.zoneId.toString()).emit('character:moveError', 'No valid path found')
return
@ -67,9 +66,9 @@ export default class CharacterMove {
break
}
this.characterMoveService.updatePosition(character, end)
this.characterService.updatePosition(character, end)
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