Fix missing asset refs from BT nodes data

This commit is contained in:
Wojtek Figat
2023-08-21 18:28:05 +02:00
parent cc5cde5bc7
commit 863b6338ce
2 changed files with 20 additions and 7 deletions

View File

@@ -5,6 +5,7 @@
#include "BehaviorTreeNodes.h"
#include "Engine/Core/Collections/Sorting.h"
#include "Engine/Content/Factories/BinaryAssetFactory.h"
#include "Engine/Content/JsonAsset.h"
#include "Engine/Scripting/Scripting.h"
#include "Engine/Serialization/JsonSerializer.h"
#include "Engine/Serialization/MemoryReadStream.h"
@@ -174,6 +175,24 @@ bool BehaviorTree::SaveSurface(const BytesContainer& data)
return false;
}
void BehaviorTree::GetReferences(Array<Guid>& output) const
{
// Base
BinaryAsset::GetReferences(output);
Graph.GetReferences(output);
// Extract refs from serialized nodes data
for (const BehaviorTreeGraphNode& n : Graph.Nodes)
{
if (n.Instance == nullptr)
continue;
const Variant& data = n.Values[1];
if (data.Type == VariantType::Blob)
JsonAssetBase::GetReferences(StringAnsiView((char*)data.AsBlob.Data, data.AsBlob.Length), output);
}
}
#endif
Asset::LoadResult BehaviorTree::load()

View File

@@ -82,13 +82,7 @@ public:
public:
// [BinaryAsset]
#if USE_EDITOR
void GetReferences(Array<Guid>& output) const override
{
// Base
BinaryAsset::GetReferences(output);
Graph.GetReferences(output);
}
void GetReferences(Array<Guid>& output) const override;
#endif
protected: