Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public void Free()
 {
     tree.FreeNode(uuid);
 }