diff --git a/SHADE_Application/src/Scenes/SBMainScene.cpp b/SHADE_Application/src/Scenes/SBMainScene.cpp index 929d28fa..e9611fd8 100644 --- a/SHADE_Application/src/Scenes/SBMainScene.cpp +++ b/SHADE_Application/src/Scenes/SBMainScene.cpp @@ -14,7 +14,7 @@ #include "Physics/Interface/SHRigidBodyComponent.h" #include "Physics/Interface/SHColliderComponent.h" #include "Graphics/MiddleEnd/Lights/SHLightComponent.h" -#include "Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" #include "Assets/SHAssetManager.h" #include "Camera/SHCameraComponent.h" diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp index 80ae3331..f8be2af9 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorComponentView.hpp @@ -498,11 +498,11 @@ namespace SHADE } template<> - static void DrawComponent(SHTextRendererComponent* component) + static void DrawComponent(SHTextRenderableComponent* component) { if (!component) return; - ImGui::PushID(SHFamilyID::GetID()); + 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(); diff --git a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp index b08d27f6..c4287e6f 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/Inspector/SHEditorInspector.cpp @@ -22,7 +22,7 @@ #include "UI/SHCanvasComponent.h" #include "SHEditorComponentView.h" #include "AudioSystem/SHAudioListenerComponent.h" -#include "Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" namespace SHADE { @@ -145,7 +145,7 @@ namespace SHADE { DrawComponent(uiComponent); } - if (auto textRendererComponent = SHComponentManager::GetComponent_s(eid)) + if (auto textRendererComponent = SHComponentManager::GetComponent_s(eid)) { DrawComponent(textRendererComponent); } @@ -167,7 +167,7 @@ namespace SHADE DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); DrawAddComponentWithEnforcedComponentButton(eid); - DrawAddComponentWithEnforcedComponentButton(eid); + DrawAddComponentWithEnforcedComponentButton(eid); ImGui::EndMenu(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.cpp similarity index 66% rename from SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp rename to SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.cpp index 26fb97aa..b407b599 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.cpp @@ -1,15 +1,15 @@ #include "SHpch.h" -#include "SHTextRendererComponent.h" +#include "SHTextRenderableComponent.h" namespace SHADE { - void SHTextRendererComponent::MakeDirty(void) noexcept + void SHTextRenderableComponent::MakeDirty(void) noexcept { requiresRecompute = true; } - void SHTextRendererComponent::Clean(void) noexcept + void SHTextRenderableComponent::Clean(void) noexcept { requiresRecompute = false; } @@ -22,7 +22,7 @@ namespace SHADE */ /***************************************************************************/ - void SHTextRendererComponent::OnCreate(void) + void SHTextRenderableComponent::OnCreate(void) { text = "My name is Brandon."; requiresRecompute = true; @@ -31,7 +31,7 @@ namespace SHADE color = SHColour::WHITE; } - void SHTextRendererComponent::OnDestroy(void) + void SHTextRenderableComponent::OnDestroy(void) { } @@ -49,13 +49,13 @@ namespace SHADE */ /***************************************************************************/ - void SHTextRendererComponent::SetText(std::string_view newText) noexcept + void SHTextRenderableComponent::SetText(std::string_view newText) noexcept { text = newText; MakeDirty(); } - void SHTextRendererComponent::SetFont(Handle font) noexcept + void SHTextRenderableComponent::SetFont(Handle font) noexcept { fontHandle = font; MakeDirty(); @@ -72,12 +72,12 @@ namespace SHADE */ /***************************************************************************/ - std::string const& SHTextRendererComponent::GetText(void) const noexcept + std::string const& SHTextRenderableComponent::GetText(void) const noexcept { return text; } - Handle SHTextRendererComponent::GetFont(void) const noexcept + Handle SHTextRenderableComponent::GetFont(void) const noexcept { return fontHandle; } @@ -90,6 +90,6 @@ namespace rttr { using namespace SHADE; - registration::class_("Text Renderer Component"); + registration::class_("Text Renderer Component"); }; } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h similarity index 95% rename from SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h rename to SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h index 45738e93..ef907409 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h @@ -13,7 +13,7 @@ namespace SHADE class SHVkDescriptorSetGroup; class SHVkBuffer; - class SH_API SHTextRendererComponent final : public SHComponent + class SH_API SHTextRenderableComponent final : public SHComponent { public: static constexpr uint32_t MAX_CHARACTERS = 500; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.cpp index 8fbdd33b..6748311e 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.cpp @@ -1,6 +1,6 @@ #include "SHpch.h" #include "SHTextRenderingSubSystem.h" -#include "Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" #include "ECS_Base/Managers/SHComponentManager.h" #include "Math/Vector/SHVec4.h" #include "Graphics/Devices/SHVkLogicalDevice.h" @@ -14,20 +14,20 @@ namespace SHADE { - void SHTextRenderingSubSystem::RecomputePositions(SHTextRendererComponent& textComp) noexcept + void SHTextRenderingSubSystem::RecomputePositions(SHTextRenderableComponent& textComp) noexcept { if (textComp.text.empty() || !textComp.fontHandle) return; // Create the buffer if (!textComp.indexingDataBuffer) - textComp.indexingDataBuffer = logicalDevice->CreateBuffer(SHTextRendererComponent::MAX_CHARACTERS * sizeof(uint32_t), nullptr, SHTextRendererComponent::MAX_CHARACTERS * sizeof(uint32_t), vk::BufferUsageFlagBits::eVertexBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); + textComp.indexingDataBuffer = logicalDevice->CreateBuffer(SHTextRenderableComponent::MAX_CHARACTERS * sizeof(uint32_t), nullptr, SHTextRenderableComponent::MAX_CHARACTERS * sizeof(uint32_t), vk::BufferUsageFlagBits::eVertexBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); if (!textComp.charPositionDataBuffer) - textComp.charPositionDataBuffer = logicalDevice->CreateBuffer(SHTextRendererComponent::MAX_CHARACTERS * sizeof(SHVec4), nullptr, SHTextRendererComponent::MAX_CHARACTERS * sizeof(SHVec4), vk::BufferUsageFlagBits::eVertexBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); + textComp.charPositionDataBuffer = logicalDevice->CreateBuffer(SHTextRenderableComponent::MAX_CHARACTERS * sizeof(SHVec4), nullptr, SHTextRenderableComponent::MAX_CHARACTERS * sizeof(SHVec4), vk::BufferUsageFlagBits::eVertexBuffer, VMA_MEMORY_USAGE_AUTO, VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT); // For indexing font transformation in the shader - std::vector indexingData; + std::vector indexingData; // For placing glyphs correctly std::vector charPositionData; @@ -49,7 +49,7 @@ namespace SHADE // for every character for (uint32_t i = 0; i < numChars; ++i) { - SHTextRendererComponent::TextIndexingType index = glyphTransformIndices.at(textComp.text[i]); + SHTextRenderableComponent::TextIndexingType index = glyphTransformIndices.at(textComp.text[i]); // Copy baseline SHVec4 characterPos = baselineOrigin; @@ -83,7 +83,7 @@ namespace SHADE //} } - textComp.indexingDataBuffer->WriteToMemory(indexingData.data(), static_cast(indexingData.size()) * sizeof (SHTextRendererComponent::TextIndexingType),0, 0); + textComp.indexingDataBuffer->WriteToMemory(indexingData.data(), static_cast(indexingData.size()) * sizeof (SHTextRenderableComponent::TextIndexingType),0, 0); textComp.charPositionDataBuffer->WriteToMemory(charPositionData.data(), static_cast(charPositionData.size()) * sizeof (SHVec4), 0, 0); indexingData.clear(); @@ -93,7 +93,7 @@ namespace SHADE void SHTextRenderingSubSystem::Init(Handle device, Handle compatibleRenderpass, Handle subpass, Handle descPool, Handle textVS, Handle textFS, std::function, uint32_t)> const& bindFunction) noexcept { - SHComponentManager::CreateComponentSparseSet(); + SHComponentManager::CreateComponentSparseSet(); cameraDescSetBind = bindFunction; @@ -179,7 +179,7 @@ namespace SHADE void SHTextRenderingSubSystem::Run(uint32_t frameIndex) noexcept { - auto& textRendererComps = SHComponentManager::GetDense(); + auto& textRendererComps = SHComponentManager::GetDense(); for (auto& comp : textRendererComps) { @@ -194,7 +194,7 @@ namespace SHADE void SHTextRenderingSubSystem::Render(Handle cmdBuffer, uint32_t frameIndex) noexcept { - auto& textRendererComps = SHComponentManager::GetDense(); + auto& textRendererComps = SHComponentManager::GetDense(); for (auto& comp : textRendererComps) { auto* transform = SHComponentManager::GetComponent(comp.GetEID()); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.h index d569ca91..05ab01da 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TextRendering/SHTextRenderingSubSystem.h @@ -14,7 +14,7 @@ namespace SHADE class SHVkBuffer; class SHLightComponent; class SHVkCommandBuffer; - class SHTextRendererComponent; + class SHTextRenderableComponent; class SHVkPipeline; class SHVkPipelineLayout; class SHVkRenderpass; @@ -48,7 +48,7 @@ namespace SHADE std::function, uint32_t)> cameraDescSetBind; private: - void RecomputePositions(SHTextRendererComponent& textComp) noexcept; + void RecomputePositions(SHTextRenderableComponent& textComp) noexcept; public: void Init(Handle device, Handle compatibleRenderpass, Handle subpass, Handle descPool, Handle textVS, Handle textFS, std::function, uint32_t)> const& bindFunction) noexcept; diff --git a/SHADE_Engine/src/Serialization/SHSerialization.cpp b/SHADE_Engine/src/Serialization/SHSerialization.cpp index 607b4666..be7c9cf0 100644 --- a/SHADE_Engine/src/Serialization/SHSerialization.cpp +++ b/SHADE_Engine/src/Serialization/SHSerialization.cpp @@ -211,7 +211,7 @@ namespace SHADE AddComponentToComponentNode(components, eid); AddComponentToComponentNode(components, eid); AddConvComponentToComponentNode(components, eid); - AddConvComponentToComponentNode(components, eid); + AddConvComponentToComponentNode(components, eid); node[ComponentsNode] = components; @@ -263,7 +263,7 @@ namespace SHADE AddComponentID(componentIDList, componentsNode); AddComponentID(componentIDList, componentsNode); AddComponentID(componentIDList, componentsNode); - AddComponentID(componentIDList, componentsNode); + AddComponentID(componentIDList, componentsNode); return componentIDList; } @@ -340,7 +340,7 @@ namespace SHADE SHSerializationHelper::InitializeComponentFromNode(componentsNode, eid); SHSerializationHelper::ConvertNodeToComponent(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 06c785ae..023f0817 100644 --- a/SHADE_Engine/src/Serialization/SHYAMLConverters.h +++ b/SHADE_Engine/src/Serialization/SHYAMLConverters.h @@ -12,7 +12,7 @@ #include "Graphics/MiddleEnd/Interface/SHMaterialInstance.h" #include "SHSerializationTools.h" #include "Physics/Interface/SHColliderComponent.h" -#include "Graphics/MiddleEnd/TextRendering/SHTextRendererComponent.h" +#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" #include "Graphics/MiddleEnd/TextRendering/SHFont.h" namespace YAML @@ -331,12 +331,12 @@ namespace YAML }; template<> - struct convert + 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) + static YAML::Node encode(SHTextRenderableComponent const& rhs) { YAML::Node node; node[TEXT_YAML_TAG.data()] = rhs.GetText(); @@ -351,7 +351,7 @@ namespace YAML } return node; } - static bool decode(YAML::Node const& node, SHTextRendererComponent& rhs) + static bool decode(YAML::Node const& node, SHTextRenderableComponent& rhs) { if (node[TEXT_YAML_TAG.data()].IsDefined()) { diff --git a/SHADE_Managed/premake5.lua b/SHADE_Managed/premake5.lua index 70b01e18..463e80b8 100644 --- a/SHADE_Managed/premake5.lua +++ b/SHADE_Managed/premake5.lua @@ -33,6 +33,8 @@ project "SHADE_Managed" "%{IncludeDir.imgui}", "%{IncludeDir.imguizmo}", "%{IncludeDir.imnodes}", + "%{IncludeDir.msdf_atlas_gen}", + "%{IncludeDir.msdfgen}", "%{IncludeDir.yamlcpp}", "%{IncludeDir.SDL}\\include", "%{IncludeDir.RTTR}/include", @@ -53,6 +55,8 @@ project "SHADE_Managed" links { "yaml-cpp", + "msdfgen", + "msdf-atlas-gen", "imgui", "SDL2.lib", "SDL2main.lib", @@ -89,6 +93,8 @@ project "SHADE_Managed" dependson { "yaml-cpp", + "msdfgen", + "msdf-atlas-gen", "imgui", "SHADE_Engine" } diff --git a/SHADE_Managed/src/Assets/Font.cxx b/SHADE_Managed/src/Assets/Font.cxx new file mode 100644 index 00000000..782b0688 --- /dev/null +++ b/SHADE_Managed/src/Assets/Font.cxx @@ -0,0 +1,32 @@ +/************************************************************************************//*! +\file Font.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2022 +\brief Contains the implementation of the functions of the managed Font class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "Font.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Explicit Template Instantiation */ + /*---------------------------------------------------------------------------------*/ + template ref class NativeAsset; + + /*---------------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*---------------------------------------------------------------------------------*/ + Font::Font(Handle font) + : NativeAsset { font } + {} +} diff --git a/SHADE_Managed/src/Assets/Font.hxx b/SHADE_Managed/src/Assets/Font.hxx new file mode 100644 index 00000000..fd194d1a --- /dev/null +++ b/SHADE_Managed/src/Assets/Font.hxx @@ -0,0 +1,41 @@ +/************************************************************************************//*! +\file Font.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2022 +\brief Contains the definition of the managed Font class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Resource/SHHandle.h" +#include "Graphics/MiddleEnd/TextRendering/SHFont.h" +// Project Includes +#include "NativeAsset.hxx" +#include "Engine/GenericHandle.hxx" + +namespace SHADE +{ + /// + /// Managed counterpart of the native Font object that can be fed to TextRenderables + /// for rendering. + /// + public ref class Font : public NativeAsset + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for the Font. + /// + /// Handle to the font object. + Font(Handle font); + }; +} diff --git a/SHADE_Managed/src/Assets/NativeAsset.cxx b/SHADE_Managed/src/Assets/NativeAsset.cxx index 674207a1..9cdb1840 100644 --- a/SHADE_Managed/src/Assets/NativeAsset.cxx +++ b/SHADE_Managed/src/Assets/NativeAsset.cxx @@ -21,6 +21,17 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /*---------------------------------------------------------------------------------*/ - /* Explicit Tempalte Instantiations */ + /* Properties */ /*---------------------------------------------------------------------------------*/ + GenericHandle Asset::NativeObjectHandle::get() + { + return nativeObjHandle; + } + + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + Asset::Asset(Handle nativeHandle) + : nativeObjHandle { Convert::ToCLI(Handle(nativeHandle)) } + {} } \ No newline at end of file diff --git a/SHADE_Managed/src/Assets/NativeAsset.h++ b/SHADE_Managed/src/Assets/NativeAsset.h++ index a4cd94b4..05be83b4 100644 --- a/SHADE_Managed/src/Assets/NativeAsset.h++ +++ b/SHADE_Managed/src/Assets/NativeAsset.h++ @@ -16,6 +16,7 @@ of DigiPen Institute of Technology is prohibited. // Primary Include #include "NativeAsset.hxx" +#include "Utility/Convert.hxx" namespace SHADE { @@ -23,11 +24,6 @@ namespace SHADE /* Properties */ /*---------------------------------------------------------------------------------*/ template - GenericHandle NativeAsset::NativeObjectHandle::get() - { - return nativeObjHandle; - } - template Handle NativeAsset::NativeObject::get() try { @@ -43,7 +39,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ template NativeAsset::NativeAsset(Handle nativeObj) - : nativeObjHandle{ Convert::ToCLI(Handle(nativeObj)) } + : Asset { Handle(nativeObj) } {} - } diff --git a/SHADE_Managed/src/Assets/NativeAsset.hxx b/SHADE_Managed/src/Assets/NativeAsset.hxx index 68addb75..4d53ce6b 100644 --- a/SHADE_Managed/src/Assets/NativeAsset.hxx +++ b/SHADE_Managed/src/Assets/NativeAsset.hxx @@ -19,13 +19,9 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /// - /// Generalised template class for a managed representation of a native asset + /// Abstract base class that all Native Assets will inherit from. /// - /// - /// The type of the asset's native representation. - /// - template - public ref class NativeAsset + public ref class Asset abstract { internal: /*-----------------------------------------------------------------------------*/ @@ -38,6 +34,36 @@ namespace SHADE { GenericHandle get(); } + + /*-----------------------------------------------------------------------------*/ + /* Constructors/Destructor */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructor for the asset. + /// + /// Native asset object handle. + Asset(Handle nativeHandle); + + protected: + /*-----------------------------------------------------------------------------*/ + /* Data Members */ + /*-----------------------------------------------------------------------------*/ + GenericHandle nativeObjHandle; + }; + + /// + /// Generalised template class for a managed representation of a native asset + /// + /// + /// The type of the asset's native representation. + /// + template + public ref class NativeAsset abstract : Asset + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ /// /// Copy of the Handle to the native object. /// @@ -52,14 +78,8 @@ namespace SHADE /// /// Constructor for the native asset /// - /// Native asset object. + /// Native asset object handle. NativeAsset(Handle ptr); - - protected: - /*-----------------------------------------------------------------------------*/ - /* Data Members */ - /*-----------------------------------------------------------------------------*/ - GenericHandle nativeObjHandle; }; } diff --git a/SHADE_Managed/src/Components/TextRenderable.cxx b/SHADE_Managed/src/Components/TextRenderable.cxx new file mode 100644 index 00000000..c5859854 --- /dev/null +++ b/SHADE_Managed/src/Components/TextRenderable.cxx @@ -0,0 +1,57 @@ +/************************************************************************************//*! +\file TextRenderable.cxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Oct 28, 2022 +\brief Contains the definition of the functions of the managed TextRenderable + class. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +// Precompiled Headers +#include "SHpch.h" +// Primary Header +#include "TextRenderable.hxx" +#include "Assets/NativeAsset.hxx" +#include "Utility/Convert.hxx" + +namespace SHADE +{ + /*---------------------------------------------------------------------------------*/ + /* Constructors */ + /*---------------------------------------------------------------------------------*/ + TextRenderable::TextRenderable(Entity entity) + : Component(entity) + {} + + /*---------------------------------------------------------------------------------*/ + /* Properties */ + /*---------------------------------------------------------------------------------*/ + System::String^ TextRenderable::Text::get() + { + return Convert::ToCLI(GetNativeComponent()->GetText()); + } + void TextRenderable::Text::set(System::String^ value) + { + GetNativeComponent()->SetText(Convert::ToNative(value)); + } + SHADE::Font^ TextRenderable::Font::get() + { + return gcnew SHADE::Font(GetNativeComponent()->GetFont()); + } + void TextRenderable::Font::set(SHADE::Font^ value) + { + if (value == nullptr) + { + GetNativeComponent()->SetFont(Handle()); + } + else + { + GetNativeComponent()->SetFont(Handle(Convert::ToNative(value->NativeObjectHandle))); + } + } +} diff --git a/SHADE_Managed/src/Components/TextRenderable.hxx b/SHADE_Managed/src/Components/TextRenderable.hxx new file mode 100644 index 00000000..5418b6e5 --- /dev/null +++ b/SHADE_Managed/src/Components/TextRenderable.hxx @@ -0,0 +1,65 @@ +/************************************************************************************//*! +\file TextRenderable.hxx +\author Tng Kah Wei, kahwei.tng, 390009620 +\par email: kahwei.tng\@digipen.edu +\date Nov 21, 2022 +\brief Contains the definition of the managed TextRenderable class with the + declaration of functions for working with it. + + Note: This file is written in C++17/CLI. + +Copyright (C) 2022 DigiPen Institute of Technology. +Reproduction or disclosure of this file or its contents without the prior written consent +of DigiPen Institute of Technology is prohibited. +*//*************************************************************************************/ +#pragma once + +// External Dependencies +#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h" +// Project Includes +#include "Components/Component.hxx" +#include "Math/Vector3.hxx" +#include "Math/Quaternion.hxx" +#include "Assets/Font.hxx" + +namespace SHADE +{ + /// + /// CLR version of the SHADE Engine's SHTextRenderableComponent. + /// + public ref class TextRenderable : public Component + { + internal: + /*-----------------------------------------------------------------------------*/ + /* Constructors */ + /*-----------------------------------------------------------------------------*/ + /// + /// Constructs a TextRenderable Component that represents a native TextRenderable + /// component tied to the specified Entity. + /// + /// Entity that this Component will be tied to. + TextRenderable(Entity entity); + + public: + /*-----------------------------------------------------------------------------*/ + /* Properties */ + /*-----------------------------------------------------------------------------*/ + /// + /// Text to render using this TextRenderable. + /// + property System::String^ Text + { + System::String^ get(); + void set(System::String^ value); + } + /// + /// Font to use to render using this TextRenderable. + /// + property SHADE::Font^ Font + { + SHADE::Font^ get(); + void set(SHADE::Font^ value); + } + }; +} + diff --git a/SHADE_Managed/src/Utility/Convert.cxx b/SHADE_Managed/src/Utility/Convert.cxx index 38ea2f50..590a3cf0 100644 --- a/SHADE_Managed/src/Utility/Convert.cxx +++ b/SHADE_Managed/src/Utility/Convert.cxx @@ -89,6 +89,8 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ std::string Convert::ToNative(System::String^ str) { + if (str == nullptr) + return ""; return msclr::interop::marshal_as(str); }