local option

This commit is contained in:
Simonrazer 2019-03-29 15:23:57 +01:00
parent a83a1bc873
commit c12a4367dd
7 changed files with 44 additions and 7 deletions

View file

@ -13,12 +13,22 @@ class ApplyForceNode extends LogicNode {
override function run(from:Int) {
var object:Object = inputs[1].get();
var force:Vec4 = inputs[2].get();
var local:Bool = inputs[3].get();
var look:Vec4; var right:Vec4; var up:Vec4;
if (object == null || force == null) return;
#if arm_physics
var rb:RigidBody = object.getTrait(RigidBody);
if (!local) {
rb.applyForce(force);
}
else {
look = object.transform.world.look().mult(force.x);
right = object.transform.world.right().mult(force.y);
up = object.transform.world.up().mult(force.z);
rb.applyForce(look); rb.applyImpulse(right); rb.applyImpulse(up);
}
#end
runOutput(0);

View file

@ -13,12 +13,22 @@ class ApplyImpulseNode extends LogicNode {
override function run(from:Int) {
var object:Object = inputs[1].get();
var impulse:Vec4 = inputs[2].get();
var local:Bool = inputs[3].get();
var look:Vec4; var right:Vec4; var up:Vec4;
if (object == null || impulse == null) return;
#if arm_physics
var rb:RigidBody = object.getTrait(RigidBody);
if (!local) {
rb.applyImpulse(impulse);
}
else {
look = object.transform.world.look().mult(impulse.x);
right = object.transform.world.right().mult(impulse.y);
up = object.transform.world.up().mult(impulse.z);
rb.applyImpulse(look); rb.applyImpulse(right); rb.applyImpulse(up);
}
#end
runOutput(0);

View file

@ -14,12 +14,25 @@ class TranslateObjectNode extends LogicNode {
override function run(from:Int) {
var object:Object = inputs[1].get();
var vec:Vec4 = inputs[2].get();
var local:Bool = inputs[3].get();
var look:Vec4; var right:Vec4; var up:Vec4;
if (object == null || vec == null) return;
if(!local) {
object.transform.loc.add(vec);
object.transform.buildMatrix();
}
else {
look = object.transform.world.look().mult(vec.x);
right = object.transform.world.right().mult(vec.y);
up = object.transform.world.up().mult(vec.z);
object.transform.loc.add(look);
object.transform.loc.add(right);
object.transform.loc.add(up);
object.transform.buildMatrix();
}
#if arm_physics
var rigidBody = object.getTrait(RigidBody);
if (rigidBody != null) rigidBody.syncTransform();
@ -27,4 +40,11 @@ class TranslateObjectNode extends LogicNode {
runOutput(0);
}
function multVecs(a:Vec4, b:Vec4):Vec4{
var r; r = new Vec4();
r.x=a.x*b.x;
r.y=a.y*b.y;
r.z=a.z*b.z;
return r;
}
}

View file

@ -25,12 +25,6 @@ class TranslateOnLocalAxisNode extends LogicNode {
else if (l == 2) loc.setFrom(object.transform.world.up());
else if (l == 3) loc.setFrom(object.transform.world.right());
if (ini) {
loc.x = -loc.x;
loc.y = -loc.y;
loc.z = -loc.z;
}
vec.x = loc.x * sp;
vec.y = loc.y * sp;
vec.z = loc.z * sp;

View file

@ -13,6 +13,7 @@ class TranslateObjectNode(Node, ArmLogicTreeNode):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('ArmNodeSocketObject', 'Object')
self.inputs.new('NodeSocketVector', 'Vector')
self.inputs.new('NodeSocketBool', 'On Local Axis')
self.outputs.new('ArmNodeSocketAction', 'Out')
add_node(TranslateObjectNode, category='Action')

View file

@ -13,6 +13,7 @@ class ApplyForceNode(Node, ArmLogicTreeNode):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('ArmNodeSocketObject', 'Object')
self.inputs.new('NodeSocketVector', 'Force')
self.inputs.new('NodeSocketBool', 'On Local Axis')
self.outputs.new('ArmNodeSocketAction', 'Out')
add_node(ApplyForceNode, category='Physics')

View file

@ -13,6 +13,7 @@ class ApplyImpulseNode(Node, ArmLogicTreeNode):
self.inputs.new('ArmNodeSocketAction', 'In')
self.inputs.new('ArmNodeSocketObject', 'Object')
self.inputs.new('NodeSocketVector', 'Impulse')
self.inputs.new('NodeSocketBool', 'On Local Axis')
self.outputs.new('ArmNodeSocketAction', 'Out')
add_node(ApplyImpulseNode, category='Physics')