From fce5c8dad00fe265787bbbde6ca5d60561aab74a Mon Sep 17 00:00:00 2001 From: Zaxiure Date: Mon, 16 Sep 2024 20:35:09 +0200 Subject: [PATCH] Partial fix, still missing functionality (like a lot) --- src/managers/zoneManager.ts | 19 ++++++++++++------ src/utilities/http.ts | 40 +++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/managers/zoneManager.ts b/src/managers/zoneManager.ts index 7f34512..9ce92fd 100644 --- a/src/managers/zoneManager.ts +++ b/src/managers/zoneManager.ts @@ -25,19 +25,26 @@ class ZoneManager { } // For now only current zone. - public async getAssetsNeeded(zone: Zone) { - zone.tiles - const tiles = JSON.parse(zone.tiles as string) as string[][]; + public async getNeededAssets(zone: Zone) { + const tiles = this.getUnique((JSON.parse(JSON.stringify(zone.tiles)) as string[][]).reduce((acc, val) => [...acc, ...val])); const objects = await zoneRepository.getObjects(zone.id); - console.log(tiles); - console.log(objects); + let mappedObjects = this.getUnique(objects.map(x => x.objectId)); + + return { + tiles, + objects: mappedObjects + }; + } + + private getUnique(array: T[]) { + return [...new Set(array)] } // Method to handle individual zoneEditor loading public async loadZone(zone: Zone) { const loadedZone = new LoadedZone(zone) this.loadedZones.push(loadedZone) - await this.getAssetsNeeded(zone); + await this.getNeededAssets(zone); logger.info(`Zone ID ${zone.id} loaded`) } diff --git a/src/utilities/http.ts b/src/utilities/http.ts index a582203..2121dea 100644 --- a/src/utilities/http.ts +++ b/src/utilities/http.ts @@ -10,6 +10,8 @@ import objectRepository from '../repositories/objectRepository' import spriteRepository from '../repositories/spriteRepository' import fs from 'fs' import logger from './logger' +import zoneRepository from '../repositories/zoneRepository' +import zoneManager from '../managers/zoneManager' async function addHttpRoutes(app: Application) { app.get('/assets', async (req: Request, res: Response) => { @@ -49,6 +51,44 @@ async function addHttpRoutes(app: Application) { res.json(assets) }) + app.get('/assets/:zoneId', async (req: Request, res: Response) => { + const zoneId = req.params.zoneId + if(zoneId && parseInt(zoneId)) { + const zone = await zoneRepository.getById(parseInt(zoneId)) + if(zone) { + const assets = await zoneManager.getNeededAssets(zone); + const sprites = await spriteRepository.getAll() + const spritesArray: TAsset[] = []; + sprites.forEach((sprite) => { + sprite.spriteActions.forEach((spriteAction) => { + spritesArray.push({ + key: sprite.id + '-' + spriteAction.action, + url: '/assets/sprites/' + sprite.id + '/' + spriteAction.action + '.png', + group: spriteAction.isAnimated ? 'sprite_animations' : 'sprites', + frameWidth: spriteAction.frameWidth, + frameHeight: spriteAction.frameHeight + }) + }) + }) + + res.json([ + ...spritesArray, + ...assets.tiles.map(x => { return { + key: x, + url: '/assets/tiles/' + x + '.png', + group: 'tiles' + }}), + ...assets.objects.map(x => { return { + key: x, + url: '/assets/objects/' + x + '.png', + group: 'objects' + }}) + ]); + // res.json( ); + } + } + }) + app.get('/assets/:type/:spriteId?/:file', (req: Request, res: Response) => { const assetType = req.params.type const spriteId = req.params.spriteId