ludic/kw-become.html
2026-09-17 22:10:03 +00:00

46 lines
No EOL
2.6 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>become — Ludic</title>
<meta name="description" content="Transition to another state of the enclosing machine, or to another scene.">
<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="api.html#control">Control flow</a> <span>›</span> <span class="here">become</span></div>
<div class="item-head">
<span class="kind-badge kind-keyword">keyword</span>
<h1 id="top">become</h1>
</div>
<code class="sig">become Name</code>
<div class="desc"><p>A <code>become</code> statement performs a transition. Inside a <code>machine</code>, <code>become Name</code> moves to another <code>state</code> of that machine by storing the target state's value back into the machine's store, so the next dispatch runs the new state. Used from a scene's layer handler, <code>become Scene</code> instead switches the active scene: the current scene's <code>on exit</code> runs, the active-scene register is set, and the target scene's <code>on enter</code> runs — two direct calls and a store, with no dispatch table. <code>become</code> names its target and knows from context which kind of transition it is, so you rarely think about the machinery. Transitioning is cheap and takes effect immediately for machine states.</p></div>
<div class="examples"><h2>Example</h2><pre data-lang="ludic">program EncounterFlow {
enum Stage { Explore, Battle, Victory }
var stage: int = Stage.Explore
var enemies_left: int = 2
handler RunStage phase Update {
machine stage {
state Explore {
if Input.key() == ' ' { become Battle }
}
state Battle {
if enemies_left &lt;= 0 { become Victory }
}
state Victory {
Screen.status("you win")
}
}
}
}</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>