From a4dba65a7a28626e72cf20d7202c38b4d9e3df46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Br=C3=BCckner?= Date: Sun, 12 Apr 2020 17:32:52 +0200 Subject: [PATCH 1/2] "Fix" vector node --- Sources/armory/logicnode/VectorNode.hx | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/armory/logicnode/VectorNode.hx b/Sources/armory/logicnode/VectorNode.hx index 7e0c11ab..2c186907 100644 --- a/Sources/armory/logicnode/VectorNode.hx +++ b/Sources/armory/logicnode/VectorNode.hx @@ -17,6 +17,7 @@ class VectorNode extends LogicNode { } override function get(from: Int): Dynamic { + value = new Vec4(); value.x = inputs[0].get(); value.y = inputs[1].get(); value.z = inputs[2].get(); From 247e0b4c3bd36c8f805c82ed23cbd464aa4ff2d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20Br=C3=BCckner?= Date: Sun, 12 Apr 2020 17:33:27 +0200 Subject: [PATCH 2/2] Refactor ArrayAddNode + combine it with ArrayAddUnique --- Sources/armory/logicnode/ArrayAddNode.hx | 25 +++++++++++++--- .../armory/logicnode/ArrayAddUniqueNode.hx | 22 -------------- blender/arm/logicnode/array_add.py | 5 +++- blender/arm/logicnode/array_add_unique.py | 30 ------------------- 4 files changed, 25 insertions(+), 57 deletions(-) delete mode 100644 Sources/armory/logicnode/ArrayAddUniqueNode.hx delete mode 100644 blender/arm/logicnode/array_add_unique.py diff --git a/Sources/armory/logicnode/ArrayAddNode.hx b/Sources/armory/logicnode/ArrayAddNode.hx index fb4787ec..01def102 100644 --- a/Sources/armory/logicnode/ArrayAddNode.hx +++ b/Sources/armory/logicnode/ArrayAddNode.hx @@ -2,21 +2,38 @@ package armory.logicnode; class ArrayAddNode extends LogicNode { + var ar: Array; + public function new(tree: LogicTree) { super(tree); } override function run(from: Int) { - var ar: Array = inputs[1].get(); + ar = inputs[1].get(); if (ar == null) return; - if (inputs.length > 2) { - for (i in 2...inputs.length) { + // "Modify Original" == `false` -> Copy the input array + if (!inputs[3].get()) { + ar = ar.copy(); + } + + if (inputs.length > 4) { + for (i in 4...inputs.length) { var value: Dynamic = inputs[i].get(); - ar.push(value); + + // "Unique Values" options only supports primitive data types + // for now, a custom indexOf() or contains() method would be + // required to compare values of other types + if (!inputs[2].get() || ar.indexOf(value) == -1) { + ar.push(value); + } } } runOutput(0); } + + override function get(from: Int): Dynamic { + return ar; + } } diff --git a/Sources/armory/logicnode/ArrayAddUniqueNode.hx b/Sources/armory/logicnode/ArrayAddUniqueNode.hx deleted file mode 100644 index fafde3d6..00000000 --- a/Sources/armory/logicnode/ArrayAddUniqueNode.hx +++ /dev/null @@ -1,22 +0,0 @@ -package armory.logicnode; - -class ArrayAddUniqueNode extends LogicNode { - - public function new(tree: LogicTree) { - super(tree); - } - - override function run(from: Int) { - var ar: Array = inputs[1].get(); - if (ar == null) return; - - if (inputs.length > 2) { - for (i in 2...inputs.length) { - var value: Dynamic = inputs[i].get(); - if (ar.indexOf(value) == -1) ar.push(value); - } - } - - runOutput(0); - } -} diff --git a/blender/arm/logicnode/array_add.py b/blender/arm/logicnode/array_add.py index 8797c6e0..2eeb47e9 100644 --- a/blender/arm/logicnode/array_add.py +++ b/blender/arm/logicnode/array_add.py @@ -15,13 +15,16 @@ class ArrayAddNode(Node, ArmLogicTreeNode): def init(self, context): self.inputs.new('ArmNodeSocketAction', 'In') self.inputs.new('ArmNodeSocketArray', 'Array') + self.inputs.new('NodeSocketBool', 'Unique Values') + self.inputs.new('NodeSocketBool', 'Modify Original').default_value = True self.inputs.new('NodeSocketShader', 'Value') self.outputs.new('ArmNodeSocketAction', 'Out') + self.outputs.new('ArmNodeSocketArray', 'Array') def draw_buttons(self, context, layout): row = layout.row(align=True) - op = row.operator('arm.node_add_input_value', text='New', icon='PLUS', emboss=True) + op = row.operator('arm.node_add_input_value', text='Add Input', icon='PLUS', emboss=True) op.node_index = str(id(self)) op.socket_type = 'NodeSocketShader' op2 = row.operator('arm.node_remove_input_value', text='', icon='X', emboss=True) diff --git a/blender/arm/logicnode/array_add_unique.py b/blender/arm/logicnode/array_add_unique.py deleted file mode 100644 index e6048426..00000000 --- a/blender/arm/logicnode/array_add_unique.py +++ /dev/null @@ -1,30 +0,0 @@ -import bpy -from bpy.props import * -from bpy.types import Node, NodeSocket -from arm.logicnode.arm_nodes import * - -class ArrayAddUniqueNode(Node, ArmLogicTreeNode): - '''Array add unique node''' - bl_idname = 'LNArrayAddUniqueNode' - bl_label = 'Array Add Unique' - bl_icon = 'QUESTION' - - def __init__(self): - array_nodes[str(id(self))] = self - - def init(self, context): - self.inputs.new('ArmNodeSocketAction', 'In') - self.inputs.new('ArmNodeSocketArray', 'Array') - self.inputs.new('NodeSocketShader', 'Value') - self.outputs.new('ArmNodeSocketAction', 'Out') - - def draw_buttons(self, context, layout): - row = layout.row(align=True) - - op = row.operator('arm.node_add_input_value', text='New', icon='PLUS', emboss=True) - op.node_index = str(id(self)) - op.socket_type = 'NodeSocketShader' - op2 = row.operator('arm.node_remove_input_value', text='', icon='X', emboss=True) - op2.node_index = str(id(self)) - -add_node(ArrayAddUniqueNode, category='Array')