armory/Sources/armory/logicnode/ApplyImpulseNode.hx

38 lines
860 B
Haxe
Raw Normal View History

2017-04-04 23:11:31 +02:00
package armory.logicnode;
2017-11-20 15:16:52 +01:00
import iron.object.Object;
import iron.math.Vec4;
2017-09-30 00:32:06 +02:00
import armory.trait.physics.RigidBody;
2017-04-04 23:11:31 +02:00
2017-04-08 20:05:35 +02:00
class ApplyImpulseNode extends LogicNode {
2017-04-04 23:11:31 +02:00
public function new(tree:LogicTree) {
super(tree);
}
2018-10-22 10:10:33 +02:00
override function run(from:Int) {
2017-04-04 23:11:31 +02:00
var object:Object = inputs[1].get();
var impulse:Vec4 = inputs[2].get();
2019-04-06 19:15:43 +02:00
var local:Bool = inputs.length > 3 ? inputs[3].get() : false;
2017-04-04 23:11:31 +02:00
2018-06-14 14:52:05 +02:00
if (object == null || impulse == null) return;
2017-04-04 23:11:31 +02:00
#if arm_physics
var rb:RigidBody = object.getTrait(RigidBody);
2019-03-29 15:23:57 +01:00
if (!local) {
2019-04-06 19:15:43 +02:00
rb.applyImpulse(impulse);
2019-03-29 15:23:57 +01:00
}
else {
2019-04-09 17:15:20 +02:00
var look = object.transform.world.look().mult(impulse.y);
var right = object.transform.world.right().mult(impulse.x);
2019-04-06 19:15:43 +02:00
var up = object.transform.world.up().mult(impulse.z);
rb.applyImpulse(look);
rb.applyImpulse(right);
rb.applyImpulse(up);
2019-03-29 15:23:57 +01:00
}
2017-04-04 23:11:31 +02:00
#end
2018-10-22 10:10:33 +02:00
runOutput(0);
2017-04-04 23:11:31 +02:00
}
}