ScenePartitionObject

- Loading
- Partial loading
- Saving
This commit is contained in:
max
2023-06-25 04:39:12 +02:00
parent f2e785f3fb
commit b067522a95
5 changed files with 236 additions and 27 deletions

View File

@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
@ -24,5 +25,32 @@ namespace VertexColor.ScenePartition.Editor
return scenePath;
}
public static SortedSet<uint> FindDeeplyLinkedObjects(SortedList<uint, ScenePartition> scenePartitions, uint partitionId)
{
SortedSet<uint> linkedObjects = new SortedSet<uint>();
FindDeeplyLinkedObjectsRecursive(scenePartitions, partitionId, linkedObjects);
return linkedObjects;
}
private static void FindDeeplyLinkedObjectsRecursive(SortedList<uint, ScenePartition> scenePartitions, uint partitionId, SortedSet<uint> linkedObjects)
{
if (linkedObjects.Contains(partitionId)) return;
if (!scenePartitions.TryGetValue(partitionId, out ScenePartition partition)) return;
linkedObjects.Add(partitionId);
foreach (uint reference in partition.references)
{
FindDeeplyLinkedObjectsRecursive(scenePartitions, reference, linkedObjects);
if (scenePartitions.TryGetValue(reference, out ScenePartition referencedPartition))
{
foreach (uint subReference in referencedPartition.references)
{
FindDeeplyLinkedObjectsRecursive(scenePartitions, subReference, linkedObjects);
}
}
}
}
}
}