SimShift.Entities.ShifterTableConfiguration.DefaultByPowerEfficiency C# (CSharp) Method

DefaultByPowerEfficiency() public method

public DefaultByPowerEfficiency ( ) : void
return void
        public void DefaultByPowerEfficiency()
        {
            tableGear = new Dictionary<int, Dictionary<double, int>>();
            tableThrottle = new Dictionary<int, Dictionary<double, double>>();
            // Make sure there are 20 rpm steps, and 10 load steps
            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 bestFuelEfficiency = double.MinValue;
                    var bestFuelGear = 0;

                    for (int gear = 0; gear < Drivetrain.Gears; gear++)
                    {
                        var calculatedRpm = Drivetrain.GearRatios[gear] * speed;

                        if (calculatedRpm < Drivetrain.StallRpm * 1.5) continue;
                        if (calculatedRpm > Drivetrain.MaximumRpm) continue;

                        var thr = (load < 0.05)
                                      ? 0.05
                                      : load;

                        var pwr = Drivetrain.CalculatePower(calculatedRpm, thr);
                        var fuel = Drivetrain.CalculateFuelConsumption(calculatedRpm, thr);
                        var efficiency = pwr / fuel;

                        if (efficiency > bestFuelEfficiency)
                        {
                            bestFuelEfficiency = efficiency;
                            bestFuelGear = gear;
                            gearSet = true;
                        }
                    }
                    if (!gearSet)
                    {
                        if (Drivetrain is Ets2Drivetrain &&
                            Drivetrain.Gears >= 10)
                            tableGear[speed].Add(load, 3);
                        else
                            tableGear[speed].Add(load, 1);
                    }
                    else
                    {
                        if (Drivetrain is Ets2Drivetrain &&
                            Drivetrain.Gears >= 10)
                            bestFuelGear = Math.Max(2, bestFuelGear);
                        tableGear[speed].Add(load, bestFuelGear + 1);
                    }
                }
            }
        }