Exemple #1
0
        internal void DoTesting(Classes.TechnicalDirector td, Classes.Track track, Classes.StaffFacilities sf)
        {
            UpdateCarWearAfterTesting(td, sf);

            CCPoints          = CCPoints * 0.95f + EngineeringPoints * (2.1f);
            EngineeringPoints = RDPoints * (73f + 0.03f * sf.Technicalskill + 0.02f * sf.Efficiency + 0.02f * sf.RDworkshop + 0.02f * sf.Engineeringworkshop + 0.05f * sf.Alloyandchemicallab);
            RDPoints          = TestPoints * (80 + 0.7f + td.Experience * .01f + td.RDaerodynamics * 0.01f + td.RDelectronics * 0.01f + td.RDmechanics * 0.01f +
                                              sf.Technicalskill * 0.2f + 0.1f * sf.Efficiency + 0.2f * sf.Windtunnel);
            TestPoints = 0;
        }
        public static void UpdateStaffFacilitiesToDb(Classes.StaffFacilities sf)
        {
            string connectionString = Constants.connectionString;

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand command = conn.CreateCommand())
                {
                    command.CommandText = "UPDATE StaffFacilities SET " +
                                          "Experience = @Experience, " +
                                          "Motivation = @Motivation, " +
                                          "Technicalskill = @Technicalskill, " +
                                          "Stresshandling = @Stresshandling, " +
                                          "Concentration = @Concentration, " +
                                          "Efficiency = @Efficiency, " +
                                          "Windtunnel = @Windtunnel, " +
                                          "Pitstoptrainingcenter = @Pitstoptrainingcenter, " +
                                          "RDworkshop = @RDworkshop, " +
                                          "RDdesigncenter = @RDdesigncenter, " +
                                          "Engineeringworkshop = @Engineeringworkshop, " +
                                          "Alloyandchemicallab = @Alloyandchemicallab, " +
                                          "Commercial = @Commercial " +

                                          "WHERE Id = @Id";

                    command.Parameters.Clear();

                    command.Parameters.AddWithValue("@Experience", sf.Experience);
                    command.Parameters.AddWithValue("@Motivation", sf.Motivation);
                    command.Parameters.AddWithValue("@Technicalskill", sf.Technicalskill);
                    command.Parameters.AddWithValue("@Stresshandling", sf.Stresshandling);
                    command.Parameters.AddWithValue("@Concentration", sf.Concentration);
                    command.Parameters.AddWithValue("@Efficiency", sf.Efficiency);
                    command.Parameters.AddWithValue("@Windtunnel", sf.Windtunnel);
                    command.Parameters.AddWithValue("@Pitstoptrainingcenter", sf.Pitstoptrainingcenter);
                    command.Parameters.AddWithValue("@RDworkshop", sf.RDworkshop);
                    command.Parameters.AddWithValue("@RDdesigncenter", sf.RDdesigncenter);
                    command.Parameters.AddWithValue("@Engineeringworkshop", sf.Engineeringworkshop);
                    command.Parameters.AddWithValue("@Alloyandchemicallab", sf.Alloyandchemicallab);
                    command.Parameters.AddWithValue("@Commercial", sf.Commercial);

                    command.Parameters.AddWithValue("@Id", sf.Id);

                    conn.Open();

                    command.ExecuteNonQuery();

                    conn.Close();
                }
            }
        }
