ludic/anim-on_frame.html
2026-09-17 22:10:03 +00:00

39 lines
No EOL
2.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Anim.on_frame — Ludic</title>
<meta name="description" content="Arm a frame event — the engine flags the tick a clip lands on this frame.">
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="docs.css">
</head>
<body>
<header class="nav"><div class="wrap nav-in"><a class="brand" href="index.html"><span class="logo">L</span> Ludic</a><button class="nav-toggle" aria-label="Toggle menu" aria-expanded="false">☰</button><nav class="nav-links"><a href="index.html">Home</a><a href="api.html">API Reference</a><a class="nav-cta" href="https://git.workshopsoft.io/workshopsoft/ludic">Source ↗</a></nav></div></header>
<main class="wrap item">
<div class="crumbs"><a href="api.html">API Reference</a> <span>›</span> <a href="ns-anim.html">Anim</a> <span>›</span> <span class="here">Anim.on_frame</span></div>
<div class="item-head">
<span class="kind-badge kind-method">method</span>
<h1 id="top">Anim.on_frame</h1>
</div>
<code class="sig">Anim.on_frame(entity, frame)</code>
<div class="desc"><p>Arms a <strong>frame event</strong> on an entity's <code>SpriteAnim</code>: the engine sets the component's <code>event_fired</code> flag on the tick the clip <em>first lands</em> on <code>frame</code> — a footstep on the contact cell, a hitbox going live mid-swing. Gameplay reads the flag with <a href="anim-fired"><code>Anim.fired</code></a> in its own handler and reacts (emit its own event, spawn, play a sound). The engine detects the boundary; the game owns the reaction, so it stays inside the deterministic, no-runtime-dispatch event model. Requires the component to carry <code>event_frame</code> and <code>event_fired</code> fields.</p></div>
<div class="params"><h2>Parameters</h2><div class="param" id="param-entity"><code class="pname">entity</code><span class="pdesc">the entity carrying <code>SpriteAnim</code></span></div><div class="param" id="param-frame"><code class="pname">frame</code><span class="pdesc">the cell index that should fire the event</span></div></div>
<div class="examples"><h2>Example</h2><pre data-lang="ludic">program Demo {
property SpriteAnim { ticks: int = 0, fps: int = 0, frames: int = 0, mode: int = 0, frame: int = 0, event_frame: int = 0, event_fired: int = 0 }
model Hero { SpriteAnim }
entry {
spawn Hero { SpriteAnim { fps: 12, frames: 6, mode: 0 } }
let e = World.query_next(World.prop_id("SpriteAnim"), 0)
Anim.on_frame(e, 3) # fire when the run clip hits its contact frame
tick_fixed()
if Anim.fired(e) { print(1) }
quit()
}
}</pre></div>
<a class="back" href="api.html">← All symbols</a>
</main>
<script src="ludic-highlight.js"></script>
<script>Ludic.highlightAll(); Ludic.installCards(); Ludic.flashTarget();</script>
</body></html>