Example #1
0
        public static void SaveLinks(Dictionary <string, List <I3dWorldObject> > links, HashSet <I3dWorldObject> alreadyWrittenObjs, ByamlNodeWriter writer, DictionaryNode objNode, HashSet <string> layers)
        {
            if (links != null)
            {
                DictionaryNode linksNode = writer.CreateDictionaryNode(links);

                foreach (var(linkName, link) in links)
                {
                    if (link.Count == 0)
                    {
                        continue;
                    }

                    ArrayNode linkNode = writer.CreateArrayNode(link);

                    foreach (I3dWorldObject obj in link)
                    {
                        if (!layers.Contains(obj.Layer))
                        {
                            continue;
                        }

                        if (!alreadyWrittenObjs.Contains(obj))
                        {
                            DictionaryNode linkedObjNode = writer.CreateDictionaryNode(obj);
                            obj.Save(alreadyWrittenObjs, writer, linkedObjNode, layers, true);
                            linkNode.AddDictionaryNodeRef(linkedObjNode);
                        }
                        else
                        {
                            linkNode.AddDictionaryRef(obj);
                        }
                    }

                    if (linkNode.Count != 0)
                    {
                        linksNode.AddArrayNodeRef(linkName, linkNode, true);
                    }
                }
                if (linksNode.Count != 0)
                {
                    objNode.AddDictionaryNodeRef("Links", linksNode, true);
                }
                else
                {
                    objNode.AddDynamicValue("Links", new Dictionary <string, dynamic>(), true);
                }
            }
            else
            {
                objNode.AddDynamicValue("Links", new Dictionary <string, dynamic>(), true);
            }
        }