Exemple #3
0
 //Inaccurate values here, wear should be a function of the track
 private void UpdateCarWearAfterTesting(Classes.TechnicalDirector td, Classes.StaffFacilities sf)
 {
     ChassisWear     += 10;
     EngineWear      += 10;
     FWingWear       += 10;
     RWingWear       += 10;
     UnderbodyWear   += 10;
     SidepodsWear    += 10;
     CoolingWear     += 10;
     GearboxWear     += 10;
     BrakesWear      += 10;
     SuspensionWear  += 10;
     ElectronicsWear += 10;
 }
        public static Classes.StaffFacilities ReadStaffFacilitiesFromDB()
        {
            string connectionString = Constants.connectionString;

            Classes.StaffFacilities sf = new Classes.StaffFacilities();

            string query = "SELECT * FROM StaffFacilities WHERE Id=1";

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand command = new SqlCommand(query, conn))
                {
                    conn.Open();

                    SqlDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        sf.Id = int.Parse(reader[0].ToString());

                        sf.Experience            = int.Parse(reader[1].ToString());
                        sf.Motivation            = int.Parse(reader[2].ToString());
                        sf.Technicalskill        = int.Parse(reader[3].ToString());
                        sf.Stresshandling        = int.Parse(reader[4].ToString());
                        sf.Concentration         = int.Parse(reader[5].ToString());
                        sf.Efficiency            = int.Parse(reader[6].ToString());
                        sf.Windtunnel            = int.Parse(reader[7].ToString());
                        sf.Pitstoptrainingcenter = int.Parse(reader[8].ToString());
                        sf.RDworkshop            = int.Parse(reader[9].ToString());
                        sf.RDdesigncenter        = int.Parse(reader[10].ToString());
                        sf.Engineeringworkshop   = int.Parse(reader[11].ToString());
                        sf.Alloyandchemicallab   = int.Parse(reader[12].ToString());
                        sf.Commercial            = int.Parse(reader[13].ToString());
                    }

                    conn.Close();
                }
            }

            return(sf);
        }
        public static void SaveStaffFacilitiesToDb(Classes.StaffFacilities sf)
        {
            string connectionString = Constants.connectionString;

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlCommand command = conn.CreateCommand())
                {
                    command.CommandText = "INSERT INTO StaffFacilities VALUES (" +
                                          "@Experience, @Motivation, @Technicalskill, @Stresshandling, @Concentration, " +
                                          "@Efficiency, @Windtunnel,	@Pitstoptrainingcentre, @RDWorkshop, @RDdesigncenter "+
                                          "@Engineeringworkshop, @Alloyandchemicallab, @Commercial" +
                                          ")";

                    command.Parameters.Clear();

                    command.Parameters.AddWithValue("@", sf.Experience);
                    command.Parameters.AddWithValue("@", sf.Motivation);
                    command.Parameters.AddWithValue("@", sf.Technicalskill);
                    command.Parameters.AddWithValue("@", sf.Stresshandling);
                    command.Parameters.AddWithValue("@", sf.Concentration);
                    command.Parameters.AddWithValue("@", sf.Efficiency);
                    command.Parameters.AddWithValue("@", sf.Windtunnel);
                    command.Parameters.AddWithValue("@", sf.Pitstoptrainingcenter);
                    command.Parameters.AddWithValue("@", sf.RDworkshop);
                    command.Parameters.AddWithValue("@", sf.RDdesigncenter);
                    command.Parameters.AddWithValue("@", sf.Engineeringworkshop);
                    command.Parameters.AddWithValue("@", sf.Alloyandchemicallab);
                    command.Parameters.AddWithValue("@", sf.Commercial);


                    conn.Open();

                    command.ExecuteNonQuery();

                    conn.Close();
                }
            }
        }
Exemple #6
0
        static Classes.Car GetCarAfterPartsChangeAndWear(Classes.Car car, bool testing, Classes.Track track,
                                                         Classes.Driver driver, Classes.TechnicalDirector td, Classes.StaffFacilities sf, int ct, int[] carPartsBought)
        {
            Classes.Car carAfterWear = (Classes.Car)car.Clone(); //all properties are value type

            carAfterWear.UpdateCarWearAndLevelAfterCarUpdate(carPartsBought);

            carAfterWear.UpdateCarWearAfterRace(track, driver, ct);
            if (testing)
            {
                carAfterWear.DoTesting(td, track, sf);
            }

            return(carAfterWear);
        }
Exemple #7
0
        static internal SeasonPlannerFullLine ProcessSeasonPlanner(SeasonPlannerFullLine spFull)
        {
            #region  Initial Values
            Classes.RaceTab rt = spFull.spOptimizer.raceTab;
            Classes.SeasonPlannerForDataTable spForDataTable = spFull.spTable; //null. Filled later
            Classes.TechnicalDirector         td             = spFull.spOptimizer.technicalDirector;
            Classes.Car             car          = (Classes.Car)spFull.spOptimizer.car.Clone();
            Classes.Car             carAfterRace = (Classes.Car)car.Clone();
            Classes.Driver          driver       = spFull.spOptimizer.driver;
            int                     trackId      = DB.SeasonTrack.GetTrackId(spFull.spTable.SeasonRaceNumber);
            Classes.Track           track        = DB.Track.ReadTrackFromDB(trackId);
            Classes.StaffFacilities sf           = spFull.spOptimizer.staffFacilities;
            Classes.TyresSupplier   tyre         = DB.Tyres.ReadActiveTyreSupplierFromDB();

            int seasonRaceNumber = rt.SeasonTrackIndex;
            //float balanceM = spFull.spTab.StartingBalanceM;
            float balanceM       = spFull.spTable.BalanceAfterRaceM;
            int[] carPartsBought = new int[11];

            Divisions division = (Divisions)spFull.spTab.Division;

            int  trainning       = (int)spFull.spDecisions.Training;
            bool testing         = spFull.spDecisions.Testing;
            int  targetCarLevel  = spFull.spDecisions.TargetCarLevelEngBra;
            int  targetCarLevel2 = spFull.spDecisions.TargetCarLevelOthers;
            int  ct = spFull.spDecisions.CT;
            #endregion

            #region Process
            carAfterRace.UpdateCarWearAfterRace(track, driver, ct);

            if (testing)
            {
                carAfterRace.DoTesting(td, track, sf);
            }
            carPartsBought = GetWhichCarPartsChange(car, carAfterRace, targetCarLevel, targetCarLevel2);

            carAfterRace = (Classes.Car)car.Clone();
            carAfterRace = GetCarAfterPartsChangeAndWear(car, testing, track, driver, td, sf, ct, carPartsBought);

            int qualPosition = SpHelper.GetQualPosition(driver, car, division);
            int racePosition = SpHelper.GetRacePosition(driver, car, division, ct);
            int racePoints   = SpHelper.GetPoints(racePosition);

            //Expenses processing
            float balanceAfterRaceM = ((balanceM * 1000000) + GetAfterRaceBalance(driver, td, sf, testing, tyre, car, division, qualPosition, racePosition, trainning, carPartsBought)) / 1000000f;
            #endregion

            #region Output
            SeasonPlannerDecision spDecisionsNext = new SeasonPlannerDecision();
            spDecisionsNext = (Classes.SeasonPlannerDecision)spFull.spDecisions.Clone();

            SeasonPlannerForDataTable spTableNext = new SeasonPlannerForDataTable();
            spTableNext.SeasonRaceNumber  = spFull.spTable.SeasonRaceNumber + 1;
            spTableNext.BalanceAfterRaceM = balanceAfterRaceM;
            spTableNext.CarPartsChanged   = carPartsBought;
            spTableNext.CarWearAfterRace  = carAfterRace.GetWears();
            spTableNext.QualPosition      = qualPosition;
            spTableNext.RacePosition      = racePosition;

            SeasonPlannerForOptimizer spOptimizerNext = new SeasonPlannerForOptimizer();
            spOptimizerNext.car = (Classes.Car)carAfterRace.Clone();

            driver.DoTrainning((DriverTrainning)trainning);
            driver.DriverUpdateAfterRace(racePosition);
            spOptimizerNext.driver            = driver;
            spOptimizerNext.Id                = spFull.spOptimizer.Id + 1;
            spOptimizerNext.raceTab           = rt; //How to update trackId?
            spOptimizerNext.staffFacilities   = sf; //To Do: Update sf after races (convert levels to float type)
            spOptimizerNext.technicalDirector = td;

            SeasonPlannerTab spTabNext = new SeasonPlannerTab();
            spTabNext.CurrentPoints    = spFull.spTab.CurrentPoints + racePoints;
            spTabNext.Division         = spFull.spTab.Division;
            spTabNext.StartingBalanceM = balanceAfterRaceM;
            spTabNext.TargetPoints     = spFull.spTab.TargetPoints;

            SeasonPlannerFullLine spFullNext = new SeasonPlannerFullLine(spDecisionsNext, spTableNext, spOptimizerNext, spTabNext);

            return(spFullNext);

            #endregion
        }