From 6785d457b5ba77c91e92f9ba57477ffb38dfb9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Wed, 1 May 2019 00:25:48 +0200 Subject: [PATCH 1/2] implement property mapping and realize armory uses the bl_idlabel for classnames --- .../{GamepadNode.hx => MergedGamepadNode.hx} | 2 +- ...{KeyboardNode.hx => MergedKeyboardNode.hx} | 2 +- .../{MouseNode.hx => MergedMouseNode.hx} | 2 +- .../{SurfaceNode.hx => MergedSurfaceNode.hx} | 2 +- ...ttonNode.hx => MergedVirtualButtonNode.hx} | 2 +- blender/arm/nodes_logic.py | 27 +++++++++++-------- 6 files changed, 21 insertions(+), 16 deletions(-) rename Sources/armory/logicnode/{GamepadNode.hx => MergedGamepadNode.hx} (96%) rename Sources/armory/logicnode/{KeyboardNode.hx => MergedKeyboardNode.hx} (94%) rename Sources/armory/logicnode/{MouseNode.hx => MergedMouseNode.hx} (95%) rename Sources/armory/logicnode/{SurfaceNode.hx => MergedSurfaceNode.hx} (94%) rename Sources/armory/logicnode/{VirtualButtonNode.hx => MergedVirtualButtonNode.hx} (93%) diff --git a/Sources/armory/logicnode/GamepadNode.hx b/Sources/armory/logicnode/MergedGamepadNode.hx similarity index 96% rename from Sources/armory/logicnode/GamepadNode.hx rename to Sources/armory/logicnode/MergedGamepadNode.hx index 82cb99e7..921d9110 100644 --- a/Sources/armory/logicnode/GamepadNode.hx +++ b/Sources/armory/logicnode/MergedGamepadNode.hx @@ -1,6 +1,6 @@ package armory.logicnode; -class GamepadNode extends LogicNode { +class MergedGamepadNode extends LogicNode { public var property0:String; public var property1:String; diff --git a/Sources/armory/logicnode/KeyboardNode.hx b/Sources/armory/logicnode/MergedKeyboardNode.hx similarity index 94% rename from Sources/armory/logicnode/KeyboardNode.hx rename to Sources/armory/logicnode/MergedKeyboardNode.hx index f3ed8a9f..c165e9c3 100644 --- a/Sources/armory/logicnode/KeyboardNode.hx +++ b/Sources/armory/logicnode/MergedKeyboardNode.hx @@ -1,6 +1,6 @@ package armory.logicnode; -class KeyboardNode extends LogicNode { +class MergedKeyboardNode extends LogicNode { public var property0:String; public var property1:String; diff --git a/Sources/armory/logicnode/MouseNode.hx b/Sources/armory/logicnode/MergedMouseNode.hx similarity index 95% rename from Sources/armory/logicnode/MouseNode.hx rename to Sources/armory/logicnode/MergedMouseNode.hx index 4f1d0be1..338ed065 100644 --- a/Sources/armory/logicnode/MouseNode.hx +++ b/Sources/armory/logicnode/MergedMouseNode.hx @@ -1,6 +1,6 @@ package armory.logicnode; -class MouseNode extends LogicNode { +class MergedMouseNode extends LogicNode { public var property0:String; public var property1:String; diff --git a/Sources/armory/logicnode/SurfaceNode.hx b/Sources/armory/logicnode/MergedSurfaceNode.hx similarity index 94% rename from Sources/armory/logicnode/SurfaceNode.hx rename to Sources/armory/logicnode/MergedSurfaceNode.hx index c31e12c8..44de83f1 100644 --- a/Sources/armory/logicnode/SurfaceNode.hx +++ b/Sources/armory/logicnode/MergedSurfaceNode.hx @@ -1,6 +1,6 @@ package armory.logicnode; -class SurfaceNode extends LogicNode { +class MergedSurfaceNode extends LogicNode { public var property0:String; diff --git a/Sources/armory/logicnode/VirtualButtonNode.hx b/Sources/armory/logicnode/MergedVirtualButtonNode.hx similarity index 93% rename from Sources/armory/logicnode/VirtualButtonNode.hx rename to Sources/armory/logicnode/MergedVirtualButtonNode.hx index b5e3babb..3cced332 100644 --- a/Sources/armory/logicnode/VirtualButtonNode.hx +++ b/Sources/armory/logicnode/MergedVirtualButtonNode.hx @@ -1,6 +1,6 @@ package armory.logicnode; -class VirtualButtonNode extends LogicNode { +class MergedVirtualButtonNode extends LogicNode { public var property0:String; public var property1:String; diff --git a/blender/arm/nodes_logic.py b/blender/arm/nodes_logic.py index a23daf16..f20db591 100755 --- a/blender/arm/nodes_logic.py +++ b/blender/arm/nodes_logic.py @@ -124,11 +124,12 @@ class Replacement: # to_node: the node type which takes from_node's place # *SocketMapping: a map which defines how the sockets of the old node shall be connected to the new node # {1: 2} means that anything connected to the socket with index 1 on the original node will be connected to the socket with index 2 on the new node - def __init__(self, from_node, to_node, in_socket_mapping, out_socket_mapping): + def __init__(self, from_node, to_node, in_socket_mapping, out_socket_mapping, property_mapping): self.from_node = from_node self.to_node = to_node self.in_socket_mapping = in_socket_mapping self.out_socket_mapping = out_socket_mapping + self.property_mapping = property_mapping # actual replacement code def replace(tree, node): @@ -137,6 +138,10 @@ def replace(tree, node): newnode.location = node.location newnode.parent = node.parent + # map properties + for prop in replacement.property_mapping.keys(): + setattr(newnode, replacement.property_mapping.get(prop), getattr(node, prop)) + parent = node.parent while parent is not None: newnode.location[0] += parent.location[0] @@ -186,20 +191,20 @@ class ReplaceNodesOperator(bpy.types.Operator): return context.space_data != None and context.space_data.type == 'NODE_EDITOR' # Input Replacement Rules -add_replacement(Replacement("LNOnGamepadNode", "LNMergedGamepadNode", {}, {0: 0})) -add_replacement(Replacement("LNGamepadNode", "LNMergedGamepadNode", {}, {0: 1})) +add_replacement(Replacement("LNOnGamepadNode", "LNMergedGamepadNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNGamepadNode", "LNMergedGamepadNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNOnMouseNode", "LNMergedMouseNode", {}, {0: 0})) -add_replacement(Replacement("LNMouseNode", "LNMergedMouseNode", {}, {0: 1})) +add_replacement(Replacement("LNOnMouseNode", "LNMergedMouseNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNMouseNode", "LNMergedMouseNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNOnSurfaceNode", "LNMergedSurfaceNode", {}, {0: 0})) -add_replacement(Replacement("LNSurfaceNode", "LNMergedSurfaceNode", {}, {0: 1})) +add_replacement(Replacement("LNOnSurfaceNode", "LNMergedSurfaceNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNSurfaceNode", "LNMergedSurfaceNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNOnKeyboardNode", "LNMergedKeyboardNode", {}, {0: 0})) -add_replacement(Replacement("LNKeyboardNode", "LNMergedKeyboardNode", {}, {0: 1})) +add_replacement(Replacement("LNOnKeyboardNode", "LNMergedKeyboardNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNKeyboardNode", "LNMergedKeyboardNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNOnVirtualButtonNode", "LNMergedVirtualButtonNode", {}, {0: 0})) -add_replacement(Replacement("LNVirtualButtonNode", "LNMergedVirtualButtonNode", {}, {0: 1})) +add_replacement(Replacement("LNOnVirtualButtonNode", "LNMergedVirtualButtonNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNVirtualButtonNode", "LNMergedVirtualButtonNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) def register(): bpy.utils.register_class(ArmLogicTree) From 65148dfa67f7ad7204c4e0209cda3c691002d2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannik=20B=C3=B6ttcher?= Date: Wed, 1 May 2019 00:46:41 +0200 Subject: [PATCH 2/2] added property mapping and mapping of unconnected inputs --- blender/arm/nodes_logic.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/blender/arm/nodes_logic.py b/blender/arm/nodes_logic.py index f20db591..06e37556 100755 --- a/blender/arm/nodes_logic.py +++ b/blender/arm/nodes_logic.py @@ -138,16 +138,23 @@ def replace(tree, node): newnode.location = node.location newnode.parent = node.parent - # map properties - for prop in replacement.property_mapping.keys(): - setattr(newnode, replacement.property_mapping.get(prop), getattr(node, prop)) - parent = node.parent while parent is not None: newnode.location[0] += parent.location[0] newnode.location[1] += parent.location[1] parent = parent.parent + + # map properties + for prop in replacement.property_mapping.keys(): + setattr(newnode, replacement.property_mapping.get(prop), getattr(node, prop)) + + # map unconnected inputs + for in_socket in replacement.in_socket_mapping.keys(): + if not node.inputs[in_socket].is_linked: + newnode.inputs[replacement.in_socket_mapping.get(in_socket)].default_value = node.inputs[in_socket].default_value + + # map connected inputs for link in tree.links: if link.from_node == node: # this is an output link @@ -191,14 +198,14 @@ class ReplaceNodesOperator(bpy.types.Operator): return context.space_data != None and context.space_data.type == 'NODE_EDITOR' # Input Replacement Rules -add_replacement(Replacement("LNOnGamepadNode", "LNMergedGamepadNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNGamepadNode", "LNMergedGamepadNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNOnGamepadNode", "LNMergedGamepadNode", {0: 0}, {0: 0}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNGamepadNode", "LNMergedGamepadNode", {0: 0}, {0: 1}, {"property0": "property0", "property1": "property1"})) add_replacement(Replacement("LNOnMouseNode", "LNMergedMouseNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) add_replacement(Replacement("LNMouseNode", "LNMergedMouseNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNOnSurfaceNode", "LNMergedSurfaceNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) -add_replacement(Replacement("LNSurfaceNode", "LNMergedSurfaceNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"})) +add_replacement(Replacement("LNOnSurfaceNode", "LNMergedSurfaceNode", {}, {0: 0}, {"property0": "property0"})) +add_replacement(Replacement("LNSurfaceNode", "LNMergedSurfaceNode", {}, {0: 1}, {"property0": "property0"})) add_replacement(Replacement("LNOnKeyboardNode", "LNMergedKeyboardNode", {}, {0: 0}, {"property0": "property0", "property1": "property1"})) add_replacement(Replacement("LNKeyboardNode", "LNMergedKeyboardNode", {}, {0: 1}, {"property0": "property0", "property1": "property1"}))