# llimphi-anim *Read this in English: [README.md](README.md).* Máquina de estados de animación, estilo Rive, **clip-agnóstica**. Es el escalón sobre el playback lineal: en vez de "reproduce esta animación", modela "según estos *inputs*, en qué estado estoy y a cuál transiciono, con qué *blend*". Es lo que vuelve una animación *interactiva* (hover, progreso, triggers) en lugar de un loop fijo. ## Por qué clip-agnóstico El núcleo **no sabe de Lottie ni de vello**. Un clip es un `ClipId` (u32) con una duración conocida; la máquina secuencia y mezcla clips por id y tiempo, y emite un `RenderFrame` que dice *qué* renderizar (clip primario + un clip entrante con su mezcla 0..1 durante una transición). El consumidor mapea `ClipId → asset` y pinta. Hoy ese consumidor es `llimphi-lottie`; mañana puede ser un rig de huesos nativo o un tween de `llimphi-motion` — el mismo motor de estados sirve a todos. ## Modelo (espejo del de Rive) - **Inputs**: `bool`, `number`, `trigger` (los triggers se consumen en cada `advance`). - **Estado**: un clip con velocidad y loop, más sus transiciones salientes. - **Transición**: destino + condiciones (AND) sobre inputs + duración de blend. Las transiciones *any-state* se evalúan sin importar el estado actual (típico para "fire trigger → ir a X desde donde sea"). - **Condición**: `bool == v`, `number v`, `trigger disparado`, o `clip terminó` (para "cuando la animación acaba, pasa a la siguiente"). ## Bucle El consumidor empuja inputs (`Instance::set_bool` etc.), llama `Instance::advance` con el `dt` del frame, y pinta `Instance::render_frame`. Encaja directo en el bucle Elm de Llimphi vía `Handle::spawn_periodic`. --- Parte de **llimphi** — ver [llimphi](../LEEME.md).