コード例 #1
0
ファイル: ConfigurationUtils.cs プロジェクト: Alexof/BOB
        /// <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);
        }
コード例 #2
0
ファイル: ConfigurationUtils.cs プロジェクト: Alexof/BOB
        /// <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();
                }
            }
        }
コード例 #3
0
        /// <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");
            }
        }
コード例 #4
0
ファイル: ConfigurationUtils.cs プロジェクト: Alexof/BOB
        /// <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();
        }
コード例 #5
0
        /// <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");
            }
        }