Skip to content

Commit bf21b56

Browse files
committed
Add debug drawing of Triggers
1 parent 92af2ef commit bf21b56

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

Source/Game-Lib/Game-Lib/ECS/Systems/UpdateProximityTriggers.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212
#include "Game-Lib/ECS/Util/MessageBuilderUtil.h"
1313
#include "Game-Lib/ECS/Util/Transforms.h"
1414
#include "Game-Lib/ECS/Util/Network/NetworkUtil.h"
15+
#include "Game-Lib/Rendering/Debug/DebugRenderer.h"
16+
#include "Game-Lib/Rendering/GameRenderer.h"
1517
#include "Game-Lib/Scripting/Util/ZenithUtil.h"
1618

19+
#include <Base/CVarSystem/CVarSystem.h>
1720
#include <Base/Memory/Bytebuffer.h>
1821
#include <Base/Util/DebugHandler.h>
1922

@@ -28,6 +31,8 @@
2831
#include <entt/entt.hpp>
2932
#include <tracy/Tracy.hpp>
3033

34+
AutoCVar_ShowFlag CVAR_DebugDrawTriggers(CVarCategory::Client | CVarCategory::Rendering, "debugDrawTriggers", "debug draw triggers", ShowFlag::DISABLED);
35+
3136
namespace ECS::Systems
3237
{
3338
bool IsTransformInAABB(const Components::Transform& transform, const Components::WorldAABB& aabb)
@@ -143,5 +148,29 @@ namespace ECS::Systems
143148
proximityTrigger.playersInside.erase(playerEntity);
144149
triggerList.erase(triggerEntity);
145150
}
151+
152+
// Debug draw triggers
153+
if (CVAR_DebugDrawTriggers.Get() == ShowFlag::ENABLED)
154+
{
155+
DebugRenderer* debugRenderer = ServiceLocator::GetGameRenderer()->GetDebugRenderer();
156+
157+
auto triggersView = registry.view<Components::Transform, Components::AABB, Components::ProximityTrigger>();
158+
triggersView.each([&](entt::entity triggerEntity, Components::Transform triggerTransform, Components::AABB& triggerAABB, Components::ProximityTrigger& proximityTrigger)
159+
{
160+
vec3 position = triggerTransform.GetWorldPosition();
161+
Color color = proximityTrigger.playersInside.contains(playerEntity) ? Color::Green : Color::Red;
162+
163+
bool isAABBTrigger = false; // For when we support spherical AABBs
164+
if (isAABBTrigger)
165+
{
166+
debugRenderer->DrawAABB3D(position, triggerAABB.extents, color);
167+
}
168+
else
169+
{
170+
f32 radius = glm::max(glm::max(triggerAABB.extents.x, triggerAABB.extents.y), triggerAABB.extents.z); // Probably get the radius in a better way if we have proper spherical triggers
171+
debugRenderer->DrawSphere3D(position, radius, 8, color);
172+
}
173+
});
174+
}
146175
}
147176
}

0 commit comments

Comments
 (0)