예제 #1
0
        /// <summary>
        /// Go through our media/wheels/ directory and find all of the wheel definitions we have, then make dictionaries out of them
        /// and add them to our one big dictionary.		
        /// </summary>
        public void ReadWheelsFromFiles()
        {
            // since we can run this whenever (like when we're tweaking files), we want to clear our dictionary first
            wheels.Clear();

            // get all of the filenames of the files in media/wheels/
            IEnumerable<string> files = Directory.EnumerateFiles("media/vehicles/", "*.wheel", SearchOption.AllDirectories);

            foreach (string filename in files) {
                // I forgot ogre had this functionality already built in
                ConfigFile cfile = new ConfigFile();
                cfile.Load(filename, "=", true);

                // each .wheel file can have multiple [sections]. We'll use each section name as the wheel name
                ConfigFile.SectionIterator sectionIterator = cfile.GetSectionIterator();
                while (sectionIterator.MoveNext()) {
                    string wheelname = sectionIterator.CurrentKey;
                    // make a dictionary
                    var wheeldict = new Dictionary<string, float>();
                    // go over every property in the file and add it to the dictionary, parsing it as a float
                    foreach (KeyValuePair<string, string> pair in sectionIterator.Current) {
                        wheeldict.Add(pair.Key, float.Parse(pair.Value, culture));
                    }

                    wheels[wheelname] = wheeldict;
                }

                cfile.Dispose();
                sectionIterator.Dispose();
            }
        }
        /// <summary>
        /// Go through our media/physicsmaterials/ directory and find all of the material definitions we have, then make objects out
        /// of them and add them to our dictionary.
        /// </summary>
        public void ReadMaterialsFromFiles()
        {
            // since we can run this whenever (like when we're tweaking files), we want to clear this first
            materials.Clear();

            // get all of the filenames of the files in media/physicsmaterials
            IEnumerable<string> files = Directory.EnumerateFiles("media/physicsmaterials/", "*.physmat");

            foreach (string filename in files) {
                // rev up those files
                ConfigFile cfile = new ConfigFile();
                cfile.Load(filename, "=", true);

                ConfigFile.SectionIterator sectionIterator = cfile.GetSectionIterator();
                while (sectionIterator.MoveNext()) {
                    string matname = sectionIterator.CurrentKey;

                    PhysicsMaterial mat = new PhysicsMaterial {
                        Friction = float.Parse(cfile.GetSetting("Friction", matname, PhysicsMaterial.DEFAULT_FRICTION.ToString()), culture),
                        Bounciness = float.Parse(cfile.GetSetting("Bounciness", matname, PhysicsMaterial.DEFAULT_BOUNCINESS.ToString()), culture),
                        AngularDamping = float.Parse(cfile.GetSetting("AngularDamping", matname, PhysicsMaterial.DEFAULT_ANGULAR_DAMPING.ToString()), culture),
                        LinearDamping = float.Parse(cfile.GetSetting("LinearDamping", matname, PhysicsMaterial.DEFAULT_LINEAR_DAMPING.ToString()), culture),
                    };

                    materials[matname] = mat;
                }

                cfile.Dispose();
                sectionIterator.Dispose();
            }
        }
        /// <summary>
        /// Basically adds all of the resource locations but doesn't actually load anything.
        /// </summary>
        private static void InitResources()
        {
            ConfigFile file = new ConfigFile();
            file.Load("media/plugins/resources.cfg", "\t:=", true);
            ConfigFile.SectionIterator sectionIterator = file.GetSectionIterator();

            while (sectionIterator.MoveNext()) {
                string currentKey = sectionIterator.CurrentKey;
                foreach (KeyValuePair<string, string> pair in sectionIterator.Current) {
                    string key = pair.Key;
                    string name = pair.Value;
                    ResourceGroupManager.Singleton.AddResourceLocation(name, key, currentKey);
                }
            }

            file.Dispose();
            sectionIterator.Dispose();
        }
예제 #4
0
        /// <summary>
        /// Creates the folder and file if they don't exist, and either prints some data to it (if it doesn't exist) or reads from it (if it does)
        /// </summary>
        public static void Initialise()
        {
            SetupDictionaries();
            #if DEBUG
            string pkPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Ponykart";

            // if a folder doesn't exist there, create it
            if (!Directory.Exists(pkPath))
                Directory.CreateDirectory(pkPath);

            string optionsPath = pkPath + "\\options.ini";
            #else
            string optionsPath = "options.ini";
            #endif

            // create it if the file doesn't exist, and write out some defaults
            if (!File.Exists(optionsPath)) {
                using (FileStream stream = File.Create(optionsPath)) {
                    using (StreamWriter writer = new StreamWriter(stream)) {
                        foreach (KeyValuePair<string, string> pair in defaults) {
                            writer.WriteLine(pair.Key + "=" + pair.Value);
                        }
                    }
                }
                ModelDetail = ModelDetailOption.Medium;
            }
            // otherwise we just read from it
            else {
                ConfigFile cfile = new ConfigFile();
                cfile.Load(optionsPath, "=", true);

                ConfigFile.SectionIterator sectionIterator = cfile.GetSectionIterator();
                sectionIterator.MoveNext();
                foreach (KeyValuePair<string, string> pair in sectionIterator.Current) {
                    dict[pair.Key] = pair.Value;
                }
                ModelDetail = (ModelDetailOption) Enum.Parse(typeof(ModelDetailOption), dict["ModelDetail"], true);
                ShadowDetail = (ShadowDetailOption) Enum.Parse(typeof(ShadowDetailOption), dict["ShadowDetail"], true);

                cfile.Dispose();
                sectionIterator.Dispose();
            }

            #if DEBUG
            // since we sometimes add new options, we want to make sure the .ini file has all of them
            Save();
            #endif
        }