From a520571d820c0f6812f196c610ac00878c5adc02 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Sat, 4 Feb 2023 00:52:58 +0800 Subject: [PATCH] Collision Tags now serialise based on index & autosave --- .../ColliderTagPanel/SHColliderTagPanel.cpp | 14 ++++++++++++-- SHADE_Engine/src/Serialization/SHYAMLConverters.h | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp index 97d9a34b..aa64e673 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ColliderTagPanel/SHColliderTagPanel.cpp @@ -50,7 +50,14 @@ namespace SHADE ImGui::TableNextColumn(); ImGui::PushID(i); - SHEditorWidgets::InputText("##", [i]{return SHCollisionTagMatrix::GetTagName(i);}, [i](std::string const& value){SHCollisionTagMatrix::GetTag(i)->SetName(value);}, tagName.data(), ImGuiInputTextFlags_EnterReturnsTrue); + if (SHEditorWidgets::InputText("##", [i]{return SHCollisionTagMatrix::GetTagName(i);}, [i](std::string const& value){SHCollisionTagMatrix::GetTag(i)->SetName(value);}, tagName.data(), ImGuiInputTextFlags_EnterReturnsTrue)) + { + isDirty = true; + std::filesystem::path defaultCollisionTagNameFilePath{ ASSET_ROOT }; + defaultCollisionTagNameFilePath.append("CollisionTags.SHConfig"); + SHCollisionTagMatrix::SaveToFile(defaultCollisionTagNameFilePath); + } + ImGui::PopID(); // The checkboxes are just to set the layers of each tag @@ -60,10 +67,13 @@ namespace SHADE { ImGui::TableNextColumn(); - std::string label = std::format("##{}, Layer {}", tagName, j); + std::string label = std::format("##{}, Layer {}", tagName, j+1); if (SHEditorWidgets::CheckBox(label, [tag, &j] {return tag->GetLayerState(j); }, [tag, j](bool const& value) {tag->SetLayerState(j, value); }, label.substr(2))) { isDirty = true; + std::filesystem::path defaultCollisionTagNameFilePath{ ASSET_ROOT }; + defaultCollisionTagNameFilePath.append("CollisionTags.SHConfig"); + SHCollisionTagMatrix::SaveToFile(defaultCollisionTagNameFilePath); } } } diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index 6c019874..9fceb10d 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -137,7 +137,7 @@ namespace YAML Node node; node[IsTrigger] = rhs.IsTrigger(); - node[CollisionTag] = rhs.GetCollisionTag().GetName(); + node[CollisionTag] = SHCollisionTagMatrix::GetTagIndex(rhs.GetCollisionTag().GetName()); rttr::type const shapeRttrType = rttr::type::get(); rttr::enumeration const enumAlign = shapeRttrType.get_enumeration(); SHCollisionShape::Type colliderType = rhs.GetType(); @@ -176,7 +176,7 @@ namespace YAML rhs.SetIsTrigger(node[IsTrigger].as()); if(node[CollisionTag].IsDefined()) - rhs.SetCollisionTag(SHCollisionTagMatrix::GetTag(node[CollisionTag].as())); + rhs.SetCollisionTag(SHCollisionTagMatrix::GetTag(node[CollisionTag].as())); if (!node[Type].IsDefined()) return false;