From 37dfdad7e2d45403ded63e37026c0c3cfe8d8222 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sat, 17 Feb 2024 20:22:40 +0100 Subject: [PATCH] Minor improvements to character controller #1935 --- Source/Engine/Physics/Colliders/CharacterController.cpp | 8 ++------ Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Source/Engine/Physics/Colliders/CharacterController.cpp b/Source/Engine/Physics/Colliders/CharacterController.cpp index 38ab0394d..e9f86ebab 100644 --- a/Source/Engine/Physics/Colliders/CharacterController.cpp +++ b/Source/Engine/Physics/Colliders/CharacterController.cpp @@ -280,12 +280,8 @@ void CharacterController::OnActiveTransformChanged() // Change actor transform (but with locking) ASSERT(!_isUpdatingTransform); _isUpdatingTransform = true; - Transform transform; - PhysicsBackend::GetRigidActorPose(PhysicsBackend::GetShapeActor(_shape), transform.Translation, transform.Orientation); - transform.Translation -= _center; - transform.Orientation = _transform.Orientation; - transform.Scale = _transform.Scale; - SetTransform(transform); + const Vector3 position = PhysicsBackend::GetControllerPosition(_controller) - _center; + SetPosition(position); _isUpdatingTransform = false; UpdateBounds(); diff --git a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp index 9d0d2ea16..75c088db7 100644 --- a/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp +++ b/Source/Engine/Physics/PhysX/PhysicsBackendPhysX.cpp @@ -3008,7 +3008,7 @@ void* PhysicsBackend::CreateController(void* scene, IPhysicsActor* actor, Physic desc.material = DefaultMaterial; const float minSize = 0.001f; desc.height = Math::Max(height, minSize); - desc.radius = Math::Max(radius - desc.contactOffset, minSize); + desc.radius = Math::Max(radius - Math::Max(contactOffset, 0.0f), minSize); desc.stepOffset = Math::Min(stepOffset, desc.height + desc.radius * 2.0f - minSize); auto controllerPhysX = (PxCapsuleController*)scenePhysX->ControllerManager->createController(desc); PxRigidActor* actorPhysX = controllerPhysX->getActor();