public override void PrepareFrame(ElapsedTime elapsedTime, bool updateFull) { base.PrepareFrame(elapsedTime, updateFull); if (Animation && Owner.Viewer.RealTime > AnimationStart + AnimationLength) { Animation = false; } if (Owner.Viewer.RealTime > 0.1) { // TODO: Casting to MSTSLocomotive here suggests a problem with the data model in the Simulator. var playerLocomotive = Owner.Viewer.PlayerLocomotive as MSTSLocomotive; if (playerLocomotive != null && playerLocomotive.Train != null && playerLocomotive.OdometerVisible) { SetNotice(Viewer.Catalog.GetStringFmt("Odometer {0}", FormatStrings.FormatShortDistanceDisplay(playerLocomotive.OdometerM, Owner.Viewer.MilepostUnitsMetric))); } // Camera notices are temporary so we put them after to override. if (Owner.Viewer.Camera != null) { if (Owner.Viewer.Camera.Name != Camera) { Camera = Owner.Viewer.Camera.Name; // Changing camera should not notify FOV change. FieldOfView = Owner.Viewer.Camera.FieldOfView; SetNotice(Viewer.Catalog.GetStringFmt("Camera: {0}", Camera)); } else if (FieldOfView != Owner.Viewer.Camera.FieldOfView) { FieldOfView = Owner.Viewer.Camera.FieldOfView; SetNotice(Viewer.Catalog.GetStringFmt("FOV: {0:F0}°", FieldOfView)); } } } }