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);
}
};
}