diff --git a/leenkx/Sources/leenkx/logicnode/AnyContactNode.hx b/leenkx/Sources/leenkx/logicnode/AnyContactNode.hx new file mode 100644 index 0000000..97a58b3 --- /dev/null +++ b/leenkx/Sources/leenkx/logicnode/AnyContactNode.hx @@ -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); + } +}