Fix nodes with "..._get" property names

This commit is contained in:
Moritz Brückner 2021-07-24 20:17:29 +02:00
parent dbb0764ca7
commit 6050bceaf1
3 changed files with 17 additions and 9 deletions

View file

@ -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)

View file

@ -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')

View file

@ -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: