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); } }