Work with Observers
Using Lua to observe changes to nodes
These functions allow callbacks to be performed in response to nodes being updated.
The defined callbacks will take place following the execution of the script, or during a vrYield.
vrAddPropertyObserver
Adds an observer to monitor and respond to value changes for a single property.
local myNode = vrCreateNode("Assembly", "ObservedNode", vrScenesNode())
vrYield(0)
local myCallback = function(node, value)
print(node:getName() .. " enabled: " .. tostring(value))
end
vrAddPropertyObserver(
"enabledObserver",
myCallback,
"Assembly",
"Enabled"
)
myNode.Enabled = false
vrYield(0)
myNode.Enabled = true
vrYield(0)
vrRemoveObserver("enabledObserver")
vrDeleteNode(myNode)
This will output
ObservedNode enabled: false
ObservedNode enabled: true
vrAddNodeObserver
Adds an observer to monitor and respond to changes on a Node.
The function takes a map of callback functions. These will be called in response to the appropriate changes.
Key | Callback | Callback Signature |
---|
valuesChanged
| Called in response to a property's value being changed. | function(node) |
addingToRecycleBin
| Called in repsonse to the node being sent to the recycle bin. | function(node) |
restoredFromRecycleBin
| Called in repsonse to the node being returned from the recycle bin. | function(node) |
nodeDestroyed
| Called in response to the node being destroyed. | function(node) |
local myNode = vrCreateNode("Assembly", "ObservedNode", vrScenesNode())
vrYield(0)
local callbackMap = {
valuesChanged = function(node)
print(node:getName() .. " enabled: " .. tostring(node.Enabled))
end,
addingToRecycleBin = function(node)
print(node:getName() .. " removed")
end
}
vrAddNodeObserver(
"nodeObserver",
myNode,
callbackMap
)
myNode.Enabled = false
vrYield(0)
myNode.Enabled = true
vrYield(0)
vrDeleteNode(myNode)
vrYield(0)
vrRemoveObserver("nodeObserver")
This will output
ObservedNode enabled: false
ObservedNode enabled: true
ObservedNode removed
vrAddMetaNodeObserver
Adds an observer to monitor and respond to changes on instances of a MetaNode.
The function takes a map of callback functions. These will be called in response to the appropriate changes.
Key | Callback | Callback Signature |
---|
nodeCreated
| Called in response to a node being created. | function(meta, node) |
nodeRenamed
| Called in repsonse to a node being renamed. | function(meta, node) |
nodeParentChanged
| Called in response to a node being moved. | function(meta, node, oldParent, newParent) |
nodeAddingToRecycleBin
| Called in repsonse to a node being sent to the recycle bin. | function(meta, node) |
nodeRestoredFromRecycleBin
| Called in repsonse to a node being returned from the recycle bin. | function(meta, node) |
nodeDestroying
| Called in response to a node being destroyed. | function(meta, node) |
local callbackMap = {
nodeCreated = function(meta, node)
print(node:getName() .. " created")
end,
nodeRenamed = function(meta, node)
print(node:getName() .. " renamed")
end,
nodeParentChanged = function(meta, node, old, new)
if(old and new) then
print(node:getName() .. " moved from " .. old:getName() .. " to " .. new:getName())
end
end,
nodeAddingToRecycleBin = function(meta, node)
print(node:getName() .. " removed")
end
}
vrAddMetaNodeObserver(
"nodeObserver",
"Assembly",
callbackMap
)
local myNode = vrCreateNode("Assembly", "ObservedNode", vrScenesNode())
myNode:setParent(vrLibrariesNode())
vrYield(0)
myNode:setName("NamedNode")
vrYield(0)
vrDeleteNode(myNode)
vrYield(0)
vrRemoveObserver("nodeObserver")
This will output
ObservedNode created
ObservedNode moved from Scenes to Libraries
NamedNode renamed
NamedNode removed
NamedNode moved from Libraries to RecycleBin
vrAddTransformNodeObserver
Adds an observer to monitor and respond to the transform related value changes of a Node.
local myNode = vrCreateNode("Assembly", "ObservedNode", vrScenesNode())
vrYield(0)
local myTransformCallback = function(node, value)
print(node:getName() .. " transformed:")
print(tostring(value))
end
local myEnabledCallback = function(node, value)
print(node:getName() .. " enabled: " .. tostring(value))
end
vrAddTransformNodeObserver(
"transformObserver",
myTransformCallback,
myEnabledCallback,
myNode
)
myNode.Enabled = false
vrYield(0)
myNode.Enabled = true
vrYield(0)
local transform = myNode.Transform
transform.position.x = transform.position.x + 1.0
vrYield(0)
vrRemoveObserver("transformObserver")
vrDeleteNode(myNode)
vrYield(0)
This will output
ObservedNode enabled: false
ObservedNode enabled: true
ObservedNode transformed:
1 0 0 0
0 1 0 0
0 0 1 0
1 0 0 1