Added checkbox to enable and disable polygon collider vertex handles

This commit is contained in:
Simon Lübeß
2024-01-11 22:55:40 +01:00
parent 7cdc398494
commit 91cef7ad4b
@@ -51,6 +51,10 @@ namespace GlitchyEditor.EditWindows
Entity entity = _entityHierarchyWindow.GetSelectedEntity(0); Entity entity = _entityHierarchyWindow.GetSelectedEntity(0);
ShowComponents(entity); ShowComponents(entity);
} }
else
{
_editVerticesPolygonCollider2D = false;
}
ImGui.PopStyleVar(); ImGui.PopStyleVar();
ImGui.End(); ImGui.End();
@@ -83,16 +87,19 @@ namespace GlitchyEditor.EditWindows
static void ShowPolygonColliderSceneGUI(Entity entity, PolygonCollider2DComponent* collider) static void ShowPolygonColliderSceneGUI(Entity entity, PolygonCollider2DComponent* collider)
{ {
for (int i < collider.VertexCount) if (_editVerticesPolygonCollider2D)
{ {
Matrix localToWorld = entity.Transform.WorldTransform * Matrix.Translation(collider.Offset.X, collider.Offset.Y, 0); for (int i < collider.VertexCount)
Matrix transform = Matrix.Translation(float3(collider.Vertices[i], 0)) * localToWorld;
if (Handles.ShowGizmo(ref transform, .TRANSLATE_X | .TRANSLATE_Y, true, id: (int32)i))
{ {
transform = localToWorld.Invert() * transform; Matrix localToWorld = entity.Transform.WorldTransform * Matrix.Translation(collider.Offset.X, collider.Offset.Y, 0);
Matrix transform = Matrix.Translation(float3(collider.Vertices[i], 0)) * localToWorld;
collider.Vertices[i] = transform.Translation.XY;
if (Handles.ShowGizmo(ref transform, .TRANSLATE_X | .TRANSLATE_Y, true, id: (int32)i))
{
transform = localToWorld.Invert() * transform;
collider.Vertices[i] = transform.Translation.XY;
}
} }
} }
} }
@@ -488,7 +495,10 @@ namespace GlitchyEditor.EditWindows
if (ImGui.DragFloat("RestitutionThreshold", &restitutionThreshold, 0.0f, 0.1f, textWidth)) if (ImGui.DragFloat("RestitutionThreshold", &restitutionThreshold, 0.0f, 0.1f, textWidth))
circleCollider.RestitutionThreshold = restitutionThreshold; circleCollider.RestitutionThreshold = restitutionThreshold;
} }
/// If true handles for editing the vertices of the PolygonCollider2DComponent will be visible
private static bool _editVerticesPolygonCollider2D = false;
private static void ShowPolygonCollider2DComponentEditor(Entity entity, PolygonCollider2DComponent* polygonCollider) private static void ShowPolygonCollider2DComponentEditor(Entity entity, PolygonCollider2DComponent* polygonCollider)
{ {
float textWidth = ImGui.CalcTextSize("Offset".CStr()).x; float textWidth = ImGui.CalcTextSize("Offset".CStr()).x;
@@ -498,9 +508,10 @@ namespace GlitchyEditor.EditWindows
if (ImGui.EditFloat2("Offset", ref offset, .Zero, 0.1f, textWidth)) if (ImGui.EditFloat2("Offset", ref offset, .Zero, 0.1f, textWidth))
polygonCollider.Offset = offset; polygonCollider.Offset = offset;
// TODO: Handles in editor, etc...
if (ImGui.CollapsingHeader("Vertices")) if (ImGui.CollapsingHeader("Vertices"))
{ {
ImGui.Checkbox("Show Vertex gizmos", &_editVerticesPolygonCollider2D);
for (int i < polygonCollider.VertexCount) for (int i < polygonCollider.VertexCount)
{ {
ImGui.EditFloat2(scope $"{i}", ref polygonCollider.Vertices[i]); ImGui.EditFloat2(scope $"{i}", ref polygonCollider.Vertices[i]);