/** * What a project DECLARES about its art style: `artStyle` at the top level of `src/work/game.json`, * `voxel` or `low-poly`, absent meaning `voxel` — every game made before the field existed. * * One reader, the `platform-declaration.ts` shape, because six commands act on the same field * and must never disagree about it: `cover` and `reference make` choose their prompt lead by it, * `assets add` and `generate model|prop|character` choose whether a mesh is kept or voxelized, * and `judge` uses it as the art direction when GAME-DESIGN.md has no heading for one. * * Best effort throughout: a missing or unreadable file means "declares nothing" (voxel), never * an error. A value that is present but not one of the two lands in `rejected` so the caller can * say so once — a typo'd `"lowpoly"` silently voxelizing a Blender level is the failure this * exists to make visible. */ import { type ArtStyle } from '@bitmagic/asset-core/art-style'; export type { ArtStyle } from '@bitmagic/asset-core/art-style'; export interface ArtStyleDeclaration { /** `undefined` means the project declares nothing — which every consumer treats as `voxel`. */ artStyle?: ArtStyle; /** Present but not an accepted value, verbatim, for the caller's message. */ rejected?: unknown; /** Whether game.json could be read at all. */ workCopyReadable: boolean; } /** The exact declaration, for callers that must tell "says nothing" from "says voxel". */ export declare function readArtStyleDeclaration(root: string): ArtStyleDeclaration; /** * The style every command acts on. A rejected value is reported through `log` (once per call — * commands call this once) and treated as voxel, the same as absent: refusing the command would * turn a typo in a field most creators never touch into a blocked cover. */ export declare function resolveArtStyle(root: string, log?: (line: string) => void): ArtStyle; /** One line for a command's output, so a transcript shows which style drove it. */ export declare function describeArtStyleSource(root: string): string;