MCPcopy Create free account
hub / github.com/MothCocoon/FlowGraph / SaveInstance

Method SaveInstance

Source/Flow/Private/FlowAsset.cpp:1326–1369  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1324}
1325
1326FFlowAssetSaveData UFlowAsset::SaveInstance(TArray<FFlowAssetSaveData>& SavedFlowInstances)
1327{
1328 FFlowAssetSaveData AssetRecord;
1329 AssetRecord.WorldName = IsBoundToWorld() ? GetWorld()->GetName() : FString();
1330 AssetRecord.InstanceName = GetName();
1331
1332 // opportunity to collect data before serializing asset
1333 OnSave();
1334
1335 // iterate nodes
1336 TArray<UFlowNode*> NodesInExecutionOrder;
1337 GetNodesInExecutionOrder<UFlowNode>(GetDefaultEntryNode(), NodesInExecutionOrder);
1338 for (UFlowNode* Node : NodesInExecutionOrder)
1339 {
1340 if (Node && Node->ShouldSave())
1341 {
1342 // iterate SubGraphs
1343 if (UFlowNode_SubGraph* SubGraphNode = Cast<UFlowNode_SubGraph>(Node))
1344 {
1345 const TWeakObjectPtr<UFlowAsset> SubFlowInstance = GetFlowInstance(SubGraphNode);
1346 if (SubFlowInstance.IsValid())
1347 {
1348 const FFlowAssetSaveData SubAssetRecord = SubFlowInstance->SaveInstance(SavedFlowInstances);
1349 SubGraphNode->SavedAssetInstanceName = SubAssetRecord.InstanceName;
1350 }
1351 }
1352
1353 FFlowNodeSaveData NodeRecord;
1354 Node->SaveInstance(NodeRecord);
1355
1356 AssetRecord.NodeRecords.Emplace(NodeRecord);
1357 }
1358 }
1359
1360 // serialize asset
1361 FMemoryWriter MemoryWriter(AssetRecord.AssetData, true);
1362 FFlowArchive Ar(MemoryWriter);
1363 Serialize(Ar);
1364
1365 // write archive to SaveGame
1366 SavedFlowInstances.Emplace(AssetRecord);
1367
1368 return AssetRecord;
1369}
1370
1371void UFlowAsset::LoadInstance(const FFlowAssetSaveData& AssetRecord)
1372{

Callers 1

OnGameSavedMethod · 0.45

Calls 3

FStringClass · 0.85
IsValidMethod · 0.80
GetNameMethod · 0.45

Tested by

no test coverage detected