From b46d2135bc946db274fdc50e9b260f7787f509a7 Mon Sep 17 00:00:00 2001 From: Kah Wei Date: Tue, 31 Jan 2023 10:53:58 +0800 Subject: [PATCH] Modified Renderable and TextRenderable to no longer use reference to Assets, and use the Asset directly instead --- SHADE_Managed/src/Assets/NativeAsset.cxx | 2 ++ SHADE_Managed/src/Assets/NativeAsset.hxx | 3 ++- SHADE_Managed/src/Components/Renderable.cxx | 22 ++++++++++--------- SHADE_Managed/src/Components/Renderable.hxx | 12 +++++----- .../src/Components/TextRenderable.cxx | 11 +++++----- .../src/Components/TextRenderable.hxx | 6 ++--- 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/SHADE_Managed/src/Assets/NativeAsset.cxx b/SHADE_Managed/src/Assets/NativeAsset.cxx index 9480b02a..2e32c459 100644 --- a/SHADE_Managed/src/Assets/NativeAsset.cxx +++ b/SHADE_Managed/src/Assets/NativeAsset.cxx @@ -41,6 +41,8 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Asset::operator bool(Asset asset) { + static_assert(INVALID_ASSET_ID == 0, + "This must be 0 due to the way structs are default initialized to ensure Assets are invalid if default constructed."); return asset.NativeAssetID != INVALID_ASSET_ID; } } \ No newline at end of file diff --git a/SHADE_Managed/src/Assets/NativeAsset.hxx b/SHADE_Managed/src/Assets/NativeAsset.hxx index 40f7e628..2a5a2906 100644 --- a/SHADE_Managed/src/Assets/NativeAsset.hxx +++ b/SHADE_Managed/src/Assets/NativeAsset.hxx @@ -22,7 +22,8 @@ of DigiPen Institute of Technology is prohibited. namespace SHADE { /// - /// Struct that contains native asset information. + /// Struct that contains native asset information. Default constructed assets have + /// an internval value of 0 which is the invalid ID. /// public value struct Asset { diff --git a/SHADE_Managed/src/Components/Renderable.cxx b/SHADE_Managed/src/Components/Renderable.cxx index 819760e6..1aa83637 100644 --- a/SHADE_Managed/src/Components/Renderable.cxx +++ b/SHADE_Managed/src/Components/Renderable.cxx @@ -30,34 +30,36 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ /* Properties */ /*---------------------------------------------------------------------------------*/ - SHADE::MeshAsset^ Renderable::Mesh::get() + MeshAsset Renderable::Mesh::get() { - return gcnew SHADE::MeshAsset(GetNativeComponent()->GetMesh()); + auto mesh = GetNativeComponent()->GetMesh(); + return mesh ? MeshAsset(mesh) : MeshAsset(); } - void Renderable::Mesh::set(SHADE::MeshAsset^ value) + void Renderable::Mesh::set(MeshAsset value) { - if (value == nullptr) + if (value) { GetNativeComponent()->SetMesh(Handle()); } else { - GetNativeComponent()->SetMesh(value->NativeObject); + GetNativeComponent()->SetMesh(value.NativeObject); } } - SHADE::Material^ Renderable::Material::get() + SHADE::Material Renderable::Material::get() { - return gcnew SHADE::Material(GetNativeComponent()->GetMaterial()); + auto mat = GetNativeComponent()->GetMaterial(); + return mat ? SHADE::Material(mat) : SHADE::Material(); } - void Renderable::Material::set(SHADE::Material^ value) + void Renderable::Material::set(SHADE::Material value) { - if (value == nullptr) + if (value) { GetNativeComponent()->SetMaterial(Handle()); } else { - GetNativeComponent()->SetMaterial(Handle(Convert::ToNative(value->NativeObjectHandle))); + GetNativeComponent()->SetMaterial(Handle(Convert::ToNative(value.NativeObjectHandle))); } } System::Byte Renderable::LightLayer::get() diff --git a/SHADE_Managed/src/Components/Renderable.hxx b/SHADE_Managed/src/Components/Renderable.hxx index d52a01e5..b0786035 100644 --- a/SHADE_Managed/src/Components/Renderable.hxx +++ b/SHADE_Managed/src/Components/Renderable.hxx @@ -49,18 +49,18 @@ namespace SHADE /// /// Mesh used to render this Renderable. /// - property SHADE::MeshAsset^ Mesh + property MeshAsset Mesh { - SHADE::MeshAsset^ get(); - void set(SHADE::MeshAsset^ value); + MeshAsset get(); + void set(MeshAsset value); } /// /// Material used to render this Renderable. /// - property SHADE::Material^ Material + property SHADE::Material Material { - SHADE::Material^ get(); - void set(SHADE::Material^ value); + SHADE::Material get(); + void set(SHADE::Material value); } /// /// Material used to render this Renderable. diff --git a/SHADE_Managed/src/Components/TextRenderable.cxx b/SHADE_Managed/src/Components/TextRenderable.cxx index 88e43823..3eb1f3b9 100644 --- a/SHADE_Managed/src/Components/TextRenderable.cxx +++ b/SHADE_Managed/src/Components/TextRenderable.cxx @@ -39,19 +39,20 @@ namespace SHADE { GetNativeComponent()->SetText(Convert::ToNative(value)); } - SHADE::FontAsset^ TextRenderable::Font::get() + FontAsset TextRenderable::Font::get() { - return gcnew SHADE::FontAsset(GetNativeComponent()->GetFont()); + auto font = GetNativeComponent()->GetFont(); + return font ? FontAsset(font) : FontAsset(); } - void TextRenderable::Font::set(SHADE::FontAsset^ value) + void TextRenderable::Font::set(FontAsset value) { - if (value == nullptr) + if (value) { GetNativeComponent()->SetFont(Handle()); } else { - GetNativeComponent()->SetFont(value->NativeObject); + GetNativeComponent()->SetFont(value.NativeObject); } } } diff --git a/SHADE_Managed/src/Components/TextRenderable.hxx b/SHADE_Managed/src/Components/TextRenderable.hxx index bcd99bcf..b17a919c 100644 --- a/SHADE_Managed/src/Components/TextRenderable.hxx +++ b/SHADE_Managed/src/Components/TextRenderable.hxx @@ -55,10 +55,10 @@ namespace SHADE /// /// Font to use to render using this TextRenderable. /// - property SHADE::FontAsset^ Font + property FontAsset Font { - SHADE::FontAsset^ get(); - void set(SHADE::FontAsset^ value); + FontAsset get(); + void set(FontAsset value); } }; }