Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 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);
         }
     }));
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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;
        }
Exemplo n.º 5
0
        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;
        }