Let a behavior be a node in another graph
A behavior that has a Start and an End node can now be dropped into any other graph as a node of its own. What is declared on the start node becomes the inputs of that node, what hangs on the end node its outputs; the port list is derived from the sub graph, not copied, so declaring a port in one graph grows the node in the other without touching it. The node carries the behavior's name and the palette lists behaviors by name, so a call is one grab instead of a node plus a dropdown. An embedded behavior has no object and therefore no place for variables: every call starts on the asset defaults and communicates only through its ports. That is the conservative direction - state can still be added later, and shared state already has a home in a behavior object in the scene. Node ids are unique per graph only, so each call gets its own pulse cache; without that, two graphs would collide. Renaming a port used to silently drop the value typed on the calling node. It is carried along now, project wide, like the edges.
This commit is contained in:
1 parent
64e034ffb9
commit
6702ff8abe
31 files changed
+1402
-107
No files matched your search
@@ -24,6 +24,12 @@ export interface RepeatResult {
|
||||
times: number;
|
||||
}
|
||||
|
||||
/** How a node asks for another behavior's graph to be run in place, `inputs` seeding its start node. */
|
||||
export interface CallResult {
|
||||
behaviorId: string;
|
||||
inputs: Record<string, Value>;
|
||||
}
|
||||
|
||||
export interface RunResult {
|
||||
/** Cached for the rest of the pulse. */
|
||||
outputs?: Record<string, Value>;
|
||||
@@ -31,6 +37,8 @@ export interface RunResult {
|
||||
next?: string | string[];
|
||||
/** Runs `port` that many times before continuing along `next`. */
|
||||
repeat?: RepeatResult;
|
||||
/** Runs another behavior before continuing along `next`; its results join `outputs`. */
|
||||
call?: CallResult;
|
||||
}
|
||||
|
||||
/** Palette, port rendering, connection validation and inspector fields are all derived from this. */
|
||||
|
||||
Reference in new issue
Block a user