From ee194a18069cadc522762eb8eef3baf29a7ce752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Br=C3=BCckner?= Date: Sat, 10 Jul 2021 21:50:30 +0200 Subject: [PATCH] Live patch: support for socket default values --- Sources/armory/trait/internal/LivePatch.hx | 10 +++++++++ blender/arm/live_patch.py | 26 +++++++++++++++++++++- blender/arm/logicnode/arm_nodes.py | 2 +- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Sources/armory/trait/internal/LivePatch.hx b/Sources/armory/trait/internal/LivePatch.hx index 8d8be7db..7a9733e5 100644 --- a/Sources/armory/trait/internal/LivePatch.hx +++ b/Sources/armory/trait/internal/LivePatch.hx @@ -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 } diff --git a/blender/arm/live_patch.py b/blender/arm/live_patch.py index c9a89c9e..cfd8ecd5 100644 --- a/blender/arm/live_patch.py +++ b/blender/arm/live_patch.py @@ -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 diff --git a/blender/arm/logicnode/arm_nodes.py b/blender/arm/logicnode/arm_nodes.py index 7c929f31..1f8f9681 100644 --- a/blender/arm/logicnode/arm_nodes.py +++ b/blender/arm/logicnode/arm_nodes.py @@ -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."""