public static GOrganizer.Classes.Track GetTrack() //Buenos Aires { //return GOrganizer.DB.Track.ReadTrackFromDB(trackId); //can't access DB GOrganizer.Classes.Track track = new GOrganizer.Classes.Track(); track.Name = "Buenos Aires"; track.DistanceKm = 306; track.Laps = 72; track.Power = 12; track.Handling = 11; track.Acceleration = 9; track.FuelConsumption = 0; track.FuelConstant = 1.31f; track.TyresWear = Levels.HighLow.High; track.PitStopTime = 19.5f; track.Downforce = Levels.HighLow.High; track.Overtake = Levels.EasyHard.Very_Hard; track.Suspension = Levels.HighLow.High; track.GripLevel = Levels.HighLow.Normal; track.NormalWingSplit = "+20/-20"; track.TDCConstant = 0.01418f; track.ChassisWearConstant = 22.4f; track.EngineWearConstant = 39.1f; track.FWingWearConstant = 17.5f; track.RWingWearConstant = 22.0f; track.UnderbodyWearConstant = 16.0f; track.SidepodsWearConstant = 13.7f; track.CoolingWearConstant = 18.7f; track.GearboxWearConstant = 41.1f; track.BrakesWearConstant = 51.9f; track.SuspensionWearConstant = 36.6f; track.ElectronicsWearConstant = 15.1f; return(track); }
//CRUD void CreateTrack() { Classes.Track track = ReadTrackFromTrackTab(); DB.Track.SaveTrackToDb(track); //AddTrackToTable Object[] formatedTrack = track.ConvertTrackToObjectArrayForDataTableRace(); dtTracks.Rows.Add(formatedTrack); }
float GetFuelPerLap(Classes.Track track, Classes.Car car, Classes.Driver driver, float lapDistance) { double fuelPerLap = lapDistance / ( track.FuelConstant + car.EngineLevel * 0.028 + car.ElectronicsLevel * 0.01 + driver.Experience * 0.00025 + driver.TechnicalInsight * 0.0005 - driver.Aggressiveness * 0.00015 ); //for dry races return((float)fuelPerLap); }
void UpdateTrack() { Classes.Track track = ReadTrackFromTrackTab(); DB.Track.UpdateTrackToDb(track); Object[] formatedTrack = track.ConvertTrackToObjectArrayForDataTableRace(); string expression = "Id Like '" + track.Id.ToString() + "'"; int index = dtTracks.Rows.IndexOf(dtTracks.Select(expression).First()); //DataRow row = dtTracks.Select("Id = " + track.Id).First(); dtTracks.Rows[index].ItemArray = formatedTrack; }
void bttSpGenerateNextSeason_Click(object sender, EventArgs e) { List <Classes.Track> trackList = DB.Track.ReadAllTracksFromDB(); Classes.Track[] nextSeasonTracks = new Classes.Track[17]; int nTracks = trackList.Count; Random r = new Random(); for (int raceNumber = 0; raceNumber < 17; raceNumber++) { int trackId = r.Next(nTracks); nextSeasonTracks[raceNumber] = DB.Track.ReadTrackFromDB(trackId); } FillNextSeasonTracksTextBoxes(nextSeasonTracks); }
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 CalculateTotalRaceTime(int nStops, int fuelPerStint, Classes.Track track, float tdc, int tyreWarmUpCode, int compoundCode, bool rain, int ct) { float pitStopRefuelling = 0.15f * fuelPerStint; //s float pitStopTyreChange = 15; float pitStopServiceTime = Math.Max(pitStopRefuelling, pitStopTyreChange); //Refuel + Tyre change float warmingTyres = tyreWarmUpCode * 1.8f; //s, depends on tyres float pitStopTotalTime = track.PitStopTime + pitStopServiceTime + warmingTyres; float fuelWeightImpact = 0.01f; float rainPaceDelay = 1.27f; float totalRaceTime = (track.baseTime + fuelPerStint * fuelWeightImpact + (compoundCode - 1) * tdc) * track.Laps; totalRaceTime *= (rain ? rainPaceDelay : 1); //slow pace due to rain totalRaceTime /= (float)(1 + 0.032 * ct); //CT Risk pace change totalRaceTime += warmingTyres + nStops * pitStopTotalTime; //Include start up warming up and Pit Stops return(totalRaceTime); }
Classes.Track ReadTrackFromTrackTab() { int id = 0; if (txtIdTrack.Text != "") { id = int.Parse(txtIdTrack.Text); } string name = txtNameTrack.Text; int distanceKm = 1; int.TryParse(txtDistanceKmTrack.Text, out distanceKm); int laps = 1; int.TryParse(txtLapsTrack.Text, out laps); int power = 1; int.TryParse(txtPTrack.Text, out power); int handling = 1; int.TryParse(txtHTrack.Text, out handling); int acceleration = 1; int.TryParse(txtATrack.Text, out acceleration); int fuelConsumption = cBoxFuelConsumption.SelectedIndex; Single fuelConstant = 1; Single.TryParse(txtFuelConstantTrack.Text, out fuelConstant); int tyreWear = cBoxTyreWearTrack.SelectedIndex; Single pitStopTime = 1; Single.TryParse(txtPitStopTrack.Text, out pitStopTime); int downforce = cBoxDownforceTrack.SelectedIndex; int overtake = cBoxOvertakeTrack.SelectedIndex; int suspension = cBoxSuspensionTrack.SelectedIndex; int gripLevel = cBoxGripLevelTrack.SelectedIndex; string WS = txtWSTrack.Text; Single tdcConstant = 1; Single.TryParse(txtTdcConstant.Text, out tdcConstant); Classes.Track track = new Classes.Track( id, name, distanceKm, laps, power, handling, acceleration, (Levels.HighLow)fuelConsumption, fuelConsumption, pitStopTime, (Levels.HighLow)tyreWear, (Levels.HighLow)downforce, (Levels.EasyHard)overtake, (Levels.HighLow)suspension, (Levels.HighLow)gripLevel, WS, tdcConstant ); float chassisWearConstant = 0; float.TryParse(txtChassisWearConstant.Text, out chassisWearConstant); float engineWearConstant = 0; float.TryParse(txtEngineWearConstant.Text, out engineWearConstant); float fWingWearConstant = 0; float.TryParse(txtFWingWearConstant.Text, out fWingWearConstant); float rWingWearConstant = 0; float.TryParse(txtRWingWearConstant.Text, out rWingWearConstant); float underbodyWearConstant = 0; float.TryParse(txtUnderbodyWearConstant.Text, out underbodyWearConstant); float sidepodsWearConstant = 0; float.TryParse(txtSidepodsWearConstant.Text, out sidepodsWearConstant); float coolingWearConstant = 0; float.TryParse(txtCoolingWearConstant.Text, out coolingWearConstant); float gearboxWearConstant = 0; float.TryParse(txtGearboxWearConstant.Text, out gearboxWearConstant); float brakesWearConstant = 0; float.TryParse(txtBrakesWearConstant.Text, out brakesWearConstant); float suspensionWearConstant = 0; float.TryParse(txtSuspensionWearConstant.Text, out suspensionWearConstant); float electronicsWearConstant = 0; float.TryParse(txtElectronicsWearConstant.Text, out electronicsWearConstant); track.SetWearConstants( chassisWearConstant, engineWearConstant, fWingWearConstant, rWingWearConstant, underbodyWearConstant, sidepodsWearConstant, coolingWearConstant, gearboxWearConstant, brakesWearConstant, suspensionWearConstant, electronicsWearConstant ); return(track); }
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); }