From 36dbb2457235c526edbb793e0c69e4167ca1fa9a Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Tue, 4 Aug 2026 19:42:06 -0500 Subject: [PATCH] skill icons --- .../scripts/src/buildAssets/skillIcons.ts | 25 ------------- .../[...chunk_api]/icons/skills/[id].webp.ts | 37 +++++++++++++++++++ 2 files changed, 37 insertions(+), 25 deletions(-) delete mode 100644 packages/scripts/src/buildAssets/skillIcons.ts create mode 100644 packages/website/src/pages/[...chunk_api]/icons/skills/[id].webp.ts diff --git a/packages/scripts/src/buildAssets/skillIcons.ts b/packages/scripts/src/buildAssets/skillIcons.ts deleted file mode 100644 index 02c27a2a3..000000000 --- a/packages/scripts/src/buildAssets/skillIcons.ts +++ /dev/null @@ -1,25 +0,0 @@ -import sharp from "sharp"; -import { AssetUploader } from "../core/github/assetUploader"; -import { vfs } from "./constants"; - -export async function skillIcons() { - console.log("Building skill icons..."); - - const avatar = await vfs.xml<{ root: TankmenAvatar }>( - `Data/XML/item_defs/tankmen/avatar.xml`, - ); - const uploader = new AssetUploader("skill icons"); - - for (const key in avatar.root.skills) { - const skill = avatar.root.skills[key]; - const icon = Array.isArray(skill.icon) ? skill.icon[0] : skill.icon; - const name = icon.name.split("/").at(-1)!.replace(/_\d$/, ""); - const path = `Data${icon.name.replace("~res:", "")}.packed.webp`; - const image = sharp(await vfs.file(path)).trim(); - const content = await image.toBuffer(); - - await uploader.add({ content, path: `icons/skills/${name}.webp` }); - } - - await uploader.flush(); -} diff --git a/packages/website/src/pages/[...chunk_api]/icons/skills/[id].webp.ts b/packages/website/src/pages/[...chunk_api]/icons/skills/[id].webp.ts new file mode 100644 index 000000000..37fbd1e87 --- /dev/null +++ b/packages/website/src/pages/[...chunk_api]/icons/skills/[id].webp.ts @@ -0,0 +1,37 @@ +import type { TankmenAvatar } from "@blitzkit/core"; +import type { APIContext, GetStaticPathsItem } from "astro"; +import sharp from "sharp"; +import { mixStaticPaths } from "../../../../core/blitzkit/mixStaticPaths"; +import { vfs } from "../../../../core/blitzkit/vfs"; +import { getStaticPaths as _getStaticPaths } from "../../_index"; + +export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => { + const paths: GetStaticPathsItem[] = []; + + const avatar = await vfs.xml<{ root: TankmenAvatar }>( + `Data/XML/item_defs/tankmen/avatar.xml`, + ); + + for (const key in avatar.root.skills) { + const skill = avatar.root.skills[key]; + const icon = Array.isArray(skill.icon) ? skill.icon[0] : skill.icon; + const id = icon.name.split("/").at(-1)!.replace(/_\d$/, ""); + const path = `Data${icon.name.replace("~res:", "")}.packed.webp`; + + paths.push({ + params: { id }, + props: { path }, + }); + } + + return paths; +}); + +export async function GET({ props }: APIContext<{ path: string }>) { + const buffer = await sharp(await vfs.file(props.path)) + .trim() + .toBuffer(); + const bytes = new Uint8Array(buffer); + + return new Response(bytes); +}