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(); } } }
//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(); } } }
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); }
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 }