LogiX is the name of Neos' visual programming system, which is used for adding custom, programmable behavior to any object. When editing LogiX graphs, you create and modify LogiX nodes and make connections between them.
- The LogiX node browser as seen in Neos.
Impulses are directed, instant evaluations of Logix nodes and input values that run locally for the user who "owns" them.
The user that the impulse belong to evaluates data as it appears to them at that moment, since the impulse takes place locally. However, the impulse can run through nodes that cause a datamodel change, which will replicate to other players. Writing a value, setting the transform of a slot, or any other operation that "sets" a value or transform/hierarchy/slot change in the datamodel will be replicated. </translate>
These are data values that come from fields in Components via interfaces or as the outputs of Logix nodes. They can be generic C# system types or custom Neos types. Depending on how the value is calculated, via logix or a component, the data can appear differently for different players - This is most apparent when a field is driven, or something involving the Local User is used as an input. Types </translate>
Nodes are what creates a Logix program, they do various calculations or operations. Some nodes only run calculations based on their input values and provide the outputs readily, others are "passthrough" nodes that require an impulse to trigger or affect their operation. Often passthrough nodes perform a change in the datamodel, though this is not always the case.
Passthrough nodes can be chained together using the corresponding impulse passthrough outputs, to control the order of operations.
Passthrough nodes and other impulse-generating nodes, such as events, can have data outputs that only present valid data within their accompanying output impulse's Evaluation Context - You must process them using the same impulse that the node was triggered with or the data will be gone.
Logix is strongly typed, so nodes can only accept a single type of value for each pin. This means there needs to be multiple Logix components for each operator (for instance add for int32, and add for float), however users do not need to care about this because of overloading.
When you assign a pin in Logix with a Logix tooltip, if the pin type does not match the type of the wire you are trying to connect, a search is done to find a different component representing the same operation that has compatible pins. If one is found the node is replaced, and the wire is assigned. If one is not found a cast node may be created, or the assignment fails and the wire is not connected.
To see overloading in action, assign a float to a + node, then remove the wire and assign an int to the same node. The node should automatically convert to the float overload (which it likely spawned as), and then be converted to an int overload when that wire is connected. Do note that if you attach a float to the first pin, and then an int to the second, a cast node is created instead.