static internal object[] ConvertSpTableToRow(Classes.SeasonPlannerForDataTable spTable, SeasonPlannerDecision spDecisions) { object[] row = new object[32]; row[0] = spTable.SeasonRaceNumber; int trackId = DB.SeasonTrack.GetTrackId(spTable.SeasonRaceNumber); row[1] = DB.Track.ReadTrackFromDB(trackId).Name; row[2] = spTable.QualPosition; row[3] = spTable.RacePosition; row[4] = spDecisions.Training; row[5] = spDecisions.Testing; row[6] = spDecisions.TargetCarLevelEngBra; row[7] = spDecisions.TargetCarLevelOthers; row[8] = spDecisions.CT; row[9] = Math.Round(spTable.BalanceAfterRaceM, 2); //Car Parts Change row[10] = spTable.CarPartsChanged[0]; row[11] = spTable.CarPartsChanged[1]; row[12] = spTable.CarPartsChanged[2]; row[13] = spTable.CarPartsChanged[3]; row[14] = spTable.CarPartsChanged[4]; row[15] = spTable.CarPartsChanged[5]; row[16] = spTable.CarPartsChanged[6]; row[17] = spTable.CarPartsChanged[7]; row[18] = spTable.CarPartsChanged[8]; row[19] = spTable.CarPartsChanged[9]; row[20] = spTable.CarPartsChanged[10]; //Car Parts Wear row[21] = spTable.CarWearAfterRace[0]; row[22] = spTable.CarWearAfterRace[1]; row[23] = spTable.CarWearAfterRace[2]; row[24] = spTable.CarWearAfterRace[3]; row[25] = spTable.CarWearAfterRace[4]; row[26] = spTable.CarWearAfterRace[5]; row[27] = spTable.CarWearAfterRace[6]; row[28] = spTable.CarWearAfterRace[7]; row[29] = spTable.CarWearAfterRace[8]; row[30] = spTable.CarWearAfterRace[9]; row[31] = spTable.CarWearAfterRace[10]; return(row); }
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 }