Hud
The read-out the Facer works by, as one widget tree.
local Hud = require("game.ui.Hud")
ui.updateScreen("fl_hud", Hud.tree(FL.state, {
power = Sim.beamPowerFor(FL.state.phase, FL.state.phaseT),
progress = Sim.phaseProgress(),
caption = { speaker = "The Almanac", text = "...", missing = false, serial = 3 },
banner = { phase = "firstlight", serial = 2 },
}))
Hud.tree(state, view) takes FL.state plus the four things the component
knows that the state does not: the plate's power this frame, how far through
the phase the clock is, the caption showing now, and the phase announcing
itself.
Five clusters, each on a screen edge at a proportional inset, so the middle of the frame — where the hillside and the dawn are — stays clear:
| top left | which dawn, the phase, and the clock running out of it |
| top right | the sun's track, and what the plate can do with it |
| left, centre | how far the bloom has climbed toward the shrine |
| bottom left | seed in hand |
| bottom, centre | what the Almanac is saying |
| upper third | a phase announcing itself, then gone |
The whole thing is a full-height flex column — a top row of two corners, a
banner strip, a flex = 1 middle that pushes the rest down, and a bottom band
— so nothing carries a coordinate chosen for one screen. The bottom-right
corner is left empty on purpose: the engine's touch overlay draws the Face, Sow
and Pause buttons into it.
Scoped to this part · feeds back into the world's score.