diff --git a/packages/website-ue/src/core/tankopedia/characteristics.ts b/packages/website-ue/src/core/tankopedia/characteristics.ts index 20f1a987b..de7726e89 100644 --- a/packages/website-ue/src/core/tankopedia/characteristics.ts +++ b/packages/website-ue/src/core/tankopedia/characteristics.ts @@ -1,12 +1,11 @@ import { TankClass } from "@blitzkit/core"; -import type { CompensationComponent } from "@protos/blitz_static_compensation_component"; -import { type TankCatalogComponent } from "@protos/blitz_static_tank_component"; import { ShellUpgrageSingleChange_AttributeName, StageParameters, TankAttributeChange_AttributeName, } from "@protos/blitz_static_tank_upgrade_single_stage"; import { radToDeg } from "three/src/math/MathUtils.js"; +import type { Tank } from "../../protos/tank"; import { applyPitchYawLimits } from "./applyPitchYawLimits"; import { TerrainHardness, type TankState } from "./tankState"; @@ -19,9 +18,8 @@ type Characteristic = (helpers: { shell: (name: ShellUpgrageSingleChange_AttributeName) => number; shellSafe: (name: ShellUpgrageSingleChange_AttributeName) => number | null; state: TankState; - tank: TankCatalogComponent; + tank: Tank; parameters: StageParameters; - compensation: CompensationComponent; id: string; }) => CharacteristicOutput; @@ -349,7 +347,7 @@ export const characteristics = { }, class({ tank }) { - return tank.tank_class; + return tank.tank!.tank_class; }, camouflage({ attribute, characteristic, attributeSafe, state }) { @@ -396,26 +394,30 @@ export const characteristics = { }, nation({ tank }) { - return tank.nation; + return tank.tank!.nation; }, name({ tank }) { - return tank.name!.value; + return tank.tank!.name!.value; }, tier({ tank }) { - return tank.tier_catalog_id; + return tank.tank!.tier_catalog_id; }, type({ tank }) { - return tank.tank_type; + return tank.tank!.tank_type; }, id({ id }) { return id; }, - compensation({ compensation }) { - return compensation.compensation?.currency_reward?.amount ?? null; + slug({ tank }) { + return tank.slug; + }, + + compensation({ tank }) { + return tank.compensation!.compensation?.currency_reward?.amount ?? null; }, } satisfies Record; diff --git a/packages/website-ue/src/core/tankopedia/characteristicsOrder.ts b/packages/website-ue/src/core/tankopedia/characteristicsOrder.ts index f9e134571..00ae51842 100644 --- a/packages/website-ue/src/core/tankopedia/characteristicsOrder.ts +++ b/packages/website-ue/src/core/tankopedia/characteristicsOrder.ts @@ -57,6 +57,7 @@ export const characteristicsOrder: CharacteristicsOrder = [ }, { name: "compensation" }, { name: "id" }, + { name: "slug" }, ], }, { diff --git a/packages/website-ue/src/core/tankopedia/computeCharacteristics.ts b/packages/website-ue/src/core/tankopedia/computeCharacteristics.ts index 5c7ae136c..099f534e8 100644 --- a/packages/website-ue/src/core/tankopedia/computeCharacteristics.ts +++ b/packages/website-ue/src/core/tankopedia/computeCharacteristics.ts @@ -1,9 +1,8 @@ -import type { CompensationComponent } from "@protos/blitz_static_compensation_component"; -import type { TankCatalogComponent } from "@protos/blitz_static_tank_component"; import { ShellUpgrageSingleChange_AttributeName, TankAttributeChange_AttributeName, } from "@protos/blitz_static_tank_upgrade_single_stage"; +import type { Tank } from "../../protos/tank"; import { aggregateStageParameters } from "./aggregateStageParameters"; import { characteristics, @@ -19,13 +18,12 @@ export type ComputedCharacteristics = Record< export function computeCharacteristics( id: string, - tank: TankCatalogComponent, - compensation: CompensationComponent, + tank: Tank, state: TankState ) { const parameters = aggregateStageParameters( - tank.base_stats!, - tank.upgrade_stages.slice(0, state.stage) + tank.tank!.base_stats!, + tank.tank!.upgrade_stages.slice(0, state.stage) ); const computed: Partial = {}; @@ -97,7 +95,6 @@ export function computeCharacteristics( tank, parameters, id, - compensation, }); computed[name] = value; } diff --git a/packages/website-ue/src/pages/api/tanks/[id].json.ts b/packages/website-ue/src/pages/api/tanks/[id].json.ts new file mode 100644 index 000000000..fc8843c73 --- /dev/null +++ b/packages/website-ue/src/pages/api/tanks/[id].json.ts @@ -0,0 +1,12 @@ +import type { APIContext } from "astro"; +import { api } from "../../../core/api/dynamic"; + +export { getStaticPaths } from "./[id].pb"; + +/** + * Even Noah can't save these animals. + */ +export async function GET({ params }: APIContext) { + const tank = await api.tank(params.id); + return Response.json(tank); +} diff --git a/packages/website-ue/src/pages/api/tanks/[id].pb.ts b/packages/website-ue/src/pages/api/tanks/[id].pb.ts index 9c001dfbc..2acba26cf 100644 --- a/packages/website-ue/src/pages/api/tanks/[id].pb.ts +++ b/packages/website-ue/src/pages/api/tanks/[id].pb.ts @@ -4,7 +4,6 @@ import { Tank } from "../../../protos/tank"; export const getStaticPaths = (async () => { const { list } = await api.tankList(); - return list.map(({ id }) => ({ params: { id } })); }) satisfies GetStaticPaths; diff --git a/packages/website-ue/src/pages/tanks/[slug]/_index.tsx b/packages/website-ue/src/pages/tanks/[slug]/_index.tsx index fa9804d20..668e98959 100644 --- a/packages/website-ue/src/pages/tanks/[slug]/_index.tsx +++ b/packages/website-ue/src/pages/tanks/[slug]/_index.tsx @@ -27,8 +27,7 @@ function Content({ id }: { id: string }) { const protagonist = Tankopedia.use((state) => state.protagonist); const compare = Tankopedia.use((state) => state.compare); const characteristics = useMemo( - () => - computeCharacteristics(id, tank.tank!, tank.compensation!, protagonist), + () => computeCharacteristics(id, tank, protagonist), [protagonist] ); // const otherCharacteristics = useMemo( @@ -53,6 +52,12 @@ function Content({ id }: { id: string }) { <>

{id}

+
+ {tank.tank?.feature_screens?.tags.map((tag) => ( + {tag.value} + ))} +
+