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.
167 lines
4.5 KiB
TypeScript
167 lines
4.5 KiB
TypeScript
import { type NodeDef, registerNode } from '../NodeRegistry';
|
|
import { Destroy } from './action/Destroy';
|
|
import { Log } from './action/Log';
|
|
import { Move } from './action/Move';
|
|
import { RestartGame } from './action/RestartGame';
|
|
import { SetEnabled } from './action/SetEnabled';
|
|
import { SetPosition } from './action/SetPosition';
|
|
import { SetProperty } from './action/SetProperty';
|
|
import { SetText } from './action/SetText';
|
|
import { Spawn } from './action/Spawn';
|
|
import { StopGame } from './action/StopGame';
|
|
import { Abs } from './data/Abs';
|
|
import { Add } from './data/Add';
|
|
import { And } from './data/And';
|
|
import { AxisInput } from './data/AxisInput';
|
|
import { BooleanLiteral } from './data/Boolean';
|
|
import { Ceil } from './data/Ceil';
|
|
import { Clamp } from './data/Clamp';
|
|
import { Compare } from './data/Compare';
|
|
import { Distance } from './data/Distance';
|
|
import { Divide } from './data/Divide';
|
|
import { Equals } from './data/Equals';
|
|
import { FindText } from './data/FindText';
|
|
import { Floor } from './data/Floor';
|
|
import { GetPosition } from './data/GetPosition';
|
|
import { GetProperty } from './data/GetProperty';
|
|
import { IsAsset } from './data/IsAsset';
|
|
import { IsEnabled } from './data/IsEnabled';
|
|
import { IsHovered } from './data/IsHovered';
|
|
import { IsTouching } from './data/IsTouching';
|
|
import { Join } from './data/Join';
|
|
import { KeyIsDown } from './data/KeyIsDown';
|
|
import { Length } from './data/Length';
|
|
import { Max } from './data/Max';
|
|
import { Min } from './data/Min';
|
|
import { Modulo } from './data/Modulo';
|
|
import { MouseButton } from './data/MouseButton';
|
|
import { MousePosition } from './data/MousePosition';
|
|
import { Multiply } from './data/Multiply';
|
|
import { NameOf } from './data/NameOf';
|
|
import { Normalize } from './data/Normalize';
|
|
import { Not } from './data/Not';
|
|
import { NumberLiteral } from './data/Number';
|
|
import { ObjectByName } from './data/ObjectByName';
|
|
import { Or } from './data/Or';
|
|
import { Owner } from './data/Owner';
|
|
import { Parent } from './data/Parent';
|
|
import { Random } from './data/Random';
|
|
import { Round } from './data/Round';
|
|
import { Self } from './data/Self';
|
|
import { Sqrt } from './data/Sqrt';
|
|
import { StringLiteral } from './data/String';
|
|
import { Substring } from './data/Substring';
|
|
import { Subtract } from './data/Subtract';
|
|
import { Time } from './data/Time';
|
|
import { ToNumber } from './data/ToNumber';
|
|
import { ToText } from './data/ToText';
|
|
import { OnClick } from './events/OnClick';
|
|
import { OnCollisionEnter } from './events/OnCollisionEnter';
|
|
import { OnCollisionExit } from './events/OnCollisionExit';
|
|
import { OnCollisionStay } from './events/OnCollisionStay';
|
|
import { OnKeyDown } from './events/OnKeyDown';
|
|
import { OnKeyHeld } from './events/OnKeyHeld';
|
|
import { OnKeyUp } from './events/OnKeyUp';
|
|
import { OnStart } from './events/OnStart';
|
|
import { OnTimer } from './events/OnTimer';
|
|
import { OnUpdate } from './events/OnUpdate';
|
|
import { BehaviorEnd } from './flow/BehaviorEnd';
|
|
import { BehaviorStart } from './flow/BehaviorStart';
|
|
import { Branch } from './flow/Branch';
|
|
import { Repeat } from './flow/Repeat';
|
|
import { RunBehavior } from './flow/RunBehavior';
|
|
import { Sequence } from './flow/Sequence';
|
|
import { GetVariable } from './variable/GetVariable';
|
|
import { SetVariable } from './variable/SetVariable';
|
|
|
|
/**
|
|
* Importing this module registers the built-in nodes. The palette sorts by category and label, so
|
|
* the order here is documentation only.
|
|
*/
|
|
export const BUILT_IN_NODES: readonly NodeDef[] = [
|
|
// events
|
|
OnStart,
|
|
OnUpdate,
|
|
OnKeyDown,
|
|
OnKeyUp,
|
|
OnKeyHeld,
|
|
OnTimer,
|
|
OnCollisionEnter,
|
|
OnCollisionStay,
|
|
OnCollisionExit,
|
|
OnClick,
|
|
BehaviorStart,
|
|
// flow
|
|
Branch,
|
|
Sequence,
|
|
Repeat,
|
|
RunBehavior,
|
|
BehaviorEnd,
|
|
// variables
|
|
GetVariable,
|
|
SetVariable,
|
|
// data: references and properties
|
|
Self,
|
|
Owner,
|
|
Parent,
|
|
ObjectByName,
|
|
NameOf,
|
|
IsAsset,
|
|
IsEnabled,
|
|
GetProperty,
|
|
GetPosition,
|
|
// data: literals and math
|
|
NumberLiteral,
|
|
BooleanLiteral,
|
|
StringLiteral,
|
|
Add,
|
|
Subtract,
|
|
Multiply,
|
|
Divide,
|
|
Min,
|
|
Max,
|
|
Abs,
|
|
Sqrt,
|
|
Clamp,
|
|
Floor,
|
|
Ceil,
|
|
Round,
|
|
Modulo,
|
|
Random,
|
|
Time,
|
|
// data: text and comparison
|
|
ToText,
|
|
ToNumber,
|
|
Join,
|
|
Substring,
|
|
FindText,
|
|
Equals,
|
|
Compare,
|
|
And,
|
|
Or,
|
|
Not,
|
|
// data: vectors and input
|
|
Length,
|
|
Distance,
|
|
Normalize,
|
|
AxisInput,
|
|
KeyIsDown,
|
|
MousePosition,
|
|
MouseButton,
|
|
IsHovered,
|
|
IsTouching,
|
|
// actions
|
|
Move,
|
|
SetPosition,
|
|
SetProperty,
|
|
SetEnabled,
|
|
SetText,
|
|
Spawn,
|
|
Destroy,
|
|
Log,
|
|
StopGame,
|
|
RestartGame,
|
|
];
|
|
|
|
for (const def of BUILT_IN_NODES) registerNode(def);
|