public virtual void SetConfiguration(XDocument document) { Classes = new Dictionary<string, ClassDefinition>(); Fields = new List<FieldDefinition>(); foreach (XElement include in document.Root.Elements("Include")) { ClassDefinition classDefinition = new ClassDefinition(); classDefinition.SetConfiguration(include); if (classDefinition.Valid) { Classes.Add(classDefinition.Name, classDefinition); foreach (KeyValuePair<string, FieldDefinition> field in classDefinition.Fields) { Fields.Add(field.Value); } } } XElement extraRootElement = document.Root.Element("Extra"); if (extraRootElement != null) { foreach (XElement extraElement in extraRootElement.Elements("Field")) { FieldDefinition tmpDefinition = new FieldDefinition(); tmpDefinition.SetConfiguration(extraElement); if (!Classes.ContainsKey(tmpDefinition.ClassName)) { Debug.Log("ModAPI.Data", "The class \""+tmpDefinition.ClassName+"\" defined in Extra element is not included in this data package."); } else { ClassDefinition cl = Classes[tmpDefinition.ClassName]; if (!cl.Fields.ContainsKey(tmpDefinition.FieldName)) { Debug.Log("ModAPI.Data", "The field \""+tmpDefinition.FieldName+"\" in class \""+tmpDefinition.ClassName+"\" defined in Extra element either doesn't exist or is not included in this data package."); } else { cl.Fields[tmpDefinition.FieldName].SetConfiguration(tmpDefinition.Configuration); double offset = Convert.ToDouble(cl.Fields[tmpDefinition.FieldName].GetExtra("offset", "0")); if (offset != 0.0) { SetOffset(Fields.IndexOf(cl.Fields[tmpDefinition.FieldName]), offset); } //cl.Fields[tmpDefinition.FieldName].Extra = tmpDefinition.Extra; } } } } }
public void SetConfiguration(XElement element, ClassDefinition cl = null) { this.Configuration = element; Extra = new Dictionary<string,string>(); foreach (XAttribute attribute in element.Attributes()) { if (attribute.Name.LocalName.ToLower() == "class") ClassName = attribute.Value; else if (attribute.Name.LocalName.ToLower() == "field") FieldName = attribute.Value; else if (attribute.Name.LocalName.ToLower() == "name" && element.Name.LocalName.ToLower()=="field") FieldName = attribute.Value; else Extra.Add(attribute.Name.LocalName.ToLower(), attribute.Value); } if (cl != null) ClassName = cl.Name; if (ClassName == "" || FieldName == "") { Debug.Log("ModAPI.Data", "Invalid FieldDefinition: " + element.ToString(), Debug.Type.WARNING); } }