From 033374430808e4b01610f7408f0f37151ac1a271 Mon Sep 17 00:00:00 2001 From: Maxim Stewart Date: Mon, 20 Aug 2018 21:29:00 -0500 Subject: [PATCH] Fixed Enhanced Transform node. --- README.md | 9 +++- .../armory/logicnode/EnhancedTransformNode.hx | 46 ++++++++++++------- blender.py | 1 - 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index aa5a972..afe7de5 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,18 @@ These are Armory Nodes I've Made... # To Do -I want to add the following: - +I want to add and fix the following: +Add: +Fix: + + # Images ![1 Enhanced Transform](Images/Enhanced_Transform.png) ![2 Look At](Images/Look_At.png) diff --git a/Sources/armory/logicnode/EnhancedTransformNode.hx b/Sources/armory/logicnode/EnhancedTransformNode.hx index 9a7433d..76588af 100644 --- a/Sources/armory/logicnode/EnhancedTransformNode.hx +++ b/Sources/armory/logicnode/EnhancedTransformNode.hx @@ -1,37 +1,49 @@ package armory.logicnode; -import iron.object.Object; -import iron.math.Vec4; import armory.trait.physics.RigidBody; +import iron.object.Object; +import iron.math.Mat4; +import iron.math.Vec4; +import iron.math.Quat; class EnhancedTransformNode extends LogicNode { + var value:Mat4 = Mat4.identity(); + static var q = new Quat(); public function new(tree:LogicTree) { super(tree); } override function run() { - var object:Object = inputs[1].get(); + var object:Object = inputs[1].get(); var loc:Vec4 = inputs[2].get(); - var rot:Vec4 = inputs[3].get(); - var scale:Vec4 = inputs[4].get(); + var rot:Vec4 = inputs[3].get(); + var scale:Vec4 = inputs[4].get(); - if (loc == null || rot == null || scale == null) return; + if (loc == null || rot == null || scale == null) return; - // Location transform - object.transform.loc.x = loc.x; - object.transform.loc.y = loc.y; - object.transform.loc.z = loc.z; + if(loc.x == 0.0 && loc.y == 0.0 && loc.z == 0.0) { + loc.x = object.transform.loc.x; + loc.y = object.transform.loc.y; + loc.z = object.transform.loc.z; + } - // Rotation transform - object.transform.rot.fromEuler(rot.x, rot.y, rot.z); - object.transform.buildMatrix(); + if(rot.x == 0.0 && rot.y == 0.0 && rot.z == 0.0) { + rot.x = object.transform.rot.x; + rot.y = object.transform.rot.y; + rot.z = object.transform.rot.z; + } - // Scale transform - object.transform.scale.x = scale.x; - object.transform.scale.y = scale.y; - object.transform.scale.z = scale.z; + if(scale.x == 0.0 && scale.y == 0.0 && scale.z == 0.0) { + scale.x = object.transform.scale.x; + scale.y = object.transform.scale.y; + scale.z = object.transform.scale.z; + } + + q.fromEuler(rot.x, rot.y, rot.z); + value.compose(loc, q, scale); + object.transform.setMatrix(value); #if arm_physics var rigidBody = object.getTrait(RigidBody); diff --git a/blender.py b/blender.py index be1dc20..e0a6e47 100644 --- a/blender.py +++ b/blender.py @@ -14,7 +14,6 @@ class EnhancedTransformNode(Node, ArmLogicTreeNode): self.inputs.new('NodeSocketVector', 'Location') self.inputs.new('NodeSocketVector', 'Rotation') self.inputs.new('NodeSocketVector', 'Scale') - self.inputs[-1].default_value = [1.0, 1.0, 1.0] self.outputs.new('ArmNodeSocketAction', 'Out') class LookAtNode(Node, ArmLogicTreeNode):