diff --git a/Assets/Fonts/ALGER.shfont b/Assets/Fonts/ALGER.shfont new file mode 100644 index 00000000..1acab9da Binary files /dev/null and b/Assets/Fonts/ALGER.shfont differ diff --git a/Assets/Fonts/ALGER.shfont.shmeta b/Assets/Fonts/ALGER.shfont.shmeta new file mode 100644 index 00000000..e6350c15 --- /dev/null +++ b/Assets/Fonts/ALGER.shfont.shmeta @@ -0,0 +1,3 @@ +Name: ALGER +ID: 182525173 +Type: 10 diff --git a/Assets/Fonts/ALGER.ttf b/Assets/Fonts/ALGER.ttf new file mode 100644 index 00000000..dcc72ae9 Binary files /dev/null and b/Assets/Fonts/ALGER.ttf differ diff --git a/SHADE_Application/src/Application/SBApplication.cpp b/SHADE_Application/src/Application/SBApplication.cpp index 3b7115a2..44d39c1f 100644 --- a/SHADE_Application/src/Application/SBApplication.cpp +++ b/SHADE_Application/src/Application/SBApplication.cpp @@ -81,6 +81,7 @@ namespace Sandbox SHSystemManager::CreateSystem(); std::system("FontCompiler.exe ../../Assets/Fonts/SegoeUI.ttf"); + std::system("FontCompiler.exe ../../Assets/Fonts/ALGER.ttf"); SHSystemManager::CreateSystem(); SHGraphicsSystem* graphicsSystem = static_cast(SHSystemManager::GetSystem()); diff --git a/SHADE_Application/src/Scenes/SBMainScene.cpp b/SHADE_Application/src/Scenes/SBMainScene.cpp index 9da68729..a0e80556 100644 --- a/SHADE_Application/src/Scenes/SBMainScene.cpp +++ b/SHADE_Application/src/Scenes/SBMainScene.cpp @@ -42,19 +42,6 @@ namespace Sandbox void SBMainScene::Init() { sceneName = SHSerialization::DeserializeSceneFromFile(sceneAssetID); - - /*-----------------------------------------------------------------------*/ - /* TESTING CODE */ - /*-----------------------------------------------------------------------*/ - //testText = SHEntityManager::CreateEntity(MAX_EID, "Test Text"); - //auto gfxSystem =SHSystemManager::GetSystem(); - - //auto textComp = SHComponentManager::GetComponent(testText); - - //textComp->SetFont(gfxSystem->GetFontLibrary().GetFonts()[0]); - /*-----------------------------------------------------------------------*/ - /* TESTING CODE */ - /*-----------------------------------------------------------------------*/ } void SBMainScene::Update(float dt) diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index ab844b88..386f0988 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -495,4 +495,52 @@ namespace SHADE } ImGui::PopID(); } + + template<> + static void DrawComponent(SHTextRendererComponent* component) + { + if (!component) + return; + ImGui::PushID(SHFamilyID::GetID()); + const auto componentType = rttr::type::get(*component); + SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active"); + ImGui::SameLine(); + if (ImGui::CollapsingHeader(componentType.get_name().data())) + { + DrawContextMenu(component); + Handle const& font = component->GetFont(); + const auto FONT_NAME = SHResourceManager::GetAssetName(font).value_or(""); + SHEditorWidgets::DragDropReadOnlyField("Font", FONT_NAME, [component]() + { + Handle const& font = component->GetFont(); + return SHResourceManager::GetAssetID(font).value_or(0); + }, + [component](AssetID const& id) + { + if (SHAssetManager::GetType(id) != AssetType::FONT) + { + SHLOG_WARNING("Attempted to assign non font asset to TextRendererComponent Font property!") + return; + } + component->SetFont(SHResourceManager::LoadOrGet(id)); + SHResourceManager::FinaliseChanges(); + }, SHDragDrop::DRAG_RESOURCE); + + SHEditorWidgets::InputText("Text", + [component](void) + { + return component->GetText(); + }, + [component](std::string const& val) + { + component->SetText(val); + } + ); + } + else + { + DrawContextMenu(component); + } + ImGui::PopID(); + } } diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index 655ad68a..b08d27f6 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -22,6 +22,7 @@ #include "UI/SHCanvasComponent.h" #include "SHEditorComponentView.h" #include "AudioSystem/SHAudioListenerComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h" namespace SHADE { @@ -144,6 +145,10 @@ namespace SHADE { DrawComponent(uiComponent); } + if (auto textRendererComponent = SHComponentManager::GetComponent_s(eid)) + { + DrawComponent(textRendererComponent); + } ImGui::Separator(); // Render Scripts SHScriptEngine* scriptEngine = static_cast(SHSystemManager::GetSystem()); @@ -162,6 +167,7 @@ namespace SHADE DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); + DrawAddComponentWithEnforcedComponentButton(eid); ImGui::EndMenu(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 439d4cb8..160e82c6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -137,7 +137,6 @@ namespace SHADE static constexpr AssetID SSAO_BLUR = 39760835; ssaoBlurShader = SHResourceManager::LoadOrGet(SSAO_BLUR); static constexpr AssetID TEXT_VS = 39816727; textVS = SHResourceManager::LoadOrGet(TEXT_VS); static constexpr AssetID TEXT_FS = 38024754; textFS = SHResourceManager::LoadOrGet(TEXT_FS); - static constexpr AssetID SEGOE_UI_FONT = 176667660; testFont = SHResourceManager::LoadOrGet(SEGOE_UI_FONT); } void SHGraphicsSystem::InitSceneRenderGraph(void) noexcept diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp index af30c8e8..26fb97aa 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp @@ -58,6 +58,7 @@ namespace SHADE void SHTextRendererComponent::SetFont(Handle font) noexcept { fontHandle = font; + MakeDirty(); } /***************************************************************************/ @@ -76,4 +77,19 @@ namespace SHADE return text; } -} \ No newline at end of file + Handle SHTextRendererComponent::GetFont(void) const noexcept + { + return fontHandle; + } + +} + +namespace rttr +{ + RTTR_REGISTRATION + { + using namespace SHADE; + + registration::class_("Text Renderer Component"); + }; +} diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h index 242253ec..45738e93 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h @@ -5,6 +5,7 @@ #include "ECS_Base/Components/SHComponent.h" #include "Math/SHColour.h" #include "Resource/SHHandle.h" +#include namespace SHADE { @@ -53,9 +54,12 @@ namespace SHADE void SetFont (Handle font) noexcept; std::string const& GetText (void) const noexcept; + Handle GetFont (void) const noexcept; friend class SHTextRenderingSubSystem; + RTTR_ENABLE() + }; } diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 3ed96d7d..607b4666 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -211,6 +211,7 @@ namespace SHADE AddComponentToComponentNode(components, eid); AddComponentToComponentNode(components, eid); AddConvComponentToComponentNode(components, eid); + AddConvComponentToComponentNode(components, eid); node[ComponentsNode] = components; @@ -262,6 +263,7 @@ namespace SHADE AddComponentID(componentIDList, componentsNode); AddComponentID(componentIDList, componentsNode); AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); return componentIDList; } @@ -338,6 +340,7 @@ namespace SHADE SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); SHSerializationHelper::ConvertNodeToComponent(componentsNode, eid); SHSerializationHelper::ConvertNodeToComponent(componentsNode, eid); + SHSerializationHelper::ConvertNodeToComponent(componentsNode, eid); SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); } } diff --git a/SHADE_Engine/src/Serialization/SHYAMLConverters.h b/SHADE_Engine/src/Serialization/SHYAMLConverters.h index d66a7506..eb273a15 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -12,6 +12,9 @@ #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "SHSerializationTools.h" #include "Physics/Interface/SHColliderComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHFont.h" + namespace YAML { using namespace SHADE; @@ -322,4 +325,45 @@ namespace YAML return true; } }; + + template<> + struct convert + { + static constexpr std::string_view TEXT_YAML_TAG = "Text"; + static constexpr std::string_view FONT_YAML_TAG = "Font"; + + static YAML::Node encode(SHTextRendererComponent const& rhs) + { + YAML::Node node; + node[TEXT_YAML_TAG.data()] = rhs.GetText(); + auto font = rhs.GetFont(); + if (font) + { + node[FONT_YAML_TAG.data()] = SHResourceManager::GetAssetID(rhs.GetFont()).value_or(0); + } + else + { + node[FONT_YAML_TAG.data()] = 0; + } + return node; + } + static bool decode(YAML::Node const& node, SHTextRendererComponent& rhs) + { + if (node[TEXT_YAML_TAG.data()].IsDefined()) + { + rhs.SetText(node[TEXT_YAML_TAG.data()].as()); + } + if (node[FONT_YAML_TAG.data()].IsDefined()) + { + + // Temporarily, use default material + auto gfxSystem = SHSystemManager::GetSystem(); + if (!gfxSystem) + return false; + + rhs.SetFont(SHResourceManager::LoadOrGet(node[TEXT_YAML_TAG.data()].as())); + } + return true; + } + }; }