From f119acdb65ed5da5f4230685975d0e32cc646e46 Mon Sep 17 00:00:00 2001 From: Sri Sham Haran Date: Tue, 22 Nov 2022 21:15:18 +0800 Subject: [PATCH] collider tag panel --- .../ColliderTagPanel/SHColliderTagPanel.cpp | 62 +++++++++++++++++++ .../ColliderTagPanel/SHColliderTagPanel.h | 19 ++++++ .../EditorWindow/SHEditorWindowIncludes.h | 3 +- SHADE_Engine/src/Editor/SHEditor.cpp | 1 + 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp create mode 100644 SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.h diff --git a/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp new file mode 100644 index 00000000..5ff3842e --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp @@ -0,0 +1,62 @@ +#include "SHpch.h" +#include "SHColliderTagPanel.h" +#include "ECS_Base/Managers/SHSystemManager.h" +#include "Physics/Collision/SHCollisionTagMatrix.h" +#include "Editor/SHEditorWidgets.hpp" + +namespace SHADE +{ + + void SHColliderTagPanel::Update() + { + if (Begin()) + { + ImGui::BeginTable("CollisionMtxTable", SHCollisionTag::NUM_LAYERS + 1, ImGuiTableRowFlags_Headers); + ImGui::TableNextRow(); + for (int i = 0; i <= SHCollisionTag::NUM_LAYERS; ++i) + { + ImGui::TableNextColumn(); + if(i == 0) continue; + std::string const& tagName = SHCollisionTagMatrix::GetTagName(i- 1); + auto tag = SHCollisionTagMatrix::GetTag(i - 1); + if (!tag) + continue; + //ImGui::Text(tagName.data()); + SHEditorWidgets::InputText("##" + std::to_string(i), [i]{return SHCollisionTagMatrix::GetTagName(i- 1);}, [i](std::string const& value){SHCollisionTagMatrix::GetTag(i)->SetName(value);}, tagName.data(), ImGuiInputTextFlags_EnterReturnsTrue); + } + for (int i = SHCollisionTag::NUM_LAYERS - 1; i >= 0; --i) + { + std::string tagName = SHCollisionTagMatrix::GetTagName(i); + auto tag = SHCollisionTagMatrix::GetTag(i); + if(!tag) + continue; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::Text(tagName.data()); + for (int j = 0; j < SHCollisionTag::NUM_LAYERS - i; ++j) + { + std::string tagName2 = SHCollisionTagMatrix::GetTagName(j); + auto tag2 = SHCollisionTagMatrix::GetTag(j); + + if(!tag2) + continue; + + if(tagName.empty()) + tagName = std::to_string(i); + if(tagName2.empty()) + tagName2 = std::to_string(j); + + ImGui::TableNextColumn(); + //if(i == j) + // continue; + std::string_view label = std::format("##{} vs {}", tagName, tagName2).data(); + SHEditorWidgets::CheckBox(label, [tag, &j]{return tag->GetLayerState(j);}, [tag, i, j](bool const& value){tag->SetLayerState(j, value); SHCollisionTagMatrix::GetTag(j)->SetLayerState(i, value);}, label.substr(2)); + + } + } + ImGui::EndTable(); + } + ImGui::End(); + } + +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.h b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.h new file mode 100644 index 00000000..94d17a6d --- /dev/null +++ b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Editor/EditorWindow/SHEditorWindow.h" +#include + +namespace SHADE +{ + class SH_API SHColliderTagPanel final : public SHEditorWindow + { + public: + SHColliderTagPanel():SHEditorWindow("Collider Tag Panel", ImGuiWindowFlags_MenuBar), isDirty(false){} + //void Init(); + void Update() override; + //void Exit(); + + private: + bool isDirty; + }; +} \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h index 2fcde2b2..9aad6ede 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h +++ b/SHADE_Engine/src/Editor/EditorWindow/SHEditorWindowIncludes.h @@ -5,4 +5,5 @@ #include "Profiling/SHEditorProfiler.h" //Profiler #include "ViewportWindow/SHEditorViewport.h" //Editor Viewport #include "AssetBrowser/SHAssetBrowser.h" //Asset Browser -#include "MaterialInspector/SHMaterialInspector.h" //Material Inspector \ No newline at end of file +#include "MaterialInspector/SHMaterialInspector.h" //Material Inspector +#include "ColliderTagPanel/SHColliderTagPanel.h" //Collider Tag Panel \ No newline at end of file diff --git a/SHADE_Engine/src/Editor/SHEditor.cpp b/SHADE_Engine/src/Editor/SHEditor.cpp index abddf457..dd24e158 100644 --- a/SHADE_Engine/src/Editor/SHEditor.cpp +++ b/SHADE_Engine/src/Editor/SHEditor.cpp @@ -101,6 +101,7 @@ namespace SHADE SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow(); + SHEditorWindowManager::CreateEditorWindow(); SHEditorWindowManager::CreateEditorWindow();