//#region src/core/sprite-animation.d.ts interface AnimationDef { /** * Two numbers = inclusive [start, end] frame RANGE. * Any other length = explicit frame list. */ frames: number[]; fps: number; loop?: boolean; } /** * A clip, or the NAME of another clip in the same map. * * The alias exists because the character a game is built from and the character * a controller describes are not the same vocabulary. * `CharacterController2D`/`3D` emit `idle`/`run`/`jump`/`fall`/`wallSlide`/ * `dash`; the sheets in the engine's own catalog carry `idle`/`move`/`attack`, * and no sheet anywhere ships a `fall`. So the documented one-line wiring — * `movementStateChanged → play` — asked for clips that do not exist, and the * hard error was correct and useless: there is nothing to rename it TO. * * An alias is the missing half. `"fall": "idle"` says what to show while * falling, in the scene, next to everything else about that character. */ type AnimationEntry = AnimationDef | string; /** * Follow aliases to the clip that actually plays. * * Chains are allowed (`fall → jump → idle`) because they are how a fallback * ladder reads, and a cycle is a hard error rather than a hang. */ declare function resolveAnimation(animations: Record, name: string, owner: string): { name: string; def: AnimationDef; }; /** * `[start, end]` is a RANGE; anything else is an explicit list. * * Two ascending numbers are overwhelmingly a range in every sheet format, and * a two-frame flip-book is spelled `[3, 3, 4, 4]` or a descending pair. */ declare function resolveFrames(frames: number[], name: string): number[]; //#endregion export { resolveFrames as i, AnimationEntry as n, resolveAnimation as r, AnimationDef as t };