diff --git a/Images/Enhanced Transform.png b/Images/Enhanced Transform.png new file mode 100644 index 0000000..9b06549 Binary files /dev/null and b/Images/Enhanced Transform.png differ diff --git a/Images/Look At.png b/Images/Look At.png new file mode 100644 index 0000000..083c778 Binary files /dev/null and b/Images/Look At.png differ diff --git a/README.md b/README.md index b145308..21568f2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Created-Armory-Nodes -These are Armory Nodes I've Made... +These are Armory Nodes I've Made... + +# Images +![1 Enhanced Transform](Images/Enhanced Transform.png) +![2 Pane View](Images/Look At.png) diff --git a/Sources/armory/logicnode/EnhancedTransformNode.hx b/Sources/armory/logicnode/EnhancedTransformNode.hx new file mode 100644 index 0000000..96099e0 --- /dev/null +++ b/Sources/armory/logicnode/EnhancedTransformNode.hx @@ -0,0 +1,43 @@ +package armory.logicnode; + +import iron.object.Object; +import iron.math.Vec4; +import armory.trait.physics.RigidBody; + + +class EnhancedTransformNode extends LogicNode { + + public function new(tree:LogicTree) { + super(tree); + } + + override function run() { + var object:Object = inputs[1].get(); + var loc:Vec4 = inputs[2].get(); + var rot:Vec4 = inputs[3].get(); + var scale:Vec4 = inputs[4].get(); + + 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; + + // Rotation transform + object.transform.rot.fromEuler(rot.x, rot.y, rot.z); + object.transform.buildMatrix(); + + // Scale transform + object.transform.scale.x = scale.x; + object.transform.scale.y = scale.y; + object.transform.scale.z = scale.z; + + #if arm_physics + var rigidBody = object.getTrait(RigidBody); + if (rigidBody != null) rigidBody.syncTransform(); + #end + + super.run(); + } +} diff --git a/Sources/armory/logicnode/LookAtNode.hx b/Sources/armory/logicnode/LookAtNode.hx new file mode 100644 index 0000000..e3c8f00 --- /dev/null +++ b/Sources/armory/logicnode/LookAtNode.hx @@ -0,0 +1,49 @@ +package armory.logicnode; + +import iron.object.Object; +import iron.math.Vec3; +import armory.trait.physics.RigidBody; + + +class LookAtNode extends LogicNode { + + public function new(tree:LogicTree) { + super(tree); + } + + override function run() { + var targeter:Object = inputs[1].get(); + var target:Object = inputs[2].get(); + var threeDeeTrack:Bool = inputs[3].get(); + + var targeterRot:Vec3; + var targetLoc:Vec3; + + if (targeter == null || target == null) return; + + targeterRot = new Vec3(targeter.transform.rot.x, + targeter.transform.rot.y, + targeter.transform.rot.z); + + targetLoc = new Vec3(target.transform.loc.x, + target.transform.loc.y, + target.transform.loc.z); + + var newZLook = targeterRot.z + (targeterRot.z - (targetLoc.y / targetLoc.x)); + + if ( threeDeeTrack == true ) { + targeter.transform + .setRotation(targeterRot.x, targetLoc.y, newZLook); + } else { + targeter.transform + .setRotation(targeterRot.x, targeterRot.y, newZLook); + } + + #if arm_physics + var rigidBody = targeter.getTrait(RigidBody); + if (rigidBody != null) rigidBody.syncTransform(); + #end + + super.run(); + } +} diff --git a/blender.py b/blender.py new file mode 100644 index 0000000..be1dc20 --- /dev/null +++ b/blender.py @@ -0,0 +1,40 @@ +from bpy.types import Node +from arm.logicnode.arm_nodes import * +import arm.nodes_logic + +class EnhancedTransformNode(Node, ArmLogicTreeNode): + '''EnhancedTransformNode''' + bl_idname = 'LNEnhancedTransformNode' + bl_label = 'Enhanced Transform' + bl_icon = 'GAME' + + def init(self, context): + self.inputs.new('ArmNodeSocketAction', 'In') + self.inputs.new('ArmNodeSocketObject', 'Object') + 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): + '''LookAtNode''' + bl_idname = 'LNLookAtNode' + bl_label = 'Look At' + bl_icon = 'GAME' + + def init(self, context): + self.inputs.new('ArmNodeSocketAction', 'In') + self.inputs.new('ArmNodeSocketObject', 'Object') + self.inputs.new('ArmNodeSocketObject', 'Object') + self.inputs.new('NodeSocketBool', '3D Track') + self.outputs.new('ArmNodeSocketAction', 'Out') + + +def register(): + # Add custom nodes + add_node(EnhancedTransformNode, category='Action') + add_node(LookAtNode, category='Action') + + # Register newly added nodes + arm.nodes_logic.register_nodes()