diff --git a/packages/core/src/blitzkit/api/server/2_camouflageDefinitions.ts b/packages/core/src/blitzkit/api/server/2_camouflageDefinitions.ts index 4462f1010..88386017f 100644 --- a/packages/core/src/blitzkit/api/server/2_camouflageDefinitions.ts +++ b/packages/core/src/blitzkit/api/server/2_camouflageDefinitions.ts @@ -1,5 +1,6 @@ import { CamouflageDefinitions, + camouflagePreset, Sc2ReadStream, type TankParameters, } from "@blitzkit/core"; @@ -88,10 +89,7 @@ export abstract class ServerBlitzKitAPI2 extends ServerBlitzKitAPI1 { ); const [nation, tankKey] = vehicle.split(":"); - // some unique camos only set the preset for their one tank - const preset = - yamlEntry.preset ?? - yamlEntry.override?.[nation]?.override?.[tankKey]?.preset; + const preset = camouflagePreset(yamlEntry, nation, tankKey); let hasPreset = false; if (preset !== undefined) { diff --git a/packages/core/src/types/camouflagesYaml.ts b/packages/core/src/types/camouflagesYaml.ts index 35d1531ca..5462c945a 100644 --- a/packages/core/src/types/camouflagesYaml.ts +++ b/packages/core/src/types/camouflagesYaml.ts @@ -12,3 +12,15 @@ export type CamouflagesYaml = Record< >; } >; + +// some unique camos only set the preset for their one tank +export function camouflagePreset( + camouflage: CamouflagesYaml[string], + nation: string, + tankKey: string, +) { + return ( + camouflage.preset ?? + camouflage.override?.[nation]?.override?.[tankKey]?.preset + ); +} diff --git a/packages/website/src/pages/[...chunk_models_legendary]/[id]/skins/[skin].glb.ts b/packages/website/src/pages/[...chunk_models_legendary]/[id]/skins/[skin].glb.ts index 00ce9a45d..fc7ea0978 100644 --- a/packages/website/src/pages/[...chunk_models_legendary]/[id]/skins/[skin].glb.ts +++ b/packages/website/src/pages/[...chunk_models_legendary]/[id]/skins/[skin].glb.ts @@ -1,4 +1,5 @@ import { + camouflagePreset, parseHierarchies, Sc2ReadStream, type CamouflagesXml, @@ -73,9 +74,7 @@ export async function GET({ props }: APIContext<{ skin: number }>) { include as { vehicle: { name: string } } ).vehicle.name.split(":"); const { customEntities } = camouflagesYaml[key]; - const preset = - camouflagesYaml[key].preset ?? - camouflagesYaml[key].override?.[nation]?.override?.[tankKey]?.preset; + const preset = camouflagePreset(camouflagesYaml[key], nation, tankKey); const parameters = await vfs.yaml( `Data/3d/Tanks/Parameters/${nation}/${tankKey}.yaml`, ); diff --git a/packages/website/src/pages/[...chunk_models_tanks]/[id]/model.glb.ts b/packages/website/src/pages/[...chunk_models_tanks]/[id]/model.glb.ts index 859f988d6..dbd96721e 100644 --- a/packages/website/src/pages/[...chunk_models_tanks]/[id]/model.glb.ts +++ b/packages/website/src/pages/[...chunk_models_tanks]/[id]/model.glb.ts @@ -209,7 +209,10 @@ export async function extractModel( case "StateSwitcherComponent": node.setExtras({ - state: component[`ssc.state${component["ssc.activeState"]}`], + // a part's scenarios can pick its state as it loads + state: + component[`ssc.state${component["ssc.activeState"]}`] ?? + (isPart ? null : undefined), }); break;