From 6050bceaf16fc8fb75b03d0cffe0bdc9f04a1ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Br=C3=BCckner?= Date: Sat, 24 Jul 2021 20:17:29 +0200 Subject: [PATCH] Fix nodes with "..._get" property names --- blender/arm/live_patch.py | 13 +++++++++---- blender/arm/make_logic.py | 6 +++--- blender/arm/node_utils.py | 7 +++++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/blender/arm/live_patch.py b/blender/arm/live_patch.py index 18f2dcdc..717600c3 100644 --- a/blender/arm/live_patch.py +++ b/blender/arm/live_patch.py @@ -188,6 +188,11 @@ def send_event(event_id: str, opt_data: Any = None): value = arm.node_utils.haxe_format_prop_value(node, prop_name) + if prop_name.endswith('_get'): + # Hack because some nodes use a different Python property + # name than they use in Haxe + prop_name = prop_name[:-4] + js = f'LivePatch.patchUpdateNodeProp("{tree_name}", "{node_name}", "{prop_name}", {value});' write_patch(js) @@ -224,9 +229,9 @@ def send_event(event_id: str, opt_data: Any = None): node_name = arm.node_utils.get_export_node_name(node)[1:] node_type = 'armory.logicnode.' + node.bl_idname[2:] - prop_names = tuple(arm.node_utils.get_haxe_property_names(node)) - prop_values = (getattr(node, prop_name) for prop_name in prop_names) - prop_datas = arm.node_utils.haxe_format_socket_val(list(zip(prop_names, prop_values))) + prop_py_names, prop_hx_names = zip(*arm.node_utils.get_haxe_property_names(node)) + prop_values = (getattr(node, prop_name) for prop_name in prop_py_names) + prop_datas = arm.node_utils.haxe_format_socket_val(list(zip(prop_hx_names, prop_values))) inp_data = [(inp.arm_socket_type, inp.get_default_value()) for inp in node.inputs] inp_data = arm.node_utils.haxe_format_socket_val(inp_data) @@ -256,7 +261,7 @@ def send_event(event_id: str, opt_data: Any = None): newnode_name = arm.node_utils.get_export_node_name(newnode)[1:] node_name = arm.node_utils.get_export_node_name(node)[1:] - props_list = '[' + ','.join(f'"{p}"' for p in arm.node_utils.get_haxe_property_names(node)) + ']' + props_list = '[' + ','.join(f'"{p}"' for _, p in arm.node_utils.get_haxe_property_names(node)) + ']' inp_data = [(inp.arm_socket_type, inp.get_default_value()) for inp in newnode.inputs] inp_data = arm.node_utils.haxe_format_socket_val(inp_data) diff --git a/blender/arm/make_logic.py b/blender/arm/make_logic.py index 0e594f17..ad5a28ec 100755 --- a/blender/arm/make_logic.py +++ b/blender/arm/make_logic.py @@ -159,9 +159,9 @@ def build_node(node: bpy.types.Node, f: TextIO) -> Optional[str]: f.write(f'\t\tthis.nodes["{name[1:]}"] = {name};\n') # Properties - for prop_name in arm.node_utils.get_haxe_property_names(node): - prop = arm.node_utils.haxe_format_prop_value(node, prop_name) - f.write('\t\t' + name + '.' + prop_name + ' = ' + prop + ';\n') + for prop_py_name, prop_hx_name in arm.node_utils.get_haxe_property_names(node): + prop = arm.node_utils.haxe_format_prop_value(node, prop_py_name) + f.write('\t\t' + name + '.' + prop_hx_name + ' = ' + prop + ';\n') # Avoid unnecessary input/output array resizes f.write(f'\t\t{name}.preallocInputs({len(node.inputs)});\n') diff --git a/blender/arm/node_utils.py b/blender/arm/node_utils.py index 747360d5..ef465b32 100755 --- a/blender/arm/node_utils.py +++ b/blender/arm/node_utils.py @@ -110,7 +110,7 @@ def get_export_node_name(node: bpy.types.Node) -> str: return '_' + arm.utils.safesrc(node.name) -def get_haxe_property_names(node: bpy.types.Node) -> Generator[str, None, None]: +def get_haxe_property_names(node: bpy.types.Node) -> Generator[tuple[str, str], None, None]: """Generator that yields the names of all node properties that have a counterpart in the node's Haxe class. """ @@ -121,7 +121,10 @@ def get_haxe_property_names(node: bpy.types.Node) -> Generator[str, None, None]: prop_name = f'property{i}' prop_found = hasattr(node, prop_name) if prop_found: - yield prop_name + # Haxe properties are called property0 - property9 even if + # their Python equivalent can end with '_get', so yield + # both names + yield prop_name, f'property{i}' def haxe_format_socket_val(socket_val: Any, array_outer_brackets=True) -> str: