Add JsonAsset.Instance for C# asset object

This commit is contained in:
Wojtek Figat
2022-04-13 21:18:35 +02:00
parent 017492dbfa
commit 9fb4624b03
2 changed files with 35 additions and 17 deletions

View File

@@ -19,6 +19,8 @@
#include "Engine/Debug/Exceptions/JsonParseException.h"
#include "Engine/Profiler/ProfilerCPU.h"
#include "Engine/Scripting/Scripting.h"
#include "Engine/Scripting/ManagedCLR/MClass.h"
#include "Engine/Scripting/ManagedCLR/MField.h"
#include "Engine/Utilities/StringConverter.h"
JsonAssetBase::JsonAssetBase(const SpawnParams& params, const AssetInfo* info)
@@ -212,13 +214,11 @@ Asset::LoadResult JsonAsset::loadAsset()
if (CreateInstance())
return LoadResult::Failed;
#if USE_EDITOR
if (Instance)
{
// Reload instance when module with this type gets reloaded
Level::ScriptsReloadStart.Bind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
Level::ScriptsReloaded.Bind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
}
// Reload instance when module with this type gets reloaded
Level::ScriptsReloadStart.Bind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
Level::ScriptsReloaded.Bind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
#endif
return LoadResult::Ok;
@@ -226,14 +226,11 @@ Asset::LoadResult JsonAsset::loadAsset()
void JsonAsset::unload(bool isReloading)
{
if (Instance)
{
#if USE_EDITOR
Level::ScriptsReloadStart.Unbind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
Level::ScriptsReloaded.Unbind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
Level::ScriptsReloadStart.Unbind<JsonAsset, &JsonAsset::OnScriptsReloadStart>(this);
Level::ScriptsReloaded.Unbind<JsonAsset, &JsonAsset::OnScriptsReloaded>(this);
#endif
DeleteInstance();
}
DeleteInstance();
JsonAssetBase::unload(isReloading);
}
@@ -281,6 +278,13 @@ bool JsonAsset::CreateInstance()
void JsonAsset::DeleteInstance()
{
// C# instance
if (MObject* object = GetManagedInstance())
{
GetClass()->GetField("_instance")->SetValue(object, nullptr);
}
// C++ instance
if (!Instance || !_dtor)
return;
_dtor(Instance);