Add leenkx/Sources/leenkx/logicnode/AnyContactNode.hx
This commit is contained in:
48
leenkx/Sources/leenkx/logicnode/AnyContactNode.hx
Normal file
48
leenkx/Sources/leenkx/logicnode/AnyContactNode.hx
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package leenkx.logicnode;
|
||||||
|
|
||||||
|
import iron.object.Object;
|
||||||
|
import leenkx.trait.physics.RigidBody;
|
||||||
|
|
||||||
|
class AnyContactNode extends LogicNode {
|
||||||
|
|
||||||
|
public var property0: String;
|
||||||
|
|
||||||
|
var lastContact = false;
|
||||||
|
|
||||||
|
public function new(tree: LogicTree) {
|
||||||
|
super(tree);
|
||||||
|
tree.notifyOnUpdate(update);
|
||||||
|
}
|
||||||
|
|
||||||
|
function update() {
|
||||||
|
var object1: Object = inputs[0].get();
|
||||||
|
if (object1 == null) object1 = tree.object;
|
||||||
|
if (object1 == null) return;
|
||||||
|
|
||||||
|
var contact = false;
|
||||||
|
|
||||||
|
#if lnx_physics
|
||||||
|
var rb1 = leenkx.trait.physics.PhysicsWorld.getCachedRigidBody(object1);
|
||||||
|
if (rb1 != null) {
|
||||||
|
var physics = leenkx.trait.physics.PhysicsWorld.active;
|
||||||
|
var rbs = physics.getContacts(rb1);
|
||||||
|
|
||||||
|
contact = (rbs != null && rbs.length > 0);
|
||||||
|
}
|
||||||
|
#end
|
||||||
|
|
||||||
|
var shouldTrigger = false;
|
||||||
|
switch (property0) {
|
||||||
|
case "begin":
|
||||||
|
shouldTrigger = contact && !lastContact;
|
||||||
|
case "overlap":
|
||||||
|
shouldTrigger = contact;
|
||||||
|
case "end":
|
||||||
|
shouldTrigger = !contact && lastContact;
|
||||||
|
}
|
||||||
|
|
||||||
|
lastContact = contact;
|
||||||
|
|
||||||
|
if (shouldTrigger) runOutput(0);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user