/// <summary> /// Returns a list of valid BOB config files in the configuration directory. /// </summary> /// <returns>Fastlis of valid BOB config file names, sorted alphabetically</returns> internal static FastList <object> GetConfigFastList() { List <string> fileList = new List <string>(); // Get BOB directory. if (Directory.Exists(ConfigDirectory)) { // Directory exists; parse each file in directory, looking for xml. string[] fileNames = Directory.GetFiles(ConfigDirectory, "*.xml"); for (int i = 0; i < fileNames.Length; ++i) { // Local reference. string fileName = fileNames[i]; try { // Try to read the file as a BOB configuration file. using (StreamReader reader = new StreamReader(fileName)) { BOBConfigurationFile configFile = (BOBConfigurationFile) new XmlSerializer(typeof(BOBConfigurationFile)).Deserialize(reader); //if (configFile != null) { // Found valid config file; add to list. fileList.Add(Path.GetFileNameWithoutExtension(fileName)); } } } catch (Exception e) { Logging.LogException(e, "exception reading local config file ", fileName); } } } FastList <object> fastList = new FastList <object>() { m_buffer = fileList.OrderBy(x => x).ToArray(), m_size = fileList.Count() }; return(fastList); }
/// <summary> /// Loads configuration from the specified configuration file. /// </summary> /// <param name="config">Configuration name; null for default file (default null)</param> internal static void LoadConfig(string config = null) { // Default file location is the general config file. string fileName = GeneralConfigFile; try { // See if we've got an assigned custom config. if (config == null) { // No assigned custom config; check if general config exists in userdir. if (!File.Exists(fileName)) { // Userdir config doesn't exist; try copying file from application directory. if (File.Exists(GeneralConfigName)) { fileName = GeneralConfigName; } } } else { // Custom config provided - use this filename in the configuration settings directory. fileName = FullConfigPath(config); } // Check to see if configuration file exists. if (File.Exists(fileName)) { // Read it. using (StreamReader reader = new StreamReader(fileName)) { CurrentConfig = (BOBConfigurationFile) new XmlSerializer(typeof(BOBConfigurationFile)).Deserialize(reader); // If we couldn't read it, log error and create new empty config. if (CurrentConfig == null) { Logging.Error("couldn't deserialize settings file"); CurrentConfig = new BOBConfigurationFile(); return; } // Deserialise random prefabs. RandomPrefabs.DeserializeRandomProps(CurrentConfig.randomProps); RandomPrefabs.DeserializeRandomTrees(CurrentConfig.randomTrees); // Deserialize scaling. Scaling.Instance.DeserializeProps(CurrentConfig.propScales); Scaling.Instance.DeserializeTrees(CurrentConfig.treeScales); // Deserialize all-building replacements. AllBuildingReplacement.Instance.Deserialize(CurrentConfig.allBuildingProps); // Deserialise building replacements. BuildingReplacement.Instance.Deserialize(CurrentConfig.buildings); // Deserialise individual building prop replacements. IndividualBuildingReplacement.Instance.Deserialize(CurrentConfig.indBuildings); // Deserialise all-network replacements. AllNetworkReplacement.Instance.Deserialize(CurrentConfig.allNetworkProps); // Deserialise network replacements. NetworkReplacement.Instance.Deserialize(CurrentConfig.networks); // Deserialise individual network replacements. IndividualNetworkReplacement.Instance.Deserialize(CurrentConfig.indNetworks); // Deserialise active replacement packs. NetworkPackReplacement.Instance.DeserializeActivePacks(CurrentConfig.activePacks); } } else { Logging.Message("configuration file ", fileName ?? "null", " not found"); // Create a new empty configuration file record. CurrentConfig = new BOBConfigurationFile(); } } catch (Exception e) { Logging.LogException(e, "exception reading XML configuration file ", fileName ?? "null"); // If we didn't even get as far as creating a configuration file instanece, create a new blank one now. if (CurrentConfig == null) { CurrentConfig = new BOBConfigurationFile(); } } }
/// <summary> /// Loads configuration from the specified configuration file. /// </summary> /// <param name="config">Configuration name; null for default file (default null)</param> internal static void LoadConfig(string config = null) { try { // Set file location to save to. string fileName; if (config == null) { // No file name provided; use general settings file. fileName = GeneralSettingsFile; } else { // Filename provided - use this filename in the configuration settings directory. fileName = FullConfigPath(config); } // Check to see if configuration file exists. if (File.Exists(fileName)) { // Read it. using (StreamReader reader = new StreamReader(fileName)) { BOBConfigurationFile configFile = (BOBConfigurationFile) new XmlSerializer(typeof(BOBConfigurationFile)).Deserialize(reader); if (configFile == null) { Logging.Error("couldn't deserialize settings file"); return; } // Deserialise random prefabs. PrefabLists.DeserializeRandomProps(configFile.randomProps); PrefabLists.DeserializeRandomTrees(configFile.randomTrees); // Deserialize all-building replacements. DeserializeAllBuilding(configFile.allBuildingProps); // Deserialise building replacements, per building. foreach (BOBBuildingElement building in configFile.buildings) { DeserializeBuilding(building); } // Deserialise individual building prop replacements, per building. foreach (BOBBuildingElement building in configFile.indBuildings) { DeserializeIndividual(building); } // Deserialise all-network replacements. DeserializeAllNetwork(configFile.allNetworkProps); // Deserialise network replacements, per network. foreach (BOBNetworkElement network in configFile.networks) { DeserializeNetwork(network); } // Deserialise active replacement packs. PackReplacement.instance.DeserializeActivePacks(configFile.activePacks); } } else { Logging.Message("no configuration file found"); } } catch (Exception e) { Logging.LogException(e, "exception reading XML configuration file"); } }
/// <summary> /// Save current configuration to the specified config file. /// </summary> /// <param name="config">Configuration file name; null for default file (default null)</param> /// <param name="clean">Set to true to generate a blank file (default false)</param> internal static void SaveConfig(string config = null, bool clean = false) { // Default file location is the general config file. string fileName = GeneralConfigFile; try { // Check if we've got an assigned custom config. if (config != null) { // Custom config assigned - use this filename in the configuration settings directory (creating directory if it doesn't already exist). if (!Directory.Exists(ConfigDirectory)) { Directory.CreateDirectory(ConfigDirectory); } fileName = FullConfigPath(config); } // Open specified file. using (StreamWriter textWriter = new StreamWriter(fileName, append: false)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(BOBConfigurationFile)); // Create new config if there isn't one. if (CurrentConfig == null) { CurrentConfig = new BOBConfigurationFile { // Version 1. version = 1 }; } // Don't populate file if we're doing a clean save. if (!clean) { // Serialise scales. try { CurrentConfig.propScales = Scaling.Instance.propScales.Values.ToList(); CurrentConfig.treeScales = Scaling.Instance.treeScales.Values.ToList(); } catch (Exception e) { // Don't let a single failure stop us. Logging.LogException(e, "exception serializing scaling elements"); } // Serialise active replacement packs. try { CurrentConfig.activePacks = NetworkPackReplacement.Instance.SerializeActivePacks(); } catch (Exception e) { // Don't let a single failure stop us. Logging.LogException(e, "exception serializing active replacement packs"); } } // Write to file. xmlSerializer.Serialize(textWriter, CurrentConfig); // Delete any old config. if (File.Exists(GeneralConfigName)) { File.Delete(GeneralConfigName); } } } catch (Exception e) { Logging.LogException(e, "exception saving XML configuration file ", fileName ?? "null"); } // Display any exception message that occured during save. InfoPanelManager.CheckException(); }
/// <summary> /// Save current configuration to the specified config file. /// </summary> /// <param name="config">Configuration file name; null for default file (default null)</param> /// <param name="clean">Set to true to generate a blank file (default false)</param> internal static void SaveConfig(string config = null, bool clean = false) { try { // Set file location to save to. string fileName; if (config == null) { // No file name provided; use general settings file. fileName = GeneralSettingsFile; } else { // Filename provided - use this filename in the configuration settings directory (creating directory if it doesn't already exist). if (!Directory.Exists(ConfigDirectory)) { Directory.CreateDirectory(ConfigDirectory); } fileName = FullConfigPath(config); } // Open specified file. using (StreamWriter textWriter = new StreamWriter(fileName, append: false)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(BOBConfigurationFile)); BOBConfigurationFile configFile = new BOBConfigurationFile { // Version 1. version = 1 }; // Don't populate file if we're doing a clean save. if (!clean) { // Serialise random prefabs. configFile.randomProps = PrefabLists.SerializeRandomProps(); configFile.randomTrees = PrefabLists.SerializeRandomTrees(); // Serialise all-building replacements. configFile.allBuildingProps = AllBuildingReplacement.replacements.Values.ToList(); // Serialise building replacements, per building. configFile.buildings = new List <BOBBuildingElement>(); foreach (BuildingInfo building in BuildingReplacement.instance.replacements.Keys) { // Create new element. configFile.buildings.Add(new BOBBuildingElement { building = building.name, replacements = BuildingReplacement.instance.replacements[building].Values.ToList() }); } // Serialise individual building prop replacements, per building. configFile.indBuildings = new List <BOBBuildingElement>(); foreach (BuildingInfo building in IndividualReplacement.instance.replacements.Keys) { // Create new element. configFile.indBuildings.Add(new BOBBuildingElement { building = building.name, replacements = IndividualReplacement.instance.replacements[building].Values.ToList() }); } // Serialise all-network replacements. configFile.allNetworkProps = AllNetworkReplacement.instance.replacements.Values.ToList(); // Serialise network replacements, per network. configFile.networks = new List <BOBNetworkElement>(); foreach (NetInfo network in NetworkReplacement.instance.replacements.Keys) { // Create new element. configFile.networks.Add(new BOBNetworkElement { network = network.name, replacements = NetworkReplacement.instance.replacements[network].Values.ToList() }); } // Serialise active replacement packs. configFile.activePacks = PackReplacement.instance.SerializeActivePacks(); } // Write to file. xmlSerializer.Serialize(textWriter, configFile); } } catch (Exception e) { Logging.LogException(e, "exception saving XML configuration file"); } }