diff --git a/src/utilities/http.ts b/src/utilities/http.ts index 7e84422..0a4524a 100644 --- a/src/utilities/http.ts +++ b/src/utilities/http.ts @@ -9,6 +9,7 @@ import { getPublicPath } from './storage' import TileRepository from '../repositories/tileRepository' import { AssetData } from './types' import ZoneRepository from '../repositories/zoneRepository' +import SpriteRepository from '../repositories/spriteRepository' async function addHttpRoutes(app: Application) { /** @@ -117,6 +118,36 @@ async function addHttpRoutes(app: Application) { res.json(assets) }) + app.get('/assets/list_sprite_actions/:spriteId', async (req: Request, res: Response) => { + const spriteId = req.params.spriteId + // Check if spriteId is valid number + if (!spriteId || parseInt(spriteId) === 0) { + return res.status(400).json({ message: 'Invalid sprite ID' }) + } + // Get sprite by id + const sprite = await SpriteRepository.getById(spriteId) + if (!sprite) { + return res.status(404).json({ message: 'Sprite not found' }) + } + + let assets: AssetData[] = [] + sprite.spriteActions.forEach((spriteAction) => { + assets.push({ + key: sprite.id + '-' + spriteAction.action, + data: '/assets/sprites/' + sprite.id + '/' + spriteAction.action + '.png', + group: spriteAction.isAnimated ? 'sprite_animations' : 'sprites', + updatedAt: sprite.updatedAt, + isAnimated: spriteAction.isAnimated, + frameCount: JSON.parse(JSON.stringify(spriteAction.sprites)).length, + frameWidth: spriteAction.frameWidth, + frameHeight: spriteAction.frameHeight + }) + }) + + // Return the array + res.json(assets) + }) + /** * Download asset file * @param req diff --git a/src/utilities/types.ts b/src/utilities/types.ts index f189633..8fd0e7c 100644 --- a/src/utilities/types.ts +++ b/src/utilities/types.ts @@ -26,6 +26,7 @@ export type AssetData = { data: string group: 'tiles' | 'objects' | 'sprites' | 'sprite_animations' | 'sound' | 'music' | 'ui' | 'font' | 'other' updatedAt: Date + isAnimated?: boolean frameCount?: number frameWidth?: number frameHeight?: number