From dad7d76dc844adcd6a3e3f66432cb7bd05a71941 Mon Sep 17 00:00:00 2001 From: Simonrazer Date: Tue, 9 Apr 2019 17:15:20 +0200 Subject: [PATCH] at location local --- .../armory/logicnode/ApplyForceAtLocationNode.hx | 13 ++++++++++++- Sources/armory/logicnode/ApplyForceNode.hx | 8 ++++---- .../armory/logicnode/ApplyImpulseAtLocationNode.hx | 12 +++++++++++- Sources/armory/logicnode/ApplyImpulseNode.hx | 4 ++-- Sources/armory/logicnode/TranslateObjectNode.hx | 4 ++-- .../logicnode/physics_apply_force_at_location.py | 1 + .../logicnode/physics_apply_impulse_at_location.py | 1 + 7 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Sources/armory/logicnode/ApplyForceAtLocationNode.hx b/Sources/armory/logicnode/ApplyForceAtLocationNode.hx index 31f8cc12..8bb0202b 100644 --- a/Sources/armory/logicnode/ApplyForceAtLocationNode.hx +++ b/Sources/armory/logicnode/ApplyForceAtLocationNode.hx @@ -14,12 +14,23 @@ class ApplyForceAtLocationNode extends LogicNode { var object:Object = inputs[1].get(); var force:Vec4 = inputs[2].get(); var location:Vec4 = inputs[3].get(); + var local:Bool = inputs.length > 3 ? inputs[3].get() : false; if (object == null || force == null || location == null) return; #if arm_physics var rb:RigidBody = object.getTrait(RigidBody); - rb.applyForce(force, location); + if (!local) { + rb.applyForce(force, location); + } + else { + var look = object.transform.world.look().mult(force.y); + var right = object.transform.world.right().mult(force.x); + var up = object.transform.world.up().mult(force.z); + rb.applyForce(look, location); + rb.applyForce(right, location); + rb.applyForce(up, location); + } #end runOutput(0); diff --git a/Sources/armory/logicnode/ApplyForceNode.hx b/Sources/armory/logicnode/ApplyForceNode.hx index 30c50778..3a6db995 100644 --- a/Sources/armory/logicnode/ApplyForceNode.hx +++ b/Sources/armory/logicnode/ApplyForceNode.hx @@ -23,12 +23,12 @@ class ApplyForceNode extends LogicNode { rb.applyForce(force); } else { - var look = object.transform.world.look().mult(force.x); - var right = object.transform.world.right().mult(force.y); + var look = object.transform.world.look().mult(force.y); + var right = object.transform.world.right().mult(force.x); var up = object.transform.world.up().mult(force.z); rb.applyForce(look); - rb.applyImpulse(right); - rb.applyImpulse(up); + rb.applyForce(right); + rb.applyForce(up); } #end diff --git a/Sources/armory/logicnode/ApplyImpulseAtLocationNode.hx b/Sources/armory/logicnode/ApplyImpulseAtLocationNode.hx index 68d5f3d5..7f500f95 100644 --- a/Sources/armory/logicnode/ApplyImpulseAtLocationNode.hx +++ b/Sources/armory/logicnode/ApplyImpulseAtLocationNode.hx @@ -14,12 +14,22 @@ class ApplyImpulseAtLocationNode extends LogicNode { var object:Object = inputs[1].get(); var impulse:Vec4 = inputs[2].get(); var location:Vec4 = inputs[3].get(); + var local:Bool = inputs.length > 3 ? inputs[3].get() : false; if (object == null || impulse == null || location == null) return; #if arm_physics var rb:RigidBody = object.getTrait(RigidBody); - rb.applyImpulse(impulse, location); + if (!local) { + rb.applyImpulse(impulse, location); } + else { + var look = object.transform.world.look().mult(impulse.y); + var right = object.transform.world.right().mult(impulse.x); + var up = object.transform.world.up().mult(impulse.z); + rb.applyImpulse(look, location); + rb.applyImpulse(right, location); + rb.applyImpulse(up, location); + } #end runOutput(0); diff --git a/Sources/armory/logicnode/ApplyImpulseNode.hx b/Sources/armory/logicnode/ApplyImpulseNode.hx index 5c0e5795..cd55297e 100644 --- a/Sources/armory/logicnode/ApplyImpulseNode.hx +++ b/Sources/armory/logicnode/ApplyImpulseNode.hx @@ -23,8 +23,8 @@ class ApplyImpulseNode extends LogicNode { rb.applyImpulse(impulse); } else { - var look = object.transform.world.look().mult(impulse.x); - var right = object.transform.world.right().mult(impulse.y); + var look = object.transform.world.look().mult(impulse.y); + var right = object.transform.world.right().mult(impulse.x); var up = object.transform.world.up().mult(impulse.z); rb.applyImpulse(look); rb.applyImpulse(right); diff --git a/Sources/armory/logicnode/TranslateObjectNode.hx b/Sources/armory/logicnode/TranslateObjectNode.hx index 10aa5a9a..dce3af73 100644 --- a/Sources/armory/logicnode/TranslateObjectNode.hx +++ b/Sources/armory/logicnode/TranslateObjectNode.hx @@ -23,8 +23,8 @@ class TranslateObjectNode extends LogicNode { object.transform.buildMatrix(); } else { - var look = object.transform.world.look().mult(vec.x); - var right = object.transform.world.right().mult(vec.y); + var look = object.transform.world.look().mult(vec.y); + var right = object.transform.world.right().mult(vec.x); var up = object.transform.world.up().mult(vec.z); object.transform.loc.add(look); object.transform.loc.add(right); diff --git a/blender/arm/logicnode/physics_apply_force_at_location.py b/blender/arm/logicnode/physics_apply_force_at_location.py index 26e195cc..86b7b670 100644 --- a/blender/arm/logicnode/physics_apply_force_at_location.py +++ b/blender/arm/logicnode/physics_apply_force_at_location.py @@ -14,6 +14,7 @@ class ApplyForceAtLocationNode(Node, ArmLogicTreeNode): self.inputs.new('ArmNodeSocketObject', 'Object') self.inputs.new('NodeSocketVector', 'Force') self.inputs.new('NodeSocketVector', 'Location') + self.inputs.new('NodeSocketBool', 'On Local Axis') self.outputs.new('ArmNodeSocketAction', 'Out') add_node(ApplyForceAtLocationNode, category='Physics') diff --git a/blender/arm/logicnode/physics_apply_impulse_at_location.py b/blender/arm/logicnode/physics_apply_impulse_at_location.py index 7ff3447b..b719f32c 100644 --- a/blender/arm/logicnode/physics_apply_impulse_at_location.py +++ b/blender/arm/logicnode/physics_apply_impulse_at_location.py @@ -14,6 +14,7 @@ class ApplyImpulseAtLocationNode(Node, ArmLogicTreeNode): self.inputs.new('ArmNodeSocketObject', 'Object') self.inputs.new('NodeSocketVector', 'Impulse') self.inputs.new('NodeSocketVector', 'Location') + self.inputs.new('NodeSocketBool', 'On Local Axis') self.outputs.new('ArmNodeSocketAction', 'Out') add_node(ApplyImpulseAtLocationNode, category='Physics') \ No newline at end of file