public MissionViewModel(Mission mission) { this.mission = mission; var ksc = mission.SpaceCenter; this.krpc = mission.Connection.KRPC(); this.spaceCenter = ksc; this.universalTime = mission.Streams.UseStream <double>(() => ksc.UT); this.universalTime.UnderlyingStream.AddCallback(this.Tick); this.universalTime.UnderlyingStream.Rate = 1; this.universalTime.UnderlyingStream.Start(false); this.scene = this.mission.Streams.UseStream <GameScene>(() => krpc.CurrentGameScene); this.scene.UnderlyingStream.AddCallback(this.SceneChanged); this.scene.UnderlyingStream.Start(false); this.scene.UnderlyingStream.Rate = 2; }
private void SceneChanged(GameScene scene) { Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, new Action(() => { if (scene == GameScene.Flight) { this.activeVessel = mission.Streams.UseStream <Vessel>(() => spaceCenter.ActiveVessel); this.activeVessel.UnderlyingStream.AddCallback(this.VesselSwitched); this.activeVessel.UnderlyingStream.Start(false); } else if (this.activeVessel != null) { ((IDisposable)this.activeVessel).Dispose(); this.activeVessel = null; this.VesselSwitched(null); } })); }
public VesselViewModel(Mission mission, Vessel vessel) { this.mission = mission; this.missionTime = mission.Streams.UseStream <double>(() => vessel.MET); this.missionTime.UnderlyingStream.AddCallback(this.Tick); this.missionTime.UnderlyingStream.Start(false); this.missionTime.UnderlyingStream.Rate = 2; this.orbit = mission.Streams.UseStream <Orbit>(() => vessel.Orbit); this.orbit.UnderlyingStream.AddCallback(this.NewOrbit); this.orbit.UnderlyingStream.Start(false); this.orbit.UnderlyingStream.Rate = 2; this.Name = vessel.Name; this.surface = new SurfaceViewModel(mission, vessel); this.status = new VesselStatusViewModel(mission, vessel); }
public CurrentOrbitViewModel(Mission mission, Orbit orbit) { var bodyRadius = orbit.Body.EquatorialRadius; this.Body = orbit.Body.Name; this.altitude = mission.Streams.UseStream <double>(() => orbit.Radius); this.altitude.UnderlyingStream.AddCallback(newVal => { this.Altitude = newVal - bodyRadius; NotifyPropertyChanged("Altitude"); }); this.altitude.UnderlyingStream.Start(true); this.velocity = mission.Streams.UseStream <double>(() => orbit.OrbitalSpeed); this.velocity.UnderlyingStream.AddCallback(newVal => { this.Velocity = newVal; NotifyPropertyChanged("Velocity"); }); this.velocity.UnderlyingStream.Start(true); this.periapsis = mission.Streams.UseStream <double>(() => orbit.PeriapsisAltitude); this.periapsis.UnderlyingStream.AddCallback(newVal => { this.Periapsis = newVal; NotifyPropertyChanged("Periapsis"); }); this.periapsis.UnderlyingStream.Start(true); this.apoapsis = mission.Streams.UseStream <double>(() => orbit.ApoapsisAltitude); this.apoapsis.UnderlyingStream.AddCallback(newVal => { this.Apoapsis = newVal; NotifyPropertyChanged("Apoapsis"); }); this.apoapsis.UnderlyingStream.Start(true); this.timeToApoapsis = mission.Streams.UseStream <double>(() => orbit.TimeToApoapsis); this.timeToApoapsis.UnderlyingStream.AddCallback(newVal => { this.TimeToApoapsis = new Time(newVal); NotifyPropertyChanged("TimeToApoapsis"); }); this.timeToApoapsis.UnderlyingStream.Start(true); this.timeToPeriapsis = mission.Streams.UseStream <double>(() => orbit.TimeToPeriapsis); this.timeToPeriapsis.UnderlyingStream.AddCallback(newVal => { this.TimeToPeriapsis = new Time(newVal); NotifyPropertyChanged("TimeToPeriapsis"); }); this.timeToPeriapsis.UnderlyingStream.Start(true); this.inclination = mission.Streams.UseStream <double>(() => orbit.Inclination); this.inclination.UnderlyingStream.AddCallback(newVal => { this.Inclination = newVal; NotifyPropertyChanged("Inclination"); }); this.inclination.UnderlyingStream.Start(true); this.altitude.UnderlyingStream.Rate = 2; this.velocity.UnderlyingStream.Rate = 2; this.periapsis.UnderlyingStream.Rate = 2; this.apoapsis.UnderlyingStream.Rate = 2; this.timeToApoapsis.UnderlyingStream.Rate = 2; this.timeToPeriapsis.UnderlyingStream.Rate = 2; this.inclination.UnderlyingStream.Rate = 2; }
public SurfaceViewModel(Mission mission, Vessel vessel) { var flight = vessel.Flight(vessel.Orbit.Body.ReferenceFrame); this.latitude = mission.Streams.UseStream <double>(() => flight.Latitude); this.latitude.UnderlyingStream.AddCallback(newVal => { this.Latitude = newVal; NotifyPropertyChanged("Latitude"); }); this.latitude.UnderlyingStream.Start(); this.longitude = mission.Streams.UseStream <double>(() => flight.Longitude); this.longitude.UnderlyingStream.AddCallback(newVal => { this.Longitude = newVal; NotifyPropertyChanged("Longitude"); }); this.longitude.UnderlyingStream.Start(); this.radarAltitude = mission.Streams.UseStream <double>(() => flight.SurfaceAltitude); this.radarAltitude.UnderlyingStream.AddCallback(newVal => { this.RadarAltitude = newVal; NotifyPropertyChanged("RadarAltitude"); }); this.radarAltitude.UnderlyingStream.Start(); this.velocity = mission.Streams.UseStream <double>(() => flight.Speed); this.velocity.UnderlyingStream.AddCallback(newVal => { this.Velocity = newVal; NotifyPropertyChanged("Velocity"); }); this.velocity.UnderlyingStream.Start(); this.atmosphericPressure = mission.Streams.UseStream <float>(() => flight.StaticPressure); this.atmosphericPressure.UnderlyingStream.AddCallback(newVal => { this.AtmosphericPressure = newVal; NotifyPropertyChanged("AtmosphericPressure"); }); this.atmosphericPressure.UnderlyingStream.Start(); this.dynamicPressure = mission.Streams.UseStream <float>(() => flight.DynamicPressure); this.dynamicPressure.UnderlyingStream.AddCallback(newVal => { this.DynamicPressure = newVal; NotifyPropertyChanged("DynamicPressure"); }); this.dynamicPressure.UnderlyingStream.Start(); this.biome = mission.Streams.UseStream <string>(() => vessel.Biome); this.biome.UnderlyingStream.AddCallback(newVal => { this.Biome = newVal; NotifyPropertyChanged("Biome"); }); this.biome.UnderlyingStream.Start(); this.latitude.UnderlyingStream.Rate = 2; this.longitude.UnderlyingStream.Rate = 2; this.radarAltitude.UnderlyingStream.Rate = 2; this.velocity.UnderlyingStream.Rate = 2; this.atmosphericPressure.UnderlyingStream.Rate = 2; this.dynamicPressure.UnderlyingStream.Rate = 2; this.biome.UnderlyingStream.Rate = 2; }