//Initiate void InitiateRaceTab() { PopulateNextTrackRaceComboBox(); Classes.RaceTab rt = DB.RaceTab.ReadRaceTabFromDB(); WriteRaceTabToForm(rt); PopulateDgvRaceTrack(); CreateDtRacingTimes(); }
void WriteRaceTabToForm(Classes.RaceTab rt) { cBoxNextRacingTrack.SelectedIndex = rt.SeasonTrackIndex; txtRaceLaps1.Text = rt.CustomLap1.ToString(); txtRaceLaps2.Text = rt.CustomLap2.ToString(); cBoxRaceCompound.SelectedIndex = rt.Compound; txtRaceCt.Text = rt.CT.ToString(); }
private void txtRaceLaps_TextChanged(object sender, EventArgs e) { if (finishedLoading) { int customLaps; if (!int.TryParse(((TextBox)sender).Text, out customLaps)) { customLaps = 0; } int fuelConsumption = 0; int tyreWear = 0; //Get Track details int distanceKm = int.Parse(dgvRaceTrack.Rows[0].Cells["DistanceKm"].Value.ToString()); int trackLaps = int.Parse(dgvRaceTrack.Rows[0].Cells["Laps"].Value.ToString()); float fuelConstant = float.Parse(dgvRaceTrack.Rows[0].Cells["Fuel Constant"].Value.ToString()); float lapDistance = distanceKm / trackLaps; Classes.Driver driver = ReadDriverFromForm(); Classes.Car car = ReadCarFromForm(); Classes.RaceTab rt = ReadRaceTabFromForm(); //If dry lap, perhaps adding a bool argument for rain in future fuelConsumption = (int)Classes.Fuel.ConsumptionDryLap(lapDistance, fuelConstant, (byte)(car.EngineLevel), (byte)car.ElectronicsLevel, (byte)driver.Experience, (byte)driver.TechnicalInsight, (byte)driver.Aggressiveness); int stintDistance = (int)(customLaps * lapDistance); float tyreDistance = TyreDistance( DB.Track.ReadTrackFromDB(rt.SeasonTrackIndex), ReadTyreFromSkillTab(), driver, car, rt); tyreWear = (int)(stintDistance / tyreDistance * 100); if (((TextBox)sender).Name == "txtRaceLaps1") { lblRaceFuel1.Text = (fuelConsumption * customLaps).ToString(); lblRaceTyre1.Text = tyreWear.ToString() + "%"; } else { lblRaceFuel2.Text = (fuelConsumption * customLaps).ToString(); lblRaceTyre2.Text = tyreWear.ToString() + "%"; } } }
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //Save RaceTab Classes.RaceTab rt = ReadRaceTabFromForm(); DB.RaceTab.UpdateRaceTabToDb(rt); //Save Practice Laps DB.Practise.ClearPractise(); DB.Practise.UpdatePractise(GetSetupsFromDataTablePractise()); //Save SpTab List <Classes.Track> trackList = ReadSeasonsTracksFromForm(); DB.SeasonTrack.UpdateTrackListToDb(trackList); SaveDgvSpToDB(); }
float TyreDistance(Classes.Track track, Classes.TyresSupplier tyre, Classes.Driver driver, Classes.Car car, Classes.RaceTab rt) { double tyreDistance = 1 / ( 0.008f + (int)track.TyresWear * 0.0011357f + rt.Temp * 0.000117f + tyre.Durability * -0.0003848391f + rt.Compound * -0.0022681289f + driver.Aggressiveness * 1.98713674683317E-06f + driver.Experience * -1.98047770495874E-06f + car.SuspensionLevel * -0.0001644978f + rt.CT * 2.58125503524434E-05f ); return((float)tyreDistance); }
float TyreDistance(Classes.Track track, Classes.TyresSupplier tyre, Classes.Driver driver, Classes.Car car, Classes.RaceTab rt, int compoundCode) { rt.Compound = compoundCode; return(TyreDistance(track, tyre, driver, car, rt)); }
void FillDgvRacingTimes() { //For Styling int[,] tyreWearArray = new int[5, 5]; //row, col Classes.RaceTab rt = ReadRaceTabFromForm(); int trackId = DB.SeasonTrack.GetTrackId(rt.SeasonTrackIndex + 1); Classes.Track track = DB.Track.ReadTrackFromDB(trackId); int supplierId = DB.ActiveTyreSupplier.GetTyreSupplierId(); Classes.TyresSupplier tyre = DB.Tyres.ReadTyreFromSupplierDB(supplierId); Classes.Car car = finishedLoading ? ReadCarFromForm() : DB.Car.ReadCarFromDB(); Classes.Driver driver = finishedLoading ? ReadDriverFromForm() : DB.Driver.ReadDriverFromDB(); float lapDistance = (float)track.DistanceKm / track.Laps; float totalFuel = GetFuelPerLap(track, car, driver, lapDistance) * track.Laps; float pitStopDriveTime = track.PitStopTime; float baseTime = track.baseTime; float tdc = track.TDCConstant * rt.Temp + tyre.TdcVariable; string[] o = new string[6]; for (int line = 0; line < 7; line++) { switch (line) { case 0: o[0] = "XSoft"; break; case 1: o[0] = "Soft"; break; case 2: o[0] = "Medium"; break; case 3: o[0] = "Hard"; break; case 4: o[0] = "Rain"; break; case 5: o[0] = "Fuel"; break; case 6: o[0] = "Laps/stop"; break; default: o[0] = "Error"; break; } for (int nStops = 0; nStops < 5; nStops++) { float stintDistance = (float)track.DistanceKm / (nStops + 1); if (line < 4) //Race Time { string raceTime = ""; float tyreDistance = TyreDistance(track, tyre, driver, car, rt, line); float tyreWear = stintDistance / tyreDistance * 100; if (tyreDistance > stintDistance) { int fuelPerStint = (int)(totalFuel / (1 + nStops)); raceTime = CalculateTotalRaceTime(nStops, fuelPerStint, track, tdc, tyre.WarmUpDistance, line, rt.Rain, rt.CT).ToString("0"); } tyreWearArray[line, nStops] = (int)tyreWear; o[nStops + 1] = raceTime; } else if (line == 5) //Fuel { int fuelPerStint = (int)(totalFuel / (1 + nStops)); string fuel = string.Format("{0:###.#}", fuelPerStint); o[nStops + 1] = fuel; } else if (line == 6) // Laps / Stint { string laps = string.Format("{0:##.#}", track.Laps / (nStops + 1)); o[nStops + 1] = laps; } } dtRacingTimes.Rows.Add(o); } dgvRacingTimes.DataSource = dtRacingTimes; foreach (DataGridViewColumn col in dgvRacingTimes.Columns) { col.Width = 45; } PaintDgvRacingTimesCells(tyreWearArray); }