added checkbox to enable on called on any object on has contact and on on contact nodes so users has less work to do to make to trigger on any object

This commit is contained in:
vuaieo
2025-08-17 04:00:08 +02:00
parent 8ac567b57b
commit 4492995a59
4 changed files with 83 additions and 12 deletions

View File

@ -5,21 +5,41 @@ import leenkx.trait.physics.RigidBody;
class HasContactNode extends LogicNode {
public var property0: Bool; // "any object" checkbox
public function new(tree: LogicTree) {
super(tree);
}
override function get(from: Int): Dynamic {
var object1: Object = inputs[0].get();
var object2: Object = inputs[1].get();
if (object1 == null || object2 == null) return false;
if (object1 == null) return false;
#if lnx_physics
var physics = leenkx.trait.physics.PhysicsWorld.active;
var rb2 = object2.getTrait(RigidBody);
var rbs = physics.getContacts(object1.getTrait(RigidBody));
if (rbs != null) for (rb in rbs) if (rb == rb2) return true;
var rb1 = object1.getTrait(RigidBody);
if (rb1 != null) {
var rbs = physics.getContacts(rb1);
if (rbs != null) {
// If "any object" is enabled, check for any contact
if (property0) {
return rbs.length > 0;
} else {
// Original logic: check for specific object contact
// Only try to get object2 if we have a second input
if (inputs.length > 1) {
var object2: Object = inputs[1].get();
if (object2 == null) return false;
var rb2 = object2.getTrait(RigidBody);
for (rb in rbs) {
if (rb == rb2) return true;
}
}
}
}
}
#end
return false;
}

View File

@ -6,6 +6,7 @@ import leenkx.trait.physics.RigidBody;
class OnContactNode extends LogicNode {
public var property0: String;
public var property1: Bool; // "on any object" checkbox
var lastContact = false;
public function new(tree: LogicTree) {
@ -16,10 +17,8 @@ class OnContactNode extends LogicNode {
function update() {
var object1: Object = inputs[0].get();
var object2: Object = inputs[1].get();
if (object1 == null) object1 = tree.object;
if (object2 == null) object2 = tree.object;
var contact = false;
@ -29,11 +28,23 @@ class OnContactNode extends LogicNode {
if (rb1 != null) {
var rbs = physics.getContacts(rb1);
if (rbs != null) {
var rb2 = object2.getTrait(RigidBody);
for (rb in rbs) {
if (rb == rb2) {
contact = true;
break;
// If "on any object" is enabled, check for any contact
if (property1) {
contact = rbs.length > 0;
} else {
// Original logic: check for specific object contact
// Only try to get object2 if we have a second input
if (inputs.length > 1) {
var object2: Object = inputs[1].get();
if (object2 == null) object2 = tree.object;
var rb2 = object2.getTrait(RigidBody);
for (rb in rbs) {
if (rb == rb2) {
contact = true;
break;
}
}
}
}
}