Add support for navmesh on spline collider

This commit is contained in:
Wojtek Figat
2021-02-12 11:15:51 +01:00
parent 80e2aee92b
commit 0e78d13146
3 changed files with 34 additions and 0 deletions

View File

@@ -16,6 +16,7 @@
#include "Engine/Physics/Colliders/SphereCollider.h"
#include "Engine/Physics/Colliders/CapsuleCollider.h"
#include "Engine/Physics/Colliders/MeshCollider.h"
#include "Engine/Physics/Colliders/SplineCollider.h"
#include "Engine/Threading/ThreadPoolTask.h"
#include "Engine/Terrain/TerrainPatch.h"
#include "Engine/Terrain/Terrain.h"
@@ -259,6 +260,18 @@ struct NavigationSceneRasterization
e.RasterizeTriangles();
}
else if (const auto* splineCollider = dynamic_cast<SplineCollider*>(actor))
{
PROFILE_CPU_NAMED("SplineCollider");
auto collisionData = splineCollider->CollisionData.Get();
if (!collisionData || collisionData->WaitForLoaded())
return true;
splineCollider->ExtractGeometry(vb, ib);
e.RasterizeTriangles();
}
else if (const auto* terrain = dynamic_cast<Terrain*>(actor))
{
PROFILE_CPU_NAMED("Terrain");

View File

@@ -35,6 +35,16 @@ void SplineCollider::SetPreRotation(const Quaternion& value)
UpdateGeometry();
}
#if USE_EDITOR
void SplineCollider::ExtractGeometry(Array<Vector3>& vertexBuffer, Array<int32>& indexBuffer) const
{
vertexBuffer.Add(_vertexBuffer);
indexBuffer.Add(_indexBuffer);
}
#endif
void SplineCollider::OnCollisionDataChanged()
{
// This should not be called during physics simulation, if it happened use write lock on physx scene

View File

@@ -42,6 +42,17 @@ public:
/// </summary>
API_PROPERTY() void SetPreRotation(const Quaternion& value);
#if USE_EDITOR
/// <summary>
/// Extracts the collision data geometry into list of triangles.
/// </summary>
/// <param name="vertexBuffer">The output vertex buffer.</param>
/// <param name="indexBuffer">The output index buffer.</param>
void ExtractGeometry(Array<Vector3>& vertexBuffer, Array<int32>& indexBuffer) const;
#endif
private:
void OnCollisionDataChanged();