Ejemplo n.º 1
0
 public static bool Load(IConfigurable target, string iniFile)
 {
     Debug.WriteLine("Loading configuration file " + iniFile);
     // Reset to default
     target.ResetParameters();
     try
     {
         // Load custom settings from INI file
         using (var ini = new IniReader(iniFile, true))
         {
             ini.AddHandler((x) =>
             {
                 if (target.AcceptsConfigs.Any(y => y == x.Group))
                 {
                     target.ApplyParameter(x);
                 }
             });
             ini.Parse();
         }
         return(true);
     }
     catch
     {
         Debug.WriteLine("Failed to load configuration from " + iniFile);
     }
     return(false);
     // DONE :)
 }
Ejemplo n.º 2
0
        public void TestRFM()
        {
            var readCalls = 0;
            var data      = new Dictionary <string, List <string> >();

            var reader = new IniReader(TestConstants.TestFolder + "F1CTDP05.rfm");

            reader.AddHandler(x =>
            {
                string group = x.NestedGroupName + "." + x.Key;

                // Do some ReadAs() tests.
                if (x.Key == "VehiclesDir")
                {
                    Assert.AreEqual(@"GAMEDATA\VEHICLES\CTDP\", x.ReadAsString());
                }
                if (x.Key == "PitGroup" && data.ContainsKey(group) == false)                       // do only on first entriy
                {
                    Assert.AreEqual(new string[2] {
                        "2", "Group1"
                    }, x.ReadAsStringArray());
                }

                if (data.ContainsKey(group))
                {
                    data[group].Add(x.RawValue);
                }
                else
                {
                    data.Add(group, new List <string>(new[] { x.RawValue }));
                }
                readCalls++;
                Debug.WriteLine(group + "=" + x.RawValue);
            });
            reader.Parse();

            Assert.AreEqual(144, readCalls);
            Assert.True(data.ContainsKey("Main.SceneOrder."));
            Assert.AreEqual(12, data["Main.SceneOrder."].Count);
            Assert.True(data.ContainsKey("Main.Season = CTDP F1 2005.SceneOrder."));
            Assert.AreEqual(14, data["Main.Season = CTDP F1 2005.SceneOrder."].Count);
            Assert.True(data.ContainsKey("Main.PitGroupOrder.PitGroup"));
            Assert.AreEqual(17, data["Main.PitGroupOrder.PitGroup"].Count);

            Assert.AreEqual("CTDP F1 2005", data["Main.Mod Name"][0]);
            Assert.AreEqual("*", data["Main.Track Filter"][0]);
            Assert.AreEqual("39001", data["Main.Matchmaker TCP Port"][0]);
        }
Ejemplo n.º 3
0
        public void TestTupleReadout()
        {
            var reader = new IniReader(TestConstants.TestFolder + "MP420_engine.ini");

            reader.AddHandler(x =>
            {
                if (x.Key == "IdleRPMLogic")
                {
                    Assert.AreEqual(3900.0f, x.ReadAsFloat(0));
                    Assert.AreEqual(4100.0f, x.ReadAsFloat(1));
                }
                if (x.Key == "LaunchEfficiency")
                {
                    Assert.AreEqual(0.92f, x.ReadAsFloat());
                    x.ReadAsFloat(0);
                    // shouldn't reach this
                    Assert.Fail("Exception failed");
                }
            });
            reader.Parse();
        }
Ejemplo n.º 4
0
        public void TestEngine()
        {
            var rpmTorques = 0;

            var reader = new IniReader(TestConstants.TestFolder + "MP420_engine.ini");

            reader.AddHandler(x =>
            {
                Debug.WriteLine(x.NestedGroupName + "." + x.Key + "=" + x.RawValue);


                if (x.Key == "RPMTorque")
                {
                    rpmTorques++;

                    switch (rpmTorques)
                    {
                    case 1:
                        Assert.AreEqual(0.0f, x.ReadAsFloat(0));
                        Assert.AreEqual(-37.0f, x.ReadAsFloat(1));
                        Assert.AreEqual(-37.0f, x.ReadAsFloat(2));
                        break;

                    case 33:
                        Assert.AreEqual(16000.0f, x.ReadAsFloat(0));
                        Assert.AreEqual(-163.7f, x.ReadAsFloat(1));
                        Assert.AreEqual(353.5f, x.ReadAsFloat(2));
                        break;

                    case 34:
                        Assert.AreEqual(16500.0, x.ReadAsDouble(0));
                        Assert.AreEqual(-169.9, x.ReadAsDouble(1));
                        Assert.AreEqual(350.8, x.ReadAsDouble(2));
                        break;

                    case 35:
                        Assert.AreEqual(17000, x.ReadAsDouble(0));
                        Assert.AreEqual(17000, x.ReadAsInteger(0));
                        Assert.AreEqual(-176.3, x.ReadAsDouble(1));
                        Assert.AreEqual(348.4, x.ReadAsDouble(2));
                        break;

                    case 47:
                        Assert.AreEqual(23000.0f, x.ReadAsFloat(0));
                        Assert.AreEqual(-401.9f, x.ReadAsFloat(1));
                        Assert.AreEqual(-294.3f, x.ReadAsFloat(2));
                        break;

                    default:
                        // Don't care about the others...
                        break;
                    }
                }

                if (x.Key == "FuelConsumption")
                {
                    float v = 2.755f / 100000.0f;
                    Assert.AreEqual(v, x.ReadAsFloat());
                }
                if (x.Key == "SpeedLimiter")
                {
                    Assert.AreEqual(1, x.ReadAsInteger());
                }
                if (x.Key == "OnboardStarter")
                {
                    Assert.AreEqual(0, x.ReadAsInteger());
                }
            });
            reader.Parse();

            Assert.AreEqual(47, rpmTorques);
        }
Ejemplo n.º 5
0
        public Car Get(string id)
        {
            string vehFile = path + id;

            // Helpers for other car parts.
            var hdvFile            = "";
            var engFile            = "";
            var engineName         = "";
            var engineManufacturer = "";

            string team = "", driver = "", description = "";
            int    number  = 0;
            var    classes = new List <string>();

            Debug.WriteLine("Car::Get(\"" + id + "\")");

            // Parse Vehicle File
            using (var vehIni = new IniReader(vehFile, true))
            {
                vehIni.AddHandler(x =>
                {
                    if (x.Key == "Team")
                    {
                        team = x.ReadAsString();
                    }
                    if (x.Key == "Driver")
                    {
                        driver = x.ReadAsString();
                    }
                    if (x.Key == "Description")
                    {
                        description = x.ReadAsString();
                    }
                    if (x.Key == "Number")
                    {
                        number = x.ReadAsInteger();
                    }
                    if (x.Key == "Classes")
                    {
                        classes.AddRange(x.ReadAsStringArray());
                    }
                    if (x.Key == "HDVehicle")
                    {
                        hdvFile = x.ReadAsString();
                    }
                    if (x.Key == "Engine")
                    {
                        engineName = x.ReadAsString();
                    }
                    if (x.Key == "Manufacturer")
                    {
                        engineManufacturer = x.ReadAsString();
                    }
                });

                vehIni.Parse();
            }

            // Create car object
            var carObj = new Car(id, team, driver, description, number);

            carObj.Assign(classes);

            hdvFile = SearchHDV(hdvFile);
            if (hdvFile == string.Empty)
            {
                throw new Exception("could not build this car, hdv file not found");
            }


            // Create other objects.
            using (var hdvIni = new IniReader(hdvFile, true))
            {
                hdvIni.AddHandler(x =>
                {
                    if (x.Key == "Normal" && x.Group == "ENGINE")
                    {
                        engFile = x.ReadAsString();
                    }
                });
                hdvIni.Parse();
            }

            engFile = SearchIni(engFile);
            if (engFile == string.Empty)
            {
                throw new Exception("could not build this car, engine file not found");
            }

            carObj.Assign(BuildEngine(engFile, engineName, engineManufacturer));

            return(carObj);
        }
Ejemplo n.º 6
0
        private Engine BuildEngine(string file, string name, string manufacturer)
        {
            var idleRpm      = new Range(0, 0);
            var maximumRpm   = new Range(0, 0);
            var engineMode   = new List <EngineMode>();
            var engineTorque = new List <EngineTorque>();

            // temporary helpers
            var lifetimeTime   = new NormalDistrbution(0, 0);
            var lifetimeRpm    = new NormalDistrbution(0, 0);
            var lifetimeOil    = new NormalDistrbution(0, 0);
            var lifetimeLength = 0.0f;

            var engineBoostModes  = 0.0f;
            var engineBoostScale  = new Range(0, 0);
            var engineBoostRpm    = 0.0f;
            var engineBoostFuel   = 0.0f;
            var engineBoostWear   = 0.0f;
            var engineBoostTorque = 0.0f;
            var engineBoostPower  = 0.0f;

            using (var engFile = new IniReader(file, true))
            {
                engFile.AddHandler(x =>
                {
                    if (x.Key == "RPMTorque")
                    {
                        engineTorque.Add(new EngineTorque(x.ReadAsFloat(0), x.ReadAsFloat(1), x.ReadAsFloat(2)));
                    }

                    if (x.Key == "IdleRPMLogic")
                    {
                        idleRpm = new Range(x.ReadAsFloat(0), x.ReadAsFloat(1));
                    }

                    if (x.Key == "RevLimitRange")
                    {
                        var minRpm           = x.ReadAsFloat(0);
                        var slopeRpm         = x.ReadAsFloat(1);
                        var rpmSlopeSettings = x.ReadAsInteger(2);
                        var maxRpm           = minRpm + slopeRpm * rpmSlopeSettings;

                        maximumRpm = new Range(minRpm, maxRpm, 0, slopeRpm);
                    }

                    if (x.Key == "EngineBoostRange")
                    {
                        engineBoostModes = x.ReadAsInteger(2);
                        engineBoostScale = new Range(x.ReadAsFloat(0), x.ReadAsFloat(1));
                    }

                    if (x.Key == "BoostEffects")
                    {
                        engineBoostRpm  = x.ReadAsFloat(0);
                        engineBoostFuel = x.ReadAsFloat(1);
                        engineBoostWear = x.ReadAsFloat(2);
                    }

                    if (x.Key == "BoostTorque")
                    {
                        engineBoostTorque = x.ReadAsFloat();
                    }
                    if (x.Key == "BoostPower")
                    {
                        engineBoostPower = x.ReadAsFloat();
                    }

                    if (x.Key == "LifetimeEngineRPM")
                    {
                        lifetimeRpm = new NormalDistrbution(x.ReadAsFloat(0), x.ReadAsFloat(1));
                    }
                    if (x.Key == "LifetimeOilTemp")
                    {
                        lifetimeOil = new NormalDistrbution(x.ReadAsFloat(0), x.ReadAsFloat(1));
                    }
                    if (x.Key == "LifetimeAvg")
                    {
                        lifetimeLength = x.ReadAsFloat();
                    }
                    if (x.Key == "LifetimeVar")
                    {
                        lifetimeTime = new NormalDistrbution(lifetimeLength, x.ReadAsFloat());
                    }
                });
                engFile.Parse();
            }

            // Combine read values:
            if (engineBoostModes > 0)
            {
                for (var mode = 0; mode < engineBoostModes; mode++)
                {
                    var factor = engineBoostScale.Minimum + mode * engineBoostScale.Span / engineBoostModes;

                    var rpmPlus    = factor * engineBoostRpm;
                    var fuelPlus   = factor * engineBoostScale.Maximum / engineBoostModes * engineBoostFuel;
                    var wearPlus   = factor * engineBoostWear;
                    var powerPlus  = factor * engineBoostPower;
                    var torquePlus = factor * engineBoostTorque;

                    engineMode.Add(new EngineMode(powerPlus, torquePlus, rpmPlus, fuelPlus, wearPlus));
                }
            }
            var lifetime = new EngineLifetime(lifetimeTime, lifetimeRpm, lifetimeOil);

            return(new Engine(name, manufacturer, 0, 0, idleRpm, maximumRpm, engineMode, engineTorque, lifetime));
        }