コード例 #1
0
ファイル: InfoDisplay.cs プロジェクト: yinwuu/openrails
        public void PrepareFrame(RenderFrame frame, ElapsedTime elapsedTime)
        {
            FrameNumber++;

            if (Viewer.RealTime - LastUpdateRealTime >= 0.25)
            {
                double elapsedRealSeconds = Viewer.RealTime - LastUpdateRealTime;
                LastUpdateRealTime = Viewer.RealTime;
                Profile(elapsedRealSeconds);
            }

#if DEBUG_DUMP_STEAM_POWER_CURVE
            if (IsRecordingSteamPowerCurve)
            {
                RecordSteamPowerCurve();
            }
            else
            {
#endif
            if (IsRecordingSteamPerformance)
            {
                RecordSteamPerformance();
            }
            else


            //Here's where the logger stores the data from each frame
            if (Viewer.Settings.DataLogger)
            {
                Logger.Separator = (DataLogger.Separators)Enum.Parse(typeof(DataLogger.Separators), Viewer.Settings.DataLoggerSeparator);
                if (Viewer.Settings.DataLogPerformance)
                {
                    Logger.Data(VersionInfo.Version);
                    Logger.Data(FrameNumber.ToString("F0"));
                    Logger.Data(GetWorkingSetSize().ToString("F0"));
                    Logger.Data(GC.GetTotalMemory(false).ToString("F0"));
                    Logger.Data(GC.CollectionCount(0).ToString("F0"));
                    Logger.Data(GC.CollectionCount(1).ToString("F0"));
                    Logger.Data(GC.CollectionCount(2).ToString("F0"));
                    Logger.Data(ProcessorCount.ToString("F0"));
                    Logger.Data(Viewer.RenderProcess.FrameRate.Value.ToString("F0"));
                    Logger.Data(Viewer.RenderProcess.FrameTime.Value.ToString("F6"));
                    Logger.Data(Viewer.RenderProcess.ShadowPrimitivePerFrame.Sum().ToString("F0"));
                    Logger.Data(Viewer.RenderProcess.PrimitivePerFrame.Sum().ToString("F0"));
                    Logger.Data(Viewer.RenderProcess.Profiler.Wall.Value.ToString("F0"));
                    Logger.Data(Viewer.UpdaterProcess.Profiler.Wall.Value.ToString("F0"));
                    Logger.Data(Viewer.LoaderProcess.Profiler.Wall.Value.ToString("F0"));
                    Logger.Data(Viewer.SoundProcess.Profiler.Wall.Value.ToString("F0"));
                }
                if (Viewer.Settings.DataLogPhysics)
                {
                    Logger.Data(FormatStrings.FormatPreciseTime(Viewer.Simulator.ClockTime));
                    Logger.Data(Viewer.PlayerLocomotive.Direction.ToString());
                    Logger.Data(Viewer.PlayerTrain.MUReverserPercent.ToString("F0"));
                    Logger.Data(Viewer.PlayerLocomotive.ThrottlePercent.ToString("F0"));
                    Logger.Data(Viewer.PlayerLocomotive.MotiveForceN.ToString("F0"));
                    Logger.Data(Viewer.PlayerLocomotive.BrakeForceN.ToString("F0"));
                    Logger.Data((Viewer.PlayerLocomotive as MSTSLocomotive).LocomotiveAxle.AxleForceN.ToString("F2"));
                    Logger.Data((Viewer.PlayerLocomotive as MSTSLocomotive).LocomotiveAxle.SlipSpeedPercent.ToString("F1"));

                    switch (Viewer.Settings.DataLogSpeedUnits)
                    {
                    case "route":
                        Logger.Data(FormatStrings.FormatSpeed(Viewer.PlayerLocomotive.SpeedMpS, Viewer.MilepostUnitsMetric));
                        break;

                    case "mps":
                        Logger.Data(Viewer.PlayerLocomotive.SpeedMpS.ToString("F1"));
                        break;

                    case "mph":
                        Logger.Data(MpS.FromMpS(Viewer.PlayerLocomotive.SpeedMpS, false).ToString("F1"));
                        break;

                    case "kmph":
                        Logger.Data(MpS.FromMpS(Viewer.PlayerLocomotive.SpeedMpS, true).ToString("F1"));
                        break;

                    default:
                        Logger.Data(FormatStrings.FormatSpeed(Viewer.PlayerLocomotive.SpeedMpS, Viewer.MilepostUnitsMetric));
                        break;
                    }

                    Logger.Data((Viewer.PlayerLocomotive.DistanceM.ToString("F0")));
                    Logger.Data((Viewer.PlayerLocomotive.GravityForceN.ToString("F0")));

                    if ((Viewer.PlayerLocomotive as MSTSLocomotive).TrainBrakeController != null)
                    {
                        Logger.Data((Viewer.PlayerLocomotive as MSTSLocomotive).TrainBrakeController.CurrentValue.ToString("F2"));
                    }
                    else
                    {
                        Logger.Data("null");
                    }

                    if ((Viewer.PlayerLocomotive as MSTSLocomotive).EngineBrakeController != null)
                    {
                        Logger.Data((Viewer.PlayerLocomotive as MSTSLocomotive).EngineBrakeController.CurrentValue.ToString("F2"));
                    }
                    else
                    {
                        Logger.Data("null");
                    }

                    Logger.Data(Viewer.PlayerLocomotive.BrakeSystem.GetCylPressurePSI().ToString("F0"));
                    Logger.Data((Viewer.PlayerLocomotive as MSTSLocomotive).MainResPressurePSI.ToString("F0"));
                    Logger.Data((Viewer.PlayerLocomotive as MSTSLocomotive).CompressorIsOn.ToString());
#if GEARBOX_DEBUG_LOG
                    if (Viewer.PlayerLocomotive.GetType() == typeof(MSTSDieselLocomotive))
                    {
                        Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines[0].RealRPM.ToString("F0"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines[0].DemandedRPM.ToString("F0"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines[0].LoadPercent.ToString("F0"));
                        if ((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines.HasGearBox)
                        {
                            Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines[0].GearBox.CurrentGearIndex.ToString());
                            Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines[0].GearBox.NextGearIndex.ToString());
                            Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselEngines[0].GearBox.ClutchPercent.ToString());
                        }
                        else
                        {
                            Logger.Data("null");
                            Logger.Data("null");
                            Logger.Data("null");
                        }
                        Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselFlowLps.ToString("F2"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSDieselLocomotive).DieselLevelL.ToString("F0"));
                        Logger.Data("null");
                        Logger.Data("null");
                        Logger.Data("null");
                    }
                    if (Viewer.PlayerLocomotive.GetType() == typeof(MSTSElectricLocomotive))
                    {
                        Logger.Data((Viewer.PlayerLocomotive as MSTSElectricLocomotive).Pantographs[1].CommandUp.ToString());
                        Logger.Data((Viewer.PlayerLocomotive as MSTSElectricLocomotive).Pantographs[2].CommandUp.ToString());
                        Logger.Data((Viewer.PlayerLocomotive as MSTSElectricLocomotive).Pantographs.List.Count > 2 ?
                                    (Viewer.PlayerLocomotive as MSTSElectricLocomotive).Pantographs[3].CommandUp.ToString() : null);
                        Logger.Data((Viewer.PlayerLocomotive as MSTSElectricLocomotive).Pantographs.List.Count > 3 ?
                                    (Viewer.PlayerLocomotive as MSTSElectricLocomotive).Pantographs[4].CommandUp.ToString() : null);
                        Logger.Data("null");
                        Logger.Data("null");
                        Logger.Data("null");
                        Logger.Data("null");
                        Logger.Data("null");
                        Logger.Data("null");
                        Logger.Data("null");
                    }
                    if (Viewer.PlayerLocomotive.GetType() == typeof(MSTSSteamLocomotive))
                    {
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).BlowerSteamUsageLBpS.ToString("F0"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).BoilerPressurePSI.ToString("F0"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).CylinderCocksAreOpen.ToString());
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).CylinderCompoundOn.ToString());
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).EvaporationLBpS.ToString("F0"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).FireMassKG.ToString("F0"));
                        Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).CylinderSteamUsageLBpS.ToString("F0"));
                        if ((Viewer.PlayerLocomotive as MSTSSteamLocomotive).BlowerController != null)
                        {
                            Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).BlowerController.CurrentValue.ToString("F0"));
                        }
                        else
                        {
                            Logger.Data("null");
                        }

                        if ((Viewer.PlayerLocomotive as MSTSSteamLocomotive).DamperController != null)
                        {
                            Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).DamperController.CurrentValue.ToString("F0"));
                        }
                        else
                        {
                            Logger.Data("null");
                        }
                        if ((Viewer.PlayerLocomotive as MSTSSteamLocomotive).FiringRateController != null)
                        {
                            Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).FiringRateController.CurrentValue.ToString("F0"));
                        }
                        else
                        {
                            Logger.Data("null");
                        }
                        if ((Viewer.PlayerLocomotive as MSTSSteamLocomotive).Injector1Controller != null)
                        {
                            Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).Injector1Controller.CurrentValue.ToString("F0"));
                        }
                        else
                        {
                            Logger.Data("null");
                        }
                        if ((Viewer.PlayerLocomotive as MSTSSteamLocomotive).Injector2Controller != null)
                        {
                            Logger.Data((Viewer.PlayerLocomotive as MSTSSteamLocomotive).Injector2Controller.CurrentValue.ToString("F0"));
                        }
                        else
                        {
                            Logger.Data("null");
                        }
                    }
#endif
                }
                Logger.End();
#if DEBUG_DUMP_STEAM_POWER_CURVE
            }
#endif
            }
        }