/// <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(); }
/// <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 }