public static SceneTree LoadFromJson(string jsonFile) { SceneTree localTree = new SceneTree(); JsonDocument jdoc = JsonDocument.Parse(jsonFile); JsonElement jdocRoot = jdoc.RootElement; ulong?highestId = null; if (jdocRoot.TryGetProperty("HighestUuid", out JsonElement newHighestProperty) && newHighestProperty.TryGetUInt64(out ulong newHighestUuid)) { highestId = newHighestUuid; } Queue <ulong> newFreeds = new Queue <ulong>(); if (jdocRoot.TryGetProperty("FreeUuids", out JsonElement newFreedUuidsProperty) && newFreedUuidsProperty.GetArrayLength() > 0) { foreach (JsonElement freedProp in newFreedUuidsProperty.EnumerateArray()) { newFreeds.Enqueue(freedProp.GetUInt64()); } } localTree.uuidManager = new UuidManager(highestId, newFreeds); if (jdocRoot.TryGetProperty("Nodes", out JsonElement nodesProperty)) { foreach (JsonElement element in nodesProperty.EnumerateArray()) { LoadNodeJson(localTree, element); } } foreach (SceneNode node in localTree.allNodes.Values) { if (node == localTree.root) { continue; } if (!localTree.allNodes.ContainsKey(node.parent)) { Log.WriteError("Could not parent SceneNode, parent id not found in tree, removing node."); localTree.FreeNode(node.uuid); continue; } SceneNode parent = localTree.allNodes[node.parent]; parent.children.Add(node.uuid); } return(localTree); }
public void Free() { tree.FreeNode(uuid); }