Files
feuerwerk/src/core/graph/nodes/events/OnStateEntered.ts
T
adminandClaude Opus 5 7babf88636
game-maker / suite (push) Successful in 10m58s
A state change is something the graph can react to, so the machine announces it (#53, #54, #55, #57)
Four issues that all reach for the same line: how the current state is
read and written. Splitting them into four commits would mean four
states of the tree that do not compile, so they arrive together.

#55 start state — the machine asset carries an optional `start` holding
a State node's id. Right-click a state to set or remove it, a ring in
the node's title says which one it is. A dead id (the state was deleted)
reads as "no start", so nothing has to clean up after a deletion.

#53 entered/exited — `On state entered` and `On state exited`, one exec
output per state. Every change now goes through a single `setState`
that reports it; BehaviorSystem delivers it after the exec flow that
caused it, `exited` of the old before `entered` of the new, round after
round until the queue is empty, with a cap that stops a ping-pong graph
with an endless-loop error. A local machine tells the instance that
switched, a global one tells every instance holding a matching event
node. The start state fires `entered` too: per instance for a local
machine, once per run for a global one.

#57 reading — `Current state` with `name` for showing and `id` for
comparing, `Is in state` with one boolean per state. Neither has a
`run`, so `read` learned `def` and `lookup`, and the catalog test knows
this third kind of node.

#54 seeing it — during a run the state machine tab marks every state
some instance is holding faintly, and the one held by the selected
scene object's instance strongly.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 06:18:20 +02:00

21 lines
872 B
TypeScript
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.
import type { NodeDef } from '../../NodeRegistry';
import { machineOf, machinePort, statePorts } from '../../stateMachine';
/**
* One exec output per state, like `State branch` – the pulse leaves through the state that was
* entered. Fired after the flow that caused the move, never inside it. A `global` machine is
* entered once for the whole run, and every instance watching it hears that one move.
*/
export const OnStateEntered: NodeDef = {
type: 'OnStateEntered',
label: 'On state entered',
category: 'event',
description:
"Runs when the machine enters a state, along that state's output. The start state counts as " +
'entered when the instance begins; entering the state the machine is already in does not.',
inputs: [machinePort()],
outputs: [],
params: [],
derivePorts: (source) => ({ outputs: statePorts(machineOf(source)) }),
};