Now only drawing navmesh if selected + properly serialized

This commit is contained in:
Antoine Pilote
2024-08-05 23:48:41 -04:00
parent 67b5a94613
commit ca1d17e058
8 changed files with 47 additions and 34 deletions

View File

@@ -367,11 +367,11 @@ public:
Nuake::NavManager::Get().PushMesh(mesh, transformComponent.GetGlobalTransform());
}
}
auto recastConfig = RecastConfig(component);
recastConfig.Position = volumeTransformComponent.GetGlobalPosition();
NavManager::Get().BuildNavMesh(std::move(recastConfig));
}
auto recastConfig = RecastConfig(component);
recastConfig.Position = volumeTransformComponent.GetGlobalPosition();
component.NavMeshData = NavManager::Get().BuildNavMesh(std::move(recastConfig));
}
}

View File

@@ -54,24 +54,8 @@ void EditorLayer::OnUpdate()
if (m_EditorInterface->ShouldDrawNavMesh())
{
auto cam = Engine::GetCurrentScene()->m_EditorCamera;
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(glm::value_ptr(cam->GetPerspective()));
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(glm::value_ptr(cam->GetTransform()));
glDepthFunc(GL_LESS);
RenderCommand::Disable(RendererEnum::DEPTH_TEST);
Nuake::NavManager::Get().DrawNavMesh();
RenderCommand::Enable(RendererEnum::DEPTH_TEST);
Nuake::NavManager::Get().DrawNavMesh();
glDepthFunc(GL_GREATER);
Nuake::NavManager::Get().DrawNavMesh();
glDepthFunc(GL_LESS);
m_GizmoDrawer->DrawNavMesh(currentScene, true);
}
if (m_EditorInterface->ShouldDrawCollision())

View File

@@ -22,6 +22,7 @@
#include <src/Scene/Components/ParticleEmitterComponent.h>
#include <src/Scene/Components/BoneComponent.h>
#include <src/Scene/Components/AudioEmitterComponent.h>
#include <DetourDebugDraw.h>
GizmoDrawer::GizmoDrawer(EditorInterface* editor)
@@ -175,6 +176,23 @@ void GizmoDrawer::DrawAxis(Ref<Scene> scene, bool occluded)
}
}
void GizmoDrawer::DrawNavMesh(Ref<Scene> scene, bool occluded)
{
auto cam = Engine::GetCurrentScene()->m_EditorCamera;
auto navVolumesView = scene->m_Registry.view<TransformComponent, NavMeshVolumeComponent>();
for (auto e : navVolumesView)
{
if (!IsEntityInSelection(Nuake::Entity{ (entt::entity)e, scene.get() }))
{
continue;
}
auto [transform, navmesh] = scene->m_Registry.get<TransformComponent, NavMeshVolumeComponent>(e);
duDebugDrawNavMesh(&m_DebugDrawer, *navmesh.NavMeshData->GetNavMesh(), DU_DRAWNAVMESH_OFFMESHCONS);
}
}
void GizmoDrawer::DrawGizmos(Ref<Scene> scene, bool occluded)
{
using namespace Nuake;

View File

@@ -11,7 +11,7 @@
#include "Gizmos/CapsuleGizmo.h"
#include "Gizmos/CylinderGizmo.h"
#include "../Windows/EditorInterface.h"
#include "src/AI/NavMeshDebugDrawer.h"
using namespace Nuake;
@@ -20,7 +20,7 @@ class GizmoDrawer
private:
EditorInterface* m_Editor;
Shader* m_LineShader;
NavMeshDebugDrawer m_DebugDrawer;
std::map<std::string, Ref<Model>> m_Gizmos;
std::map<uint32_t, Scope<CapsuleGizmo>> m_CapsuleGizmo;
std::map<uint32_t, Scope<CylinderGizmo>> m_CylinderGizmo;
@@ -54,8 +54,8 @@ public:
~GizmoDrawer() = default;
void DrawGizmos(Ref<Scene> scene, bool occluded);
void DrawAxis(Ref<Scene> scene, bool occlude);
void DrawAxis(Ref<Scene> scene, bool occluded);
void DrawNavMesh(Ref<Scene> scene, bool occluded);
private:
void GenerateSphereGizmo();
bool IsEntityInSelection(Nuake::Entity entity);