- component Name (a: mut A, b: B) { ... }: every getter, default, function and event takes the
header's states before the instance; a member's call to another passes them on; the glue is
supplied them; the template never sees them; a read-only one is read-only in every member
- ludic migrate state: a component's members' needs go into its header (added to an existing one,
mut added where now changed); a field read or a member call inside a component is the compiler's,
so nothing is written inside a name and no ', )' is left; an entry point that declares states
already gets the rest after them
- a program's module named like a package gets <Name>AppState; a program's own file its own state;
a friend module's files go by directory; a package's settable var stays state
- it writes only under the programs and directories given (and runtime/ with --runtime), and
refuses the whole run naming any other file that would have to change
- a name a package already moved into its state is rewritten through it; a read of the runtime's
var through the runtime function that answers it (gl_w: gl_width())
- a state's instance supplied by the runtime is not a uses reference
- tests: state/component, rejected/state_component_ro, rendering/ui_render3d, migrate component
and foreign cases
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
33 lines
1,002 B
Text
33 lines
1,002 B
Text
# component.ludic - 0.S: a component's members take the states its header names; the runtime
|
|
# supplies them when the template asks (Tally.ludic)
|
|
import "ludic.ui"
|
|
program StateComponent {
|
|
numbers float
|
|
state Score {
|
|
points: int = 0
|
|
bigs: int = 0
|
|
}
|
|
state Look {
|
|
prefix: string = "#"
|
|
big: int = 7
|
|
}
|
|
import "component_parts/Tally.ludic"
|
|
function all_text(n: UiNode) -> string {
|
|
var out = n.text
|
|
for i in 0 .. len(n.children) { out = out + all_text(n.children[i]) }
|
|
return out
|
|
}
|
|
function frame(ui_st: mut UiState) -> UiNode {
|
|
let root: UiNode = ui_nodes(ui_st, "Tally", null)
|
|
ui_place(ui_st, root, 0.0, 0.0, 300.0, 200.0)
|
|
return root
|
|
}
|
|
entry (ui_st: mut UiState, score: Score) {
|
|
var root = frame(ui_st)
|
|
ui_press(ui_st, root.children[0].children[1])
|
|
root = frame(ui_st)
|
|
ui_press(ui_st, root.children[0].children[1])
|
|
root = frame(ui_st)
|
|
print(`{all_text(root.children[0].children[0])} {score.points} {score.bigs}`)
|
|
}
|
|
}
|