Fix crash when using physics overlap tests with Collider outputs that catch Terrain
#3221
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#include "PhysicalMaterial.h"
|
||||
#include "PhysicsSettings.h"
|
||||
#include "PhysicsStatistics.h"
|
||||
#include "Colliders/Collider.h"
|
||||
#include "Engine/Engine/Time.h"
|
||||
#include "Engine/Engine/EngineService.h"
|
||||
#include "Engine/Profiler/ProfilerCPU.h"
|
||||
@@ -630,22 +631,66 @@ bool PhysicsScene::CheckConvex(const Vector3& center, const CollisionData* conve
|
||||
|
||||
bool PhysicsScene::OverlapBox(const Vector3& center, const Vector3& halfExtents, Array<Collider*>& results, const Quaternion& rotation, uint32 layerMask, bool hitTriggers)
|
||||
{
|
||||
return PhysicsBackend::OverlapBox(_scene, center, halfExtents, results, rotation, layerMask, hitTriggers);
|
||||
Array<PhysicsColliderActor*> tmp;
|
||||
if (PhysicsBackend::OverlapBox(_scene, center, halfExtents, tmp, rotation, layerMask, hitTriggers))
|
||||
{
|
||||
results.EnsureCapacity(tmp.Count());
|
||||
for (PhysicsColliderActor* e : tmp)
|
||||
{
|
||||
if (e && e->Is<Collider>())
|
||||
results.Add((Collider*)e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PhysicsScene::OverlapSphere(const Vector3& center, const float radius, Array<Collider*>& results, uint32 layerMask, bool hitTriggers)
|
||||
{
|
||||
return PhysicsBackend::OverlapSphere(_scene, center, radius, results, layerMask, hitTriggers);
|
||||
Array<PhysicsColliderActor*> tmp;
|
||||
if (PhysicsBackend::OverlapSphere(_scene, center, radius, tmp, layerMask, hitTriggers))
|
||||
{
|
||||
results.EnsureCapacity(tmp.Count());
|
||||
for (PhysicsColliderActor* e : tmp)
|
||||
{
|
||||
if (e && e->Is<Collider>())
|
||||
results.Add((Collider*)e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PhysicsScene::OverlapCapsule(const Vector3& center, const float radius, const float height, Array<Collider*>& results, const Quaternion& rotation, uint32 layerMask, bool hitTriggers)
|
||||
{
|
||||
return PhysicsBackend::OverlapCapsule(_scene, center, radius, height, results, rotation, layerMask, hitTriggers);
|
||||
Array<PhysicsColliderActor*> tmp;
|
||||
if (PhysicsBackend::OverlapCapsule(_scene, center, radius, height, tmp, rotation, layerMask, hitTriggers))
|
||||
{
|
||||
results.EnsureCapacity(tmp.Count());
|
||||
for (PhysicsColliderActor* e : tmp)
|
||||
{
|
||||
if (e && e->Is<Collider>())
|
||||
results.Add((Collider*)e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PhysicsScene::OverlapConvex(const Vector3& center, const CollisionData* convexMesh, const Vector3& scale, Array<Collider*>& results, const Quaternion& rotation, uint32 layerMask, bool hitTriggers)
|
||||
{
|
||||
return PhysicsBackend::OverlapConvex(_scene, center, convexMesh, scale, results, rotation, layerMask, hitTriggers);
|
||||
Array<PhysicsColliderActor*> tmp;
|
||||
if (PhysicsBackend::OverlapConvex(_scene, center, convexMesh, scale, tmp, rotation, layerMask, hitTriggers))
|
||||
{
|
||||
results.EnsureCapacity(tmp.Count());
|
||||
for (PhysicsColliderActor* e : tmp)
|
||||
{
|
||||
if (e && e->Is<Collider>())
|
||||
results.Add((Collider*)e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PhysicsScene::OverlapBox(const Vector3& center, const Vector3& halfExtents, Array<PhysicsColliderActor*>& results, const Quaternion& rotation, uint32 layerMask, bool hitTriggers)
|
||||
|
||||
Reference in New Issue
Block a user