示例#1
0
        public void InitFromMSTS(MSTSDieselLocomotive loco)
        {
            if ((initLevel & SettingsFlags.IdleRPM) == 0)
            {
                IdleRPM = loco.IdleRPM;
            }
            if ((initLevel & SettingsFlags.MaxRPM) == 0)
            {
                MaxRPM = loco.MaxRPM;
            }
            InitialMagnitude = loco.InitialMagnitude;
            MaxMagnitude     = loco.MaxMagnitude;
            if ((initLevel & SettingsFlags.MaxExhaust) == 0)
            {
                MaxExhaust = loco.MaxExhaust;
            }
            if ((initLevel & SettingsFlags.ExhaustColor) == 0)
            {
                ExhaustSteadyColor = loco.ExhaustSteadyColor;
            }
            ExhaustDecelColor = loco.ExhaustDecelColor;
            if ((initLevel & SettingsFlags.ExhaustTransientColor) == 0)
            {
                ExhaustTransientColor = loco.ExhaustTransientColor;
            }
            if ((initLevel & SettingsFlags.StartingRPM) == 0)
            {
                StartingRPM = loco.IdleRPM * 2.0f / 3.0f;
            }
            if ((initLevel & SettingsFlags.StartingConfirmRPM) == 0)
            {
                StartingConfirmationRPM = loco.IdleRPM * 1.1f;
            }
            if ((initLevel & SettingsFlags.ChangeUpRPMpS) == 0)
            {
                ChangeUpRPMpS = loco.MaxRPMChangeRate;
            }
            if ((initLevel & SettingsFlags.ChangeDownRPMpS) == 0)
            {
                ChangeDownRPMpS = loco.MaxRPMChangeRate;
            }
            if ((initLevel & SettingsFlags.RateOfChangeUpRPMpSS) == 0)
            {
                RateOfChangeUpRPMpSS = ChangeUpRPMpS;
            }
            if ((initLevel & SettingsFlags.RateOfChangeDownRPMpSS) == 0)
            {
                RateOfChangeDownRPMpSS = ChangeDownRPMpS;
            }
            if ((initLevel & SettingsFlags.MaximalPowerW) == 0)
            {
                MaximalPowerW = loco.MaxPowerW;
            }
            if ((initLevel & SettingsFlags.MaxOilPressure) == 0)
            {
                DieselMaxOilPressurePSI = loco.DieselMaxOilPressurePSI;
            }
            if ((initLevel & SettingsFlags.MinOilPressure) == 0)
            {
                DieselMinOilPressurePSI = loco.DieselMinOilPressurePSI;
            }
            if ((initLevel & SettingsFlags.MaxTemperature) == 0)
            {
                DieselMaxTemperatureDeg = loco.DieselMaxTemperatureDeg;
            }
            if ((initLevel & SettingsFlags.Cooling) == 0)
            {
                EngineCooling = loco.DieselEngineCooling;
            }
            if ((initLevel & SettingsFlags.TempTimeConstant) == 0)
            {
                DieselTempTimeConstantSec = 720f;
            }
            //DieselPowerTab = new Interpolator(new float[] { diesel.IdleRPM, diesel.IdleRPM * 1.01f, diesel.MaxRPM * 0.5f, diesel.MaxRPM }, new float[] { diesel.MaxPowerW * 0.05f, diesel.MaxRPM * 0.1f, diesel.MaxRPM * 0.5f, diesel.MaxPowerW });
            //DieselPowerTab = new Interpolator(new float[] { diesel.IdleRPM, diesel.MaxRPM }, new float[] { diesel.MaxPowerW * 0.05f, diesel.MaxPowerW });
            if ((initLevel & SettingsFlags.DieselConsumptionTab) == 0)
            {
                DieselConsumptionTab = new Interpolator(new float[] { loco.IdleRPM, loco.MaxRPM }, new float[] { loco.DieselUsedPerHourAtIdleL, loco.DieselUsedPerHourAtMaxPowerL });
            }
            if ((initLevel & SettingsFlags.ThrottleRPMTab) == 0)
            {
                ThrottleRPMTab = new Interpolator(new float[] { 0, 100 }, new float[] { loco.IdleRPM, loco.MaxRPM });
            }

            if (((initLevel & SettingsFlags.DieselTorqueTab) == 0) && ((initLevel & SettingsFlags.DieselPowerTab) == 0))
            {
                int     count  = 11;
                float[] rpm    = new float[count + 1];
                float[] power  = new float[] { 0.02034f, 0.09302f, 0.36628f, 0.60756f, 0.69767f, 0.81395f, 0.93023f, 0.9686f, 0.99418f, 0.99418f, 1f, 0.5f };
                float[] torque = new float[] { 0.05f, 0.2f, 0.7f, 0.95f, 1f, 1f, 0.98f, 0.95f, 0.9f, 0.86f, 0.81f, 0.3f };

                for (int i = 0; i < count; i++)
                {
                    if (i == 0)
                    {
                        rpm[i] = loco.IdleRPM;
                    }
                    else
                    {
                        rpm[i] = rpm[i - 1] + (loco.MaxRPM - loco.IdleRPM) / (count - 1);
                    }
                    power[i]  *= MaximalPowerW;
                    torque[i] *= MaximalPowerW / (MaxRPM * 2f * 3.1415f / 60f) / 0.81f;
                }
                rpm[count]     = loco.MaxRPM * 1.5f;
                DieselPowerTab = new Interpolator(rpm, power);
                //DieselPowerTab.test("PowerTab", count);
                DieselTorqueTab = new Interpolator(rpm, torque);
                //DieselTorqueTab.test("TorqueTab", count);
            }

            if (((initLevel & SettingsFlags.DieselTorqueTab) == 0) && ((initLevel & SettingsFlags.DieselPowerTab) == SettingsFlags.DieselPowerTab))
            {
                float[] rpm    = new float[DieselPowerTab.GetSize()];
                float[] torque = new float[DieselPowerTab.GetSize()];
                for (int i = 0; i < DieselPowerTab.GetSize(); i++)
                {
                    rpm[i]    = IdleRPM + (float)i * (MaxRPM - IdleRPM) / (float)DieselPowerTab.GetSize();
                    torque[i] = DieselPowerTab[rpm[i]] / (rpm[i] * 2f * 3.1415f / 60f);
                }
            }

            if (((initLevel & SettingsFlags.DieselTorqueTab) == SettingsFlags.DieselTorqueTab) && ((initLevel & SettingsFlags.DieselPowerTab) == 0))
            {
                float[] rpm   = new float[DieselPowerTab.GetSize()];
                float[] power = new float[DieselPowerTab.GetSize()];
                for (int i = 0; i < DieselPowerTab.GetSize(); i++)
                {
                    rpm[i]   = IdleRPM + (float)i * (MaxRPM - IdleRPM) / (float)DieselPowerTab.GetSize();
                    power[i] = DieselPowerTab[rpm[i]] * rpm[i] * 2f * 3.1415f / 60f;
                }
            }

            InitialExhaust = loco.InitialExhaust;
            MaxExhaust     = loco.MaxExhaust;
            locomotive     = loco;
        }