Continues asset loading
This commit is contained in:
parent
29dad4914a
commit
6e07fa6a75
@ -10,7 +10,7 @@ import CharacterManager from '../../managers/characterManager'
|
|||||||
import zoneManager from '../../managers/zoneManager'
|
import zoneManager from '../../managers/zoneManager'
|
||||||
import ZoneManager from '../../managers/zoneManager'
|
import ZoneManager from '../../managers/zoneManager'
|
||||||
|
|
||||||
type ZoneEventTileWithTeleport = ZoneEventTile & {
|
export type ZoneEventTileWithTeleport = ZoneEventTile & {
|
||||||
teleport: ZoneEventTileTeleport
|
teleport: ZoneEventTileTeleport
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import { Zone } from '@prisma/client'
|
import { Zone, ZoneEventTileTeleport, ZoneEventTileType } from '@prisma/client'
|
||||||
import ZoneRepository from '../repositories/zoneRepository'
|
import ZoneRepository from '../repositories/zoneRepository'
|
||||||
import ZoneService from '../services/zoneService'
|
import ZoneService from '../services/zoneService'
|
||||||
import logger from '../utilities/logger'
|
import logger from '../utilities/logger'
|
||||||
import LoadedZone from '../models/loadedZone'
|
import LoadedZone from '../models/loadedZone'
|
||||||
import zoneRepository from '../repositories/zoneRepository'
|
import zoneRepository from '../repositories/zoneRepository'
|
||||||
|
import { beforeEach } from 'node:test'
|
||||||
|
import prisma from '../utilities/prisma'
|
||||||
|
|
||||||
class ZoneManager {
|
class ZoneManager {
|
||||||
private loadedZones: LoadedZone[] = []
|
private loadedZones: LoadedZone[] = []
|
||||||
@ -25,15 +27,36 @@ class ZoneManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// For now only current zone.
|
// For now only current zone.
|
||||||
public async getNeededAssets(zone: Zone) {
|
public async getNeededAssets(zone: Zone, getMore = true): Promise<ZoneAssets> {
|
||||||
const tiles = this.getUnique((JSON.parse(JSON.stringify(zone.tiles)) as string[][]).reduce((acc, val) => [...acc, ...val]));
|
const tiles: string[] = this.getUnique((JSON.parse(JSON.stringify(zone.tiles)) as string[][]).reduce((acc, val) => [...acc, ...val]));
|
||||||
const objects = await zoneRepository.getObjects(zone.id);
|
const objects = await zoneRepository.getObjects(zone.id);
|
||||||
|
const eventTeleportTiles = await zoneRepository.getEventTeleportTiles(zone.id);
|
||||||
|
let toZoneAssets = null;
|
||||||
|
if(getMore) {
|
||||||
|
for (const eventTeleportTile of eventTeleportTiles) {
|
||||||
|
console.log(eventTeleportTile);
|
||||||
|
console.log(eventTeleportTile.teleport.toZoneId);
|
||||||
|
const toZone = await zoneRepository.getById(eventTeleportTile.teleport.toZoneId);
|
||||||
|
console.log(toZone);
|
||||||
|
if(toZone) {
|
||||||
|
if(!toZoneAssets) {
|
||||||
|
toZoneAssets = await this.getNeededAssets(toZone, false);
|
||||||
|
} else {
|
||||||
|
const newToZoneAssets = await this.getNeededAssets(toZone, false);
|
||||||
|
toZoneAssets = {
|
||||||
|
tiles: this.getUnique([...toZoneAssets.tiles, ...(newToZoneAssets ? newToZoneAssets.tiles : [])]),
|
||||||
|
objects: this.getUnique([...toZoneAssets.objects, ...(newToZoneAssets ? newToZoneAssets.objects : [])]),
|
||||||
|
} as ZoneAssets
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
let mappedObjects = this.getUnique(objects.map(x => x.objectId));
|
let mappedObjects = this.getUnique(objects.map(x => x.objectId));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tiles,
|
tiles: this.getUnique([...tiles, ...(toZoneAssets ? toZoneAssets.tiles : [])]),
|
||||||
objects: mappedObjects
|
objects: this.getUnique([...mappedObjects, ...(toZoneAssets ? toZoneAssets.objects : [])]),
|
||||||
};
|
} as ZoneAssets;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getUnique<T>(array: T[]) {
|
private getUnique<T>(array: T[]) {
|
||||||
@ -65,4 +88,9 @@ class ZoneManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ZoneAssets {
|
||||||
|
tiles: string[]
|
||||||
|
objects: string[]
|
||||||
|
}
|
||||||
|
|
||||||
export default new ZoneManager()
|
export default new ZoneManager()
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Zone, ZoneEventTile, ZoneObject } from '@prisma/client'
|
import { Zone, ZoneEventTile, ZoneEventTileTeleport, ZoneEventTileType, ZoneObject } from '@prisma/client'
|
||||||
import prisma from '../utilities/prisma'
|
import prisma from '../utilities/prisma'
|
||||||
import logger from '../utilities/logger'
|
import logger from '../utilities/logger'
|
||||||
|
import { ZoneEventTileWithTeleport } from '../events/zone/characterMove'
|
||||||
|
|
||||||
class ZoneRepository {
|
class ZoneRepository {
|
||||||
async getFirst(): Promise<Zone | null> {
|
async getFirst(): Promise<Zone | null> {
|
||||||
@ -60,6 +61,21 @@ class ZoneRepository {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getEventTeleportTiles(id: number): Promise<ZoneEventTileWithTeleport[]> {
|
||||||
|
try {
|
||||||
|
return await prisma.zoneEventTile.findMany({
|
||||||
|
where: {
|
||||||
|
zoneId: id,
|
||||||
|
type: ZoneEventTileType.TELEPORT
|
||||||
|
},
|
||||||
|
include: { teleport: true }
|
||||||
|
}) as unknown as ZoneEventTileWithTeleport[]
|
||||||
|
} catch (error: any) {
|
||||||
|
logger.error(`Failed to get zone event tiles: ${error.message}`)
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async getObjects(id: number): Promise<ZoneObject[]> {
|
async getObjects(id: number): Promise<ZoneObject[]> {
|
||||||
try {
|
try {
|
||||||
return await prisma.zoneObject.findMany({
|
return await prisma.zoneObject.findMany({
|
||||||
|
@ -36,6 +36,7 @@ export class ZoneEventTileService {
|
|||||||
// Emit events
|
// Emit events
|
||||||
io.to(oldZoneId.toString()).emit('zone:character:leave', character.id)
|
io.to(oldZoneId.toString()).emit('zone:character:leave', character.id)
|
||||||
io.to(newZoneId.toString()).emit('zone:character:join', character)
|
io.to(newZoneId.toString()).emit('zone:character:join', character)
|
||||||
|
io.to(socket.id).emit('zone:character:load_assets', newZoneId);
|
||||||
|
|
||||||
// Update socket rooms
|
// Update socket rooms
|
||||||
socket.leave(oldZoneId.toString())
|
socket.leave(oldZoneId.toString())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user