Update leenkx/Sources/leenkx/trait/physics/bullet/PhysicsWorld.hx

This commit is contained in:
2025-10-03 05:37:50 +00:00
parent 28579e14d7
commit 5c2d29d7ce

View File

@ -7,7 +7,6 @@ import iron.system.Time;
import iron.math.Vec4;
import iron.math.Quat;
import iron.math.RayCaster;
import iron.object.Object;
class Hit {
@ -73,10 +72,6 @@ class PhysicsWorld extends Trait {
public var convexHitNormalWorld = new Vec4();
var pairCache: Bool = false;
// Performance optimization: Global RigidBody trait cache
public static var rigidBodyCache: Map<Object, RigidBody> = new Map();
public static var cacheObjectRefs: Map<Object, Int> = new Map(); // Track trait counts
static var nullvec = true;
static var vec1: bullet.Bt.Vector3 = null;
static var vec2: bullet.Bt.Vector3 = null;
@ -150,36 +145,10 @@ class PhysicsWorld extends Trait {
iron.Scene.active.notifyOnRemove(function() {
sceneRemoved = true;
leenkx.trait.physics.PhysicsCache.clearCache();
});
}
public static function getCachedRigidBody(object: Object): RigidBody {
if (object == null) return null;
var shouldUpdate = false;
var cachedTraitCount = cacheObjectRefs.get(object);
if (cachedTraitCount == null || cachedTraitCount != object.traits.length) {
shouldUpdate = true;
} else if (rigidBodyCache.get(object) == null) {
var rb = object.getTrait(RigidBody);
if (rb != null) shouldUpdate = true;
}
if (shouldUpdate) {
var rb = object.getTrait(RigidBody);
rigidBodyCache.set(object, rb);
cacheObjectRefs.set(object, object.traits.length);
}
return rigidBodyCache.get(object);
}
public static inline function hasContactWith(contacts: Array<RigidBody>, target: RigidBody): Bool {
return contacts != null && target != null && contacts.indexOf(target) >= 0;
}
public function reset() {
for (rb in active.rbMap) removeRigidBody(rb);
}
@ -335,6 +304,8 @@ class PhysicsWorld extends Trait {
var t = Time.fixedStep * timeScale * Time.scale;
if (t == 0.0) return; // Simulation paused
leenkx.trait.physics.PhysicsCache.clearContactsCache();
#if lnx_debug
var startTime = kha.Scheduler.realTime();
#end