diff --git a/packages/game/JSExport/GameInterface.cs b/packages/game/JSExport/GameInterface.cs index bff285fb0..f61f77ba7 100644 --- a/packages/game/JSExport/GameInterface.cs +++ b/packages/game/JSExport/GameInterface.cs @@ -100,4 +100,18 @@ public partial class GameInterface var icon = pda.Get("Icon"); return provider.Image(icon); } + + + private readonly string[] tankPartEntries = ["DT_Chassis", "DT_Hulls", "DT_Turrets", "DT_Guns"]; + public byte[] TankPart(string tag, string part) + { + var pda = provider.Discovered(tag); + + foreach (var entry in tankPartEntries) { + pda.Get(entry); + // var icon = pda.Get("Icon"); + } + + return []; + } } diff --git a/packages/website-ue/src/pages/[media]/tanks/big/[id].webp.ts b/packages/website-ue/src/pages/[media]/tanks/big/[id].webp.ts index 556d72528..499500f26 100644 --- a/packages/website-ue/src/pages/[media]/tanks/big/[id].webp.ts +++ b/packages/website-ue/src/pages/[media]/tanks/big/[id].webp.ts @@ -5,10 +5,12 @@ import { mixStaticPaths } from "../../../../astro/mixStaticPaths"; import { assertDiscoveryTag } from "../../../../game/assertDiscoveryTag"; import { game } from "../../../../game/game"; import { clientUnmounted } from "../../../../game/unmounted"; -import { getStaticPaths as _getStaticPaths } from "../../../[api]/tanks/[id].json"; -import { getStaticPaths as __getStaticPaths } from "../../_index"; +import { getStaticPaths as _getStaticPaths } from "../../_index"; -export const getStaticPaths = mixStaticPaths(__getStaticPaths, _getStaticPaths); +export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => { + const { list } = await api.tankList(); + return list.map(({ id }) => ({ params: { id } })); +}); export async function GET({ params }: APIContext) { if (clientUnmounted) return clientUnmountedResponse; diff --git a/packages/website-ue/src/pages/[models]/_index.ts b/packages/website-ue/src/pages/[models]/_index.ts new file mode 100644 index 000000000..3e55a4cb5 --- /dev/null +++ b/packages/website-ue/src/pages/[models]/_index.ts @@ -0,0 +1,8 @@ +import type { GetStaticPaths } from "astro"; +import { isChunkEnabled } from "../../astro/isChunkEnabled"; + +// TODO: maybe consider abstracting this away? +export const getStaticPaths = (() => { + if (!isChunkEnabled("models")) return []; + return [{ params: { models: "models" } }]; +}) satisfies GetStaticPaths; diff --git a/packages/website-ue/src/pages/[models]/tanks/[id].glb.ts b/packages/website-ue/src/pages/[models]/tanks/[id].glb.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/website-ue/src/pages/[models]/tanks/[id]/[part].glb.ts b/packages/website-ue/src/pages/[models]/tanks/[id]/[part].glb.ts new file mode 100644 index 000000000..906027348 --- /dev/null +++ b/packages/website-ue/src/pages/[models]/tanks/[id]/[part].glb.ts @@ -0,0 +1,41 @@ +import type { APIContext, GetStaticPathsItem } from "astro"; +import { api } from "../../../../api/dynamic"; +import { mixStaticPaths } from "../../../../astro/mixStaticPaths"; +import { getStaticPaths as _getStaticPaths } from "../../_index"; +import { assertDiscoveryTag } from "../../../../game/assertDiscoveryTag"; +import { game } from "../../../../game/game"; + +export const getStaticPaths = mixStaticPaths(_getStaticPaths, async () => { + const tanks = await api.tanks(); + const paths: GetStaticPathsItem[] = []; + + for (const id in tanks.tanks) { + const tank = tanks.tanks[id]; + const parts = new Set(["chassis", "hull"]); + + for (const line of tank.tank!.upgrade_lines) { + for (const stage of line.stages) { + for (const change of stage.visual_changes) { + parts.add(change.name); + } + } + } + + for (const part of parts) { + paths.push({ params: { id, part } }); + } + } + + return paths; +}); + +export async function GET({ + params, +}: APIContext) { + const item = api.metadata.item(params.id); + const assetDiscovery = item.BlitzStaticAssetsDiscovery(); + const tag = assertDiscoveryTag(assetDiscovery); + const part = game!.tankPart(tag, params.part); + + return Response.json(parts.length); +}