private static void LoadWalls(XmlDocument document) { XmlNodeList entities = document.GetElementsByTagName("wall"); foreach (XmlElement element in entities) { string name = element.GetAttribute("name"); string shortName = element.GetAttribute("shortname"); float scale = float.Parse(element.GetAttribute("scale")); bool unique = VerifyShortName(shortName); if (!unique) { Debug.LogWarning("Shortname " + shortName + " already exists, aborting"); continue; } string type = element.GetAttribute("type"); bool houseWall = type == "house" || type == "arch"; bool arch = type == "arch"; bool archBuildable = type == "lowfence"; Model bottomModel = null; Model normalModel = null; TextureReference icon = null; Color color = Color.white; List <string[]> categories = new List <string[]>(); Materials materials = null; foreach (XmlElement child in element) { switch (child.LocalName) { case "model": Model model = new Model(child, LayerMasks.WallLayer); if (model.Tag == "bottom") { bottomModel = model; } else { normalModel = model; } break; case "category": categories.Add(child.InnerText.Split('/')); break; case "color": float r = float.Parse(child.GetAttribute("r"), CultureInfo.InvariantCulture); float g = float.Parse(child.GetAttribute("g"), CultureInfo.InvariantCulture); float b = float.Parse(child.GetAttribute("b"), CultureInfo.InvariantCulture); color = new Color(r, g, b); break; case "materials": materials = new Materials(child); break; case "icon": icon = TextureReference.GetTextureReference(child.GetAttribute("location")); break; } } if (bottomModel == null) { bottomModel = normalModel; } WallData data = ScriptableObject.CreateInstance <WallData>(); data.Initialize(bottomModel, normalModel, name, shortName, color, scale, houseWall, arch, archBuildable, materials, icon); Database.Walls[shortName] = data; foreach (string[] category in categories) { IconUnityListElement iconListElement = (IconUnityListElement)GuiManager.Instance.WallsTree.Add(data, category); iconListElement.TextureReference = icon; } } }