game-maker / suite (push) Successful in 10m58s
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>
21 lines
872 B
TypeScript
21 lines
872 B
TypeScript
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)) }),
|
||
};
|