2018-12-07 13:48:28 +01:00
|
|
|
package armory.logicnode;
|
|
|
|
|
|
|
|
import iron.object.Object;
|
|
|
|
import armory.trait.physics.RigidBody;
|
|
|
|
|
|
|
|
class OnContactArrayNode extends LogicNode {
|
|
|
|
|
2019-12-19 23:54:08 +01:00
|
|
|
public var property0: String;
|
2018-12-07 13:48:28 +01:00
|
|
|
var lastContact = false;
|
|
|
|
|
2019-12-19 23:54:08 +01:00
|
|
|
public function new(tree: LogicTree) {
|
2018-12-07 13:48:28 +01:00
|
|
|
super(tree);
|
|
|
|
|
|
|
|
tree.notifyOnUpdate(update);
|
|
|
|
}
|
|
|
|
|
|
|
|
function update() {
|
2019-12-19 23:54:08 +01:00
|
|
|
var object1: Object = inputs[0].get();
|
|
|
|
var objects: Array<Object> = inputs[1].get();
|
2018-12-07 13:48:28 +01:00
|
|
|
|
|
|
|
if (object1 == null) object1 = tree.object;
|
|
|
|
if (objects == null)return;
|
|
|
|
|
|
|
|
var contact = false;
|
|
|
|
|
|
|
|
#if arm_physics
|
|
|
|
var physics = armory.trait.physics.PhysicsWorld.active;
|
|
|
|
var rb1 = object1.getTrait(RigidBody);
|
|
|
|
var rbs = physics.getContacts(rb1);
|
|
|
|
if (rb1 != null && rbs != null) {
|
|
|
|
for (object2 in objects) {
|
|
|
|
var rb2 = object2.getTrait(RigidBody);
|
|
|
|
for (rb in rbs) {
|
|
|
|
if (rb == rb2) {
|
|
|
|
contact = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (contact) break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#end
|
|
|
|
|
|
|
|
var b = false;
|
|
|
|
switch (property0) {
|
2020-11-17 21:55:53 +01:00
|
|
|
case "begin":
|
2018-12-07 13:48:28 +01:00
|
|
|
b = contact && !lastContact;
|
2020-11-17 21:55:53 +01:00
|
|
|
case "overlap":
|
2018-12-07 13:48:28 +01:00
|
|
|
b = contact;
|
2020-11-18 17:50:24 +01:00
|
|
|
case "end":
|
|
|
|
b = !contact && lastContact;
|
2018-12-07 13:48:28 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
lastContact = contact;
|
|
|
|
|
|
|
|
if (b) runOutput(0);
|
|
|
|
}
|
|
|
|
}
|