public rFactorCarAerodynamics(IniScanner hdv) { _hdv = hdv; if (_hdv.Data.ContainsKey("FRONTWING")) { List <double> fw_factor = new List <double>(); foreach (string d in _hdv.TryGetData("FRONTWING", "FWDragParams")) { fw_factor.Add(double.Parse(d)); } Drag_FrontWing = new Polynomial(fw_factor); } if (_hdv.Data.ContainsKey("REARWING")) { List <double> fw_factor = new List <double>(); foreach (string d in _hdv.TryGetData("REARWING", "RWDragParams")) { fw_factor.Add(double.Parse(d)); } Drag_RearWing = new Polynomial(fw_factor); } if (_hdv.Data.ContainsKey("LEFTFENDER")) { List <double> fw_factor = new List <double>(); foreach (string d in _hdv.TryGetData("LEFTFENDER", "FenderDragParams")) { fw_factor.Add(double.Parse(d)); } Drag_LeftFender = new Polynomial(fw_factor); } if (_hdv.Data.ContainsKey("RIGHTFENDER")) { List <double> fw_factor = new List <double>(); foreach (string d in _hdv.TryGetData("RIGHTFENDER", "FenderDragParams")) { fw_factor.Add(double.Parse(d)); } Drag_RightFender = new Polynomial(fw_factor); } Drag_Body = hdv.TryGetDouble("BODYAERO", "BodyDragBase"); if (Drag_Body == 0) { Drag_Body = double.Parse(hdv.TryGetData("BODYAREO", "BodyDragBase")[0]); } Drag_BodyHeightAvg = hdv.TryGetDouble("BODYAREO", "BodyDragHeightAvg"); Drag_BodyHeightDiff = hdv.TryGetDouble("BODYAREO", "BodyDragHeightDiff"); Drag_Radiator = new Polynomial(0, hdv.TryGetDouble("BODYAREO", "RadiatorDrag")); Drag_BrakesDuct = new Polynomial(0, hdv.TryGetDouble("BODYAREO", "BrakeDuctDrag")); }
public rFactor2CarEngine(MAS2File file, IniScanner mHdv) { masfile = file; EngineTorque_Min = new Dictionary <double, double>(); EngineTorque_Max = new Dictionary <double, double>(); // Read the engine files. scanner = new IniScanner { IniData = file.Master.ExtractString(file) }; scanner.FireEventsForKeys = new List <string>(); scanner.FireEventsForKeys.Add("Main.rpmtorque"); scanner.HandleCustomKeys += new Signal(HandleEngineLine); scanner.Read(); string[] rpm_idle = scanner.TryGetData("Main", "IdleRPMLogic"); string[] rpm_max = scanner.TryGetData("Main", "RevLimitRange"); _maxRpm = Convert.ToDouble(rpm_max[0]) + Convert.ToDouble(rpm_max[2]) * Convert.ToDouble(rpm_max[1]); // With maximum limits. _idleRpm = Convert.ToDouble(rpm_idle[0]) + Convert.ToDouble(rpm_idle[1]); _idleRpm /= 2.0; _inertia = scanner.TryGetDouble("EngineInertia"); // TODO: add more data like cooling, radiator, etc. // Engine modes. string[] mode_range = scanner.TryGetData("Main", "EngineBoostRange"); string[] mode_effects = scanner.TryGetData("Main", "BoostEffects"); // Is there any EngineBoost defined? if (mode_effects.Length == 3) { modes = (int)Convert.ToDouble(mode_range[2]); mode_rpm = Convert.ToDouble(mode_effects[0]); mode_fuel = Convert.ToDouble(mode_effects[1]); mode_wear = Convert.ToDouble(mode_effects[2]); mode_torque = scanner.TryGetDouble("BoostTorque"); mode_power = scanner.TryGetDouble("BoostPower"); } else { modes = 1; } // RAM string[] ram_effects = scanner.TryGetData("Main", "RamEffects"); if (ram_effects.Length == 4) { ram_torque = Convert.ToDouble(ram_effects[0]); ram_power = Convert.ToDouble(ram_effects[1]); ram_fuel = Convert.ToDouble(ram_effects[2]); ram_wear = Convert.ToDouble(ram_effects[3]); } _maxRpmMode = new Dictionary <int, double>(); _engineModes = new Dictionary <int, string>(); for (int i = 1; i <= modes; i++) { _engineModes.Add(i, "Mode " + i); _maxRpmMode.Add(i, mode_rpm * i + MaxRPM); } }