Node
The base object that can be added to a world and saved in a scene.
Construct
Construct a node from a given class name. (e.g. "Node3D", "Primitive3D", "Text", "Image")
Alias: New
Sig: node = Node.Construct(className="Node")
- Arg: string className The class of the node to create. Default = "Node".
- Ret: Node node The newly constructed node.
Destruct
Destruct a node and make it unusable.
Sig: Node.Destruct(node)
- Arg: Node node The node to be destroyed.
DestroyDeferred
Destroy this node at the end of the frame. Usually a safer and more stable option than immediately destroying a node with Destruct.
Alias: Doom
Alias: SetPendingDestroy
Sig: Node:DestroyDeferred()
IsValid
Check whether a node is valid. This function currently always returns true, but when the engine is compiled using LUA_SAFE_NODE, this function will return true only if the underlying node reference is valid.
Sig: valid = Node:IsValid()
- Ret: boolean valid Whether the node is valid.
GetName
Get this node's name. A node's name must be unique among all of its siblings.
Sig: name = Node:GetName()
- Ret: string name The node's name
SetName
Set this node's name. A node's name must be unique among all of its siblings. If a sibling node already has the same name, then SetName() will append a unique identifier so that it can be differentiated.
Sig: Node:SetName(name)
- Arg: string name The node's new name
SetActive
Control whether the node is active. Active nodes will tick and recursively tick their children. If a parent node is not active, but the child node is active, the child node will never tick.
Sig: Node:SetActive(active)
- Arg: boolean active New active status
IsActive
Check if the node is currently active. An optional boolean can be passed to check if any ancestor node is inactive, essentially making this node inactive.
Sig: active = Node:IsActive(recurse=false)
- Arg: boolean recurse Recursively check ancestors
- Ret: boolean active Active status
SetVisible
Sets the visibility of the node. Only visible nodes will be rendered. If a node is not visible, none of its children nodes will be rendered either.
Sig: Node:SetVisible(visible)
- Arg: boolean visible Visible status
IsVisible
Checks if the node is visible. An optional boolean can be passed to check if any ancestor node is not visible, essentially making this node not visible.
Sig: visible = Node:IsVisible(recurse=false)
- Arg: boolean recurse Recursively check ancestors
- Ret: boolean visible Visible status
SetPersistent
Set the persistence of a node. A persistent node will remain in a world when a world is cleared or a new root node is set. It will only be removed if it is explicitly removed. A persistent node will also not be destroyed if its parent is destroyed.
Sig: Node:SetPersistent(persistent)
- Arg: boolean persistent Is persistent
IsPersistent
Checks if the node is persistent. A persistent node will remain in a world when a world is cleared or a new root node is set. It will only be removed if it is explicitly removed. A persistent node will also not be destroyed if its parent is destroyed.
Sig: persistent = Node:IsPersistent()
- Ret: boolean persistent Is persistent
GetWorld
Returns the World that the node is currently in. Returns nil if not part of a World.
Sig: world = Node:GetWorld()
- Ret: World world Current world
GetParent
Returns this node's parent node.
Sig: parent = Node:GetParent()
- Ret: Node parent This node's parent node
Attach
Attach this node to a new parent node.
Sig: Node:Attach(parent, keepWorldTransform=false, childIndex=0)
- Arg: Node parent The new parent. Can be nil.
- Arg: boolean keepWorldTransform Option to keep the same world-space transform. Useful when you want to reparent something while keeping it in the same position.
- Arg: integer childIndex Where in the parent's child array this node should be placed. If 0, this node will be placed at the end of the parent node's child array.
Detach
Detach this node from its parent. This is essentially the same thing as calling Node:Attach(nil).
Sig: Node:Detach(keepWorldTransform=false)
- Arg: boolean keepWorldTransform Option to keep the same world-space transform. Useful when you want to reparent something while keeping it in the same position.
GetChild
Get a child node by its index.
Sig: child = Node:GetChild(index)
- Arg: integer index Which child to get
- Ret: Node child The child node. Will be nil if the index is out of range.
GetChildByType
Get the first child node of a given type.
Sig: child = Node:GetChildByType(typeName)
- Arg: string typeName The typename of child (e.g. Node3D, Primitive3D, Text, Image...).
- Ret: Node child The child node (nil if none of the children match the type).
GetNumChildren
Return the number of children this node has.
Sig: numChildren = Node:GetNumChildren()
- Ret: integer numChildren Number of children
AddChild
Parent the given node to this node. This is equivalent to calling newChild:Attach(thisNode).
Sig: Node:AddChild(newChild, index=0)
- Arg: Node newChild The new child node you want to add
- Arg: integer index The child index the new node should be placed at. If 0, it will be placed at the end.
RemoveChild
Remove a child node.
Sig: Node:RemoveChild(childIndexOrName)
- Arg: integer/string childIndexOrName Either an integer index, or a string name to identify which child should be removed.
FindChild
Find a child node by its name. An optional recurse argument can be provided to check all children recursively.
Sig: child = Node:FindChild(name, recurse=false)
- Arg: string name Name of the child to find
- Arg: boolean recurse Whether to recursively search all children. If false (the default value), only the immediate children will be searched.
- Ret: Node child The found child node. Will return nil if no child was found.
FindChildWithTag
Find the first child node with a given tag. An optional recurse argument can be provided to check all children recursively.
Sig: child = Node:FindChild(tag, recurse=false)
- Arg: string tag Tag to search for
- Arg: boolean recurse Whether to recursively search all children. If false (the default value), only the immediate children will be searched.
- Ret: Node child The found child node. Will return nil if no child was found.
FindDescendant
Find a descendant node by name. This is equivalent to calling Node:FindChild(name, true).
Sig: descendant = Node:FindDescendant(name)
- Arg: string name Descendant name
- Ret: Node descendant Descandant node if found (otherwise nil)
FindAncestor
Find an ancestor node by name.
Sig: ancestor = Node:FindAncestor(name)
- Arg: string name Ancestor name
- Ret: Node ancestor Ancestor node if found (otherwise nil)
HasAncestor
Check if the given node is an ancestor of this node.
Sig: hasAncestor = Node:HasAncestor(node)
- Arg: Node node Node to check
- Ret: boolean hasAncestor True if node was an ancestor of self
GetRoot
Return the root ancestor node of this node (i.e. the first node with no parent).
Sig: root = Node:GetRoot()
- Ret: Node root The root node of this node's tree
IsWorldRoot
Checks to see if this node is the root node of the world it is currently in.
Sig: isRoot = Node:IsWorldRoot()
- Ret: boolean isRoot true if node is in a world and is the world's root node, otherwise false.
Traverse
Execute a function for this node and it's descendants. An example that prints out all of the node tree's names is given below:
function PrintNodeNames(node)
Log.Debug(node:GetName())
return true
end
node:Traverse(PrintNodeNames)
If false is returned by the passed in function, it indicates that the Traverse function should not call the function on its children. Another example where we only print out the names of visible nodes:
function PrintVisibleNodeNames(node)
if (node:IsVisible()) then
Log.Debug(node:GetName())
return true
end
return false
end
node:Traverse(PrintVisibleNodeNames)
Sig: Node:Traverse(func, inverted=false)
- Arg: function func Function to invoke on each node
- Arg: boolean inverted If true invoke function on leaf nodes first, and work backwards to the self node
ForEach
Execute a function on this node and its children, similarly to Traverse(), except the passed in function should return true to continue execution on the next node and false to break out of the iteration entirely (not just skip over children).
Sig: success = Node:ForEach(func, inverted=false)
- Arg: function func Function to invoke on each node
- Arg: boolean inverted If true invoke function on leaf nodes first, and work backwards to the self node
- Ret: boolean success If true, all nodes were iterated over. If false, the execution was broken early
CreateChild
Construct a new node and parent it to this node.
Sig: child = Node:CreateChild(className)
- Arg: string className Class name of node type to construct (e.g. Primitive3D, Image)
- Ret: Node child The newly created child (nil if failed or an invalid class name was provided)
CreateChildClone
Construct a new node cloned from a source node and parent it to this node.
Sig: child = Node:CreateChildClone(srcNode, recurse)
- Arg: Node srcNode The source node to copy from
- Arg: boolean recurse Whether child nodes should be recursively created and copied
- Ret: Node child The newly cloned node
Clone
Create a copy of node. If the recurse option is set to true, it will copy all child nodes as well.
Sig: node = Node:Clone(srcNode, recurse)
- Arg: Node srcNode The source node to copy from
- Arg: boolean recurse If true, clone all children nodes as well
- Ret: Node node Newly created, cloned node
DestroyChild
Destroy a child node based on a given name or index. Note: This function seems excessive. Can we remove it?
Sig: Node:DestroyChild(nameOrIndex)
- Arg: string/integer nameOrIndex Name (string) or index (integer) of child node to destroy
DestroyAllChildren
Destroy all child nodes.
Sig: Node:DestroyAllChildren()
Start
Manually invoke the Start function of the node if it hasn't been started already. Normally a node will have its Start() function called on the first frame it ticks, but sometimes it can be useful to manually invoke Start() to control the order that nodes are started.
Sig: Node:Start()
HasStarted
Check if the node has already started (i.e. has had its Start() function called)
Sig: hasStarted = Node:HasStarted()
- Ret: boolean hasStarted true if Start() has been called for this node
GetNodeId
Get this node's unique ID.
Sig: id = Node:GetNodeId()
- Ret: integer id Node's unique identifier
EmitSignal
Broadcast a signal by name so that any nodes that are connected to the signal can react. There is no need to create a signal first, you can simple emit any signal by name.
Sig: Node:EmitSignal(signalName, args...)
- Arg: string signalName Name of the signal to emit
- Arg: args... Any number of arguments that you wish to pass
ConnectSignal
Connect a listener to a signal on this node.
The function passed in should be a member function of the node's table. For instance:
function HealthBar:OnHealthChanged(newHp)
self.quad:SetXRatio(newHp / Player.MaxHp)
end
function HealthBar:Start()
GetPlayer():ConnectSignal("healthChanged", self, HealthBar.OnHealthChanged)
end
Sig: Node:ConnectSignal(signalName, listener, func)
- Arg: string signalName Name of the signal to connect to
- Arg: Node listener The node that will be reacting to the signal
- Arg: function func The function on the listener node that will be invoked when the signal is emit.
DisconnectSignal
Disconnect a listener from a signal on this node.
Sig: Node:DisconnectSignal(signalName, listener)
- Arg: string signalName Name of the signal to disconnect from
- Arg: Node listener The node that was connected to the signal (and will now be disconnected)
IsDestroyed
Check if the node has been destroyed.
Sig: destroyed = Node:IsDestroyed()
- Ret: boolean destroyed Is the node destroyed
IsPendingDestroy
Check if the node is marked to be destroyed at the end of the frame.
Alias: IsDoomed
Sig: pendingDestroy = Node:IsPendingDestroy()
- Ret: boolean pendingDestroy true if marked for destruction
EnableTick
Set whether or not this node should tick every frame. Note: I don't think there is any difference between this and SetActive() right now, so this function might be removed in the future.
Sig: Node:EnableTick(enable)
- Arg: boolean enable Whether to tick
IsTickEnabled
Check if this node will have its Tick() function called. Note: I don't think there is any difference between this and IsActive() right now, so this function might be removed in the future.
Sig: enabled = Node:IsTickEnabled()
- Ret: boolean enabled true if can tick
GetScene
Return this node's associated Scene. When a scene is instantiated, the newly instantiated root node will hold a reference to the Scene asset which it was instantiated from. GetScene() will return this reference.
Sig: scene = Node:GetScene()
- Arg: Scene scene The node's associated scene
SetScript
Set the script file on a particular node.
Alias: SetScriptFile
Sig: Node:SetScript(filename)
- Arg: string filename Script filename
GetNetId
Return the net id associated with this node. A NetId will be assigned to nodes with replication enabled when hosting a session or connected to another session. NetIds are the internal mechanism for referencing the same node across different instances of the game.
Sig: netId = Node:GetNetId()
- Arg: integer netId The node's NetId, 0 is an invalid net id
GetOwningHost
Return the owning host id. Only useful in net play sessions for determining which player/host should control the node.
Sig: hostId = Node:GetOwningHost()
- Ret: integer hostId Owning host id
SetOwningHost
Set which host should own the node. The owning host id will be replicated to clients, so this function should only be called on the server. Ownership doesn't do anything on it's own, it's up to the game code to handle what ownership means (e.g. only the owning player can tell the player node where to move)
Sig: Node:SetOwningHost(hostId)
- Arg: integer hostId The new host id that should own the node
SetReplicate
Enable or disable network replication for this node. Note: The replicate flag should probably be set in the Editor via the Properties panel. I don't think setting it at runtime is advised.
Sig: Node:SetReplicate(replicate)
- Arg: boolean replicate true to replicate over the network
IsReplicated
Check if this node is replicated over the network.
Sig: replicated = Node:IsReplicated()
- Ret: boolean replicated true if replicated over the network
SetReplicateTransform
Set whether the transform (position/rotation/scale) should be replicated for this node. This is currently only used by 3D nodes, but in the future it might be expanded to work for widgets or 2D nodes. Note: Should probably be set in the editor instead of changed at runtime.
Sig: Node:SetReplicateTransform(replicateTransform)
- Arg: boolean replicateTransform true to replicate transform
IsTransformReplicated
Check if this node's transform is replicated.
Sig: transformReplicated = Node:IsTransformReplicated()
- Ret: boolean transformReplicated true if transform is replicated
ForceReplication
Forcefully replicate properties of this node on the next network update, even if nothing has changed.
Sig: Node:ForceReplication()
HasTag
Check if a node has a given tag assigned to it. Tags are strings that can be assigned to a node. Nodes can have an unlimited number of tags assigned to them.
Sig: hasTag = Node:HasTag(tag)
- Arg: string tag tag
- Ret: boolean hasTag true if the node has that tag assigned to it
AddTag
Add a tag to this node. Nothing will happen if this node already has the tag assigned to it.
Sig: Node:AddTag(tag)
- Arg: string tag Tag to assign
RemoveTag
Remove a tag on this node. Does nothing if the tag hasn't been assigned.
Sig: Node:RemoveTag(tag)
- Arg: string tag Tag to remove
HasAuthority
This function was added to match Unreal functionality, but the server will have network authority on all nodes. This function calls Network.IsAuthority(), it does not really matter which node this function is invoked on.
Sig: hasAuthority = Node:HasAuthority()
- Arg: boolean hasAuthority true if this host is a server
IsOwned
Check whether this computer host owns this node. In a local game, will return true if node:SetOwningHost(NetHost.Authority) was called on this node. If in a networked game, this function will return true if the OwningHost is equivalent to this computer's host id.
Sig: owned = Node:IsOwned()
- Ret: boolean owned true if owned by this host
IsLateTickEnabled
Check if late tick is enabled. Late tick means that the node will tick all of its children before it ticks itself. By default, the parent node will tick first.
Sig: lateTick = Node:IsLateTickEnabled()
- Ret: boolean lateTick true if node will tick after its children
EnableLateTick
Enable late tick on this node. Late tick means that the node will tick all of its children before it ticks itself. By default, the parent node will tick first.
Sig: Node:EnableLateTick(lateTick)
- Arg: boolean lateTick true to tick this node after its children
IsAlwaysRelevant
Check if this node is always relevant to clients
Sig: alwaysRelevant = Node:IsAlwaysRelevant()
- Ret: boolean alwaysRelevant Whether node should always relevant to clients
SetAlwaysRelevant
Set whether the node should always be relevant to clients.
Sig: Node:SetAlwaysRelevant(alwaysRelevant)
- Arg: boolean alwaysRelevant Whether node should always relevant to clients
InvokeNetFunc
Used to invoke a remote procedure call on this node. Up to 8 arguments can be passed.
Sig: Node:InvokeNetFunc(name, arg1, arg2, ... arg8)
- Arg: string name name of net func (must exist in GatherNetFuncs())
CheckType
Check if this node is of a given type.
Alias: Is
Alias: IsA
Sig: Node:CheckType(className)
- Arg: string className type name to check (e.g. "Primitive3D")