public void DefaultByPeakRpm()
{
tableGear = new Dictionary<int, Dictionary<double, int>>();
tableThrottle = new Dictionary<int, Dictionary<double, double>>();
// Make sure there are 20 rpm steps, and 20 load steps
// (20x20 = 400 items)
for (int speed = 0; speed <= MaximumSpeed; speed += 1)
{
tableGear.Add(speed, new Dictionary<double, int>());
tableThrottle.Add(speed, new Dictionary<double, double>());
for (var load = 0.0; load <= 1.0; load += 0.1)
{
tableThrottle[speed].Add(load, 1);
var gearSet = false;
var latestGearThatWasNotStalling = 1;
var shiftRpm = Drivetrain.StallRpm + (Drivetrain.MaximumRpm - 700 - Drivetrain.StallRpm) * load;
//shiftRpm = 3000 + (Drivetrain.MaximumRpm - 3000-1000) * load;
for (int gear = 0; gear < Drivetrain.Gears; gear++)
{
var calculatedRpm = Drivetrain.GearRatios[gear] * speed;
if (calculatedRpm < Drivetrain.StallRpm*1.75)
{
continue;
}
latestGearThatWasNotStalling = gear;
if (calculatedRpm > shiftRpm) continue;
gearSet = true;
tableGear[speed].Add(load, gear + 1);
break;
}
if (!gearSet)
tableGear[speed].Add(load, latestGearThatWasNotStalling == 1 ? 1 : latestGearThatWasNotStalling + 1);
}
}
}