/// <summary> /// Loads an engine database from an XML container. /// </summary> /// <param name="container">The container to read engine elements from.</param> /// <returns>The built engine database.</returns> public static EngineDatabase LoadDatabase(XContainer container) { XMLSettingsGroupLoader loader = CreateSettingsGroupLoader(); var result = new EngineDatabase(); foreach (XElement elem in container.Elements("engine")) { string name = XMLUtil.GetStringAttribute(elem, "name"); string build = XMLUtil.GetStringAttribute(elem, "build"); var version = XMLUtil.GetNumericAttribute(elem, "version"); var versionAlt = XMLUtil.GetNumericAttribute(elem, "version", -1); string inherits = XMLUtil.GetStringAttribute(elem, "inherits", null); SettingsGroup settings = loader.LoadSettingsGroup(elem); if (!string.IsNullOrWhiteSpace(inherits)) { // Clone the base engine's settings and then import the new settings on top of it SettingsGroup baseSettings = result.FindEngineByName(inherits).Settings.DeepClone(); baseSettings.Import(settings); settings = baseSettings; } var desc = new EngineDescription(name, (int)version, (int)versionAlt, build, settings); result.RegisterEngine(desc); } return(result); }
private static XMLSettingsGroupLoader CreateSettingsGroupLoader() { var loader = new XMLSettingsGroupLoader(); loader.RegisterComplexSettingLoader("maxTeams", new XMLMaxTeamSetLoader()); loader.RegisterComplexSettingLoader("multiplayerObjects", new XMLMultiplayerObjectSetLoader()); return loader; }
private static XMLSettingsGroupLoader CreateSettingsGroupLoader() { var loader = new XMLSettingsGroupLoader(); loader.RegisterComplexSettingLoader("layouts", new XMLLayoutLoader()); loader.RegisterComplexSettingLoader("localeSymbols", new XMLLocaleSymbolLoader()); loader.RegisterComplexSettingLoader("stringIds", new XMLStringIDSetLoader()); loader.RegisterComplexSettingLoader("scripting", new XMLOpcodeLookupLoader()); loader.RegisterComplexSettingLoader("vertexLayouts", new XMLVertexLayoutLoader()); return loader; }
private static XMLSettingsGroupLoader CreateSettingsGroupLoader() { var loader = new XMLSettingsGroupLoader(); loader.RegisterComplexSettingLoader("layouts", new XMLLayoutLoader()); loader.RegisterComplexSettingLoader("localeSymbols", new XMLLocaleSymbolLoader()); loader.RegisterComplexSettingLoader("stringIds", new XMLStringIDSetLoader()); loader.RegisterComplexSettingLoader("scripting", new XMLOpcodeLookupLoader()); loader.RegisterComplexSettingLoader("vertexLayouts", new XMLVertexLayoutLoader()); return(loader); }