Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        //CRUD
        void CreateTrack()
        {
            Classes.Track track = ReadTrackFromTrackTab();

            DB.Track.SaveTrackToDb(track);

            //AddTrackToTable
            Object[] formatedTrack = track.ConvertTrackToObjectArrayForDataTableRace();
            dtTracks.Rows.Add(formatedTrack);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
 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));
 }
Esempio n. 10
0
        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);
        }