From 174e4d3329f45a250024699cd4ab672a708413d3 Mon Sep 17 00:00:00 2001 From: marauder2k7 Date: Sun, 7 Jun 2026 02:39:25 +0100 Subject: [PATCH] Update joltPlayer.cpp player should output sensors in overlapobjects so triggers can fire return jumping... --- Engine/source/T3D/physics/jolt/joltPlayer.cpp | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Engine/source/T3D/physics/jolt/joltPlayer.cpp b/Engine/source/T3D/physics/jolt/joltPlayer.cpp index 9836f70b9..035df8d30 100644 --- a/Engine/source/T3D/physics/jolt/joltPlayer.cpp +++ b/Engine/source/T3D/physics/jolt/joltPlayer.cpp @@ -166,6 +166,7 @@ Point3F JoltPlayer::move(const VectorF& displacement, CollisionList& outCol) JPH::Vec3 velocity = joltCast(displacement) / dt; const auto& system = mWorld->getPhysicsSystem(); + const JPH::Vec3 up = mCharacter->GetUp(); mCharacter->UpdateGroundVelocity(); @@ -177,7 +178,8 @@ Point3F JoltPlayer::move(const VectorF& displacement, CollisionList& outCol) JPH::Vec3 horizontalVel(velocity.GetX(), velocity.GetY(), 0.0f); mAllowSliding = horizontalVel.Length() > 0.01f; - velocity.SetZ(0.0f); + if (velocity.GetZ() < 0.05f) + velocity.SetZ(0.00f); JPH::Vec3 groundVel = mCharacter->GetGroundVelocity(); // Threshold raised to filter static-surface floating-point residuals. @@ -309,6 +311,27 @@ void JoltPlayer::findContact(SceneObject** contactObject, VectorF* contactNormal for (const JPH::CharacterVirtual::Contact& c : mCharacter->GetActiveContacts()) { + if (c.mBodyB.IsInvalid()) + continue; + + if (c.mIsSensorB) + { + JPH::BodyLockRead lock(mWorld->getPhysicsSystem()->GetBodyLockInterface(), c.mBodyB); + if (!lock.Succeeded()) + continue; + + const JPH::Body& body = lock.GetBody(); + PhysicsUserData* ud = (PhysicsUserData*)body.GetUserData(); + if (!ud) + continue; + + SceneObject* obj = ud->getObject(); + if (obj && !outOverlapObjects->contains(obj)) + outOverlapObjects->push_back(obj); + continue; // do not use for physical contact normal + } + + if (c.mHadCollision) { JPH::BodyLockRead lock(mWorld->getPhysicsSystem()->GetBodyLockInterface(), c.mBodyB);