Live patch: support for socket default values

This commit is contained in:
Moritz Brückner 2021-07-10 21:50:30 +02:00
parent 96aa0ee890
commit ee194a1806
3 changed files with 36 additions and 2 deletions

View file

@ -55,5 +55,15 @@ class LivePatch extends iron.Trait {
Reflect.setField(node, propName, value);
}
public static function patchUpdateNodeInputVal(treeName: String, nodeName: String, socketIndex: Int, value: Dynamic) {
var tree = LogicTree.nodeTrees[treeName];
if (tree == null) return;
var node = tree.nodes[nodeName];
if (node == null) return;
@:privateAccess node.inputs[socketIndex].set(value);
}
#end
}

View file

@ -178,7 +178,7 @@ def send_event(event_id: str, opt_data: Any = None):
js = f'LivePatch.patchCreateNodeLink("{tree_name}", "{from_node_name}", "{to_node_name}", "{from_index}", "{to_index}");'
write_patch(js)
if event_id == 'ln_update_prop':
elif event_id == 'ln_update_prop':
node: ArmLogicTreeNode
prop_name: str
node, prop_name = opt_data
@ -191,6 +191,30 @@ def send_event(event_id: str, opt_data: Any = None):
js = f'LivePatch.patchUpdateNodeProp("{tree_name}", "{node_name}", "{prop_name}", {value});'
write_patch(js)
elif event_id == 'ln_socket_val':
node: ArmLogicTreeNode
socket: bpy.types.NodeSocket
node, socket = opt_data
socket_index = arm.node_utils.get_socket_index(node.inputs, socket)
if socket_index != -1:
tree_name = arm.node_utils.get_export_tree_name(node.get_tree())
node_name = arm.node_utils.get_export_node_name(node)[1:]
value = arm.node_utils.haxe_format_socket_val(socket.get_default_value())
inp_type = socket.arm_socket_type
if inp_type in ('VECTOR', 'RGB'):
value = '{' + f'"x": {value[0]}, "y": {value[1]}, "z": {value[2]}' + '}'
elif inp_type == 'RGBA':
value = '{' + f'"x": {value[0]}, "y": {value[1]}, "z": {value[2]}, "w": {value[3]}' + '}'
elif inp_type == 'BOOLEAN':
value = str(value).lower()
js = f'LivePatch.patchUpdateNodeInputVal("{tree_name}", "{node_name}", {socket_index}, {value});'
write_patch(js)
def on_operator(operator_id: str):
"""As long as bpy.msgbus doesn't listen to changes made by

View file

@ -62,7 +62,7 @@ class ArmLogicTreeNode(bpy.types.Node):
arm.live_patch.send_event('ln_update_prop', (self, prop_name))
def on_socket_val_update(self, context: bpy.types.Context, socket: bpy.types.NodeSocket):
pass
arm.live_patch.send_event('ln_socket_val', (self, socket))
def insert_link(self, link: bpy.types.NodeLink):
"""Called on *both* nodes when a link between two nodes is created."""