diff --git a/prisma/migrations/20240725013549_init/migration.sql b/prisma/migrations/20240725175802_init/migration.sql similarity index 100% rename from prisma/migrations/20240725013549_init/migration.sql rename to prisma/migrations/20240725175802_init/migration.sql diff --git a/prisma/schema/sprite.prisma b/prisma/schema/sprite.prisma index d6d8e6a..30ca0c9 100644 --- a/prisma/schema/sprite.prisma +++ b/prisma/schema/sprite.prisma @@ -8,15 +8,15 @@ model Sprite { } model SpriteAction { - id String @id @default(uuid()) - spriteId String - sprite Sprite @relation(fields: [spriteId], references: [id], onDelete: Cascade) - action String - origin_x Decimal @default(0) - origin_y Decimal @default(0) - isAnimated Boolean @default(false) - isLooping Boolean @default(false) - frameWidth Int @default(0) - frameHeight Int @default(0) - frameSpeed Int @default(0) + id String @id @default(uuid()) + spriteId String + sprite Sprite @relation(fields: [spriteId], references: [id], onDelete: Cascade) + action String + origin_x Decimal @default(0) + origin_y Decimal @default(0) + isAnimated Boolean @default(false) + isLooping Boolean @default(false) + frameWidth Int @default(0) + frameHeight Int @default(0) + frameSpeed Int @default(0) } diff --git a/src/events/gm/sprite/ListSpriteActionImages.ts b/src/events/gm/sprite/ListSpriteActionImages.ts new file mode 100644 index 0000000..15b5e56 --- /dev/null +++ b/src/events/gm/sprite/ListSpriteActionImages.ts @@ -0,0 +1,45 @@ +import { Server } from 'socket.io' +import { TSocket } from '../../../utilities/Types' +import path from 'path' +import fs from 'fs/promises' +import spriteRepository from '../../../repositories/SpriteRepository' + +type Payload = { + id: string +} + +type Response = string[] + +/** + * Handle game master sprite update event + * @param socket + * @param io + */ +export default function (socket: TSocket, io: Server) { + socket.on('gm:sprite:action:images', async (data: Payload, callback: (response: Response) => void) => { + if (socket.character?.role !== 'gm') { + return + } + + try { + const sprite = await spriteRepository.getById(data.id) + if (!sprite) { + console.log(`---Sprite not found.`) + return []; + } + + const public_folder = path.join(process.cwd(), 'public', 'sprites') + const sprite_folder = path.join(public_folder, sprite.id) + + const spriteActions = await fs.readdir(sprite_folder) + const urls = spriteActions.map((action) => { + return path.join(sprite_folder, action) + }) + + callback(urls) + } catch (error) { + console.error(error) + callback([]) + } + }) +} diff --git a/src/events/gm/sprite/Update.ts b/src/events/gm/sprite/Update.ts index f0289be..f81b16f 100644 --- a/src/events/gm/sprite/Update.ts +++ b/src/events/gm/sprite/Update.ts @@ -2,8 +2,6 @@ import { Server } from 'socket.io' import { TSocket } from '../../../utilities/Types' import prisma from '../../../utilities/Prisma' import type { SpriteAction } from '@prisma/client' -import path from 'path' -import fs from 'fs' type uploadSpriteAction = SpriteAction & { base64?: string diff --git a/src/events/gm/sprite/Upload.ts b/src/events/gm/sprite/Upload.ts deleted file mode 100644 index e435dc0..0000000 --- a/src/events/gm/sprite/Upload.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Server } from 'socket.io' -import { TSocket } from '../../../utilities/Types' -import { writeFile } from 'node:fs/promises' -import path from 'path' -import fs from 'fs/promises' -import prisma from '../../../utilities/Prisma' - -interface ISpriteData { - [key: string]: Buffer -} - -/** - * Handle game master upload sprite event - * @param socket - * @param io - */ -export default function (socket: TSocket, io: Server) { - socket.on('gm:sprite:upload', async (data: ISpriteData, callback: (response: boolean) => void) => { - try { - if (socket.character?.role !== 'gm') { - callback(false) - return - } - - const public_folder = path.join(process.cwd(), 'public', 'sprites') - - // Ensure the folder exists - await fs.mkdir(public_folder, { recursive: true }) - - const uploadPromises = Object.entries(data).map(async ([key, spriteData]) => { - const sprite = await prisma.sprite.create({ - data: { - name: 'New sprite' - } - }) - const uuid = sprite.id - const filename = `${uuid}.png` - const finalFilePath = path.join(public_folder, filename) - await writeFile(finalFilePath, spriteData) - }) - - await Promise.all(uploadPromises) - - callback(true) - } catch (error) { - console.error('Error uploading sprite:', error) - callback(false) - } - }) -}