public static XmlLoadResponse <CreatureBehaviorSet> LoadAll(string baseDir) { var ret = new XmlLoadResponse <CreatureBehaviorSet>(); var imports = new Dictionary <string, CreatureBehaviorSet>(); foreach (var xml in GetXmlFiles(Path.Join(baseDir, DataDirectory))) { if (xml.Contains(".ignore")) { continue; } try { CreatureBehaviorSet set = LoadFromFile(xml); if (!string.IsNullOrEmpty(set.Import)) { imports.Add(xml, set); } else { ret.Results.Add(set); } } catch (Exception e) { ret.Errors.Add(xml, e.ToString()); } } // Now process imports. This could be made nicer foreach (var importset in imports) { var importedSet = ret.Results.FirstOrDefault(s => s.Name.ToLower() == importset.Value.Import.ToLower()); if (importedSet == null) { ret.Errors.Add(importset.Key, $"Referenced import set {importset.Value.Import} not found"); continue; } var newSet = importedSet.Clone <CreatureBehaviorSet>(); var resolved = importset.Value & newSet; resolved.Name = importset.Value.Name; ret.Results.Add(resolved); } return(ret); }
public static XmlLoadResponse <SpawnGroup> LoadAll(string baseDir) { var ret = new XmlLoadResponse <SpawnGroup>(); foreach (var xml in GetXmlFiles(Path.Join(baseDir, Directory))) { try { SpawnGroup group = LoadFromFile(xml); ret.Results.Add(group); } catch (Exception e) { ret.Errors.Add(xml, e.ToString()); } } return(ret); }
public static XmlLoadResponse <Creature> LoadAll(string baseDir) { var ret = new XmlLoadResponse <Creature>(); foreach (var xml in GetXmlFiles(Path.Join(baseDir, Directory))) { try { Creature c = LoadFromFile(xml); // Resolve subtypes foreach (var subtype in c.Types) { var creatureVariant = c & subtype; // xml is really annoying sometimes if (string.IsNullOrEmpty(creatureVariant.Name)) { ret.Errors.Add(xml, "subtype found with no name"); } else { ret.Results.Add(c); } } if (!string.IsNullOrEmpty(c.Name)) { ret.Results.Add(c); } else { ret.Errors.Add(xml, "Creature has no name"); } } catch (Exception e) { ret.Errors.Add(xml, e.ToString()); } } return(ret); }