Example #1
0
 public void FlightSelected(FlightMetadata flightMetadata)
 {
     _activeWarnings.Clear();
     _passengers.Clear();
     if (flightMetadata == null)
     {
         _selectedFlight = null;
     }
     else if (_selectedFlight == null ||
              _selectedFlight.UniqueId != flightMetadata.UniqueId)
     {
         _selectedFlight = _wolf.GetCrewRoute(flightMetadata.UniqueId);
         if (flightMetadata.Status == FlightStatus.Boarding ||
             flightMetadata.Status == FlightStatus.Arrived)
         {
             ShowWarning(SelectedFlightPanelLabels.NoPassengersSelectedMessage, true);
         }
     }
 }
Example #2
0
 public void Launch()
 {
     if (!_activeWarnings.Any(w => w.Value.PreventsAction))
     {
         var activeVessel     = FlightGlobals.ActiveVessel;
         var landedSituations = Vessel.Situations.LANDED |
                                Vessel.Situations.PRELAUNCH |
                                Vessel.Situations.SPLASHED;
         var landedOnly = (activeVessel.situation & landedSituations) == landedSituations;
         var vessels    = LogisticsTools
                          .GetNearbyVessels(TERMINAL_RANGE, true, activeVessel, landedOnly);
         var passengers = _passengers.Values.Select(p => p.Name);
         foreach (var vessel in vessels)
         {
             var crew = vessel.GetVesselCrew().ToArray();
             foreach (var kerbal in crew)
             {
                 if (passengers.Contains(kerbal.name))
                 {
                     if (_selectedFlight.Embark(new Passenger(kerbal)))
                     {
                         vessel.CrewListSetDirty();
                         var parts = vessel.parts;
                         foreach (var part in parts)
                         {
                             if (part.protoModuleCrew.Contains(kerbal))
                             {
                                 part.RemoveCrewmember(kerbal);
                                 break;
                             }
                         }
                         kerbal.rosterStatus = ProtoCrewMember.RosterStatus.Missing;
                         kerbal.SetTimeForRespawn(double.MaxValue);
                     }
                     else
                     {
                         ShowWarning("Could not launch.", false);
                         return;
                     }
                 }
             }
         }
         _selectedFlight.Launch(Planetarium.GetUniversalTime());
         _passengers.Clear();
         _activeWarnings.Clear();
         var metadata = new FlightMetadata()
         {
             ArrivalBiome   = _selectedFlight.DestinationBiome,
             ArrivalBody    = _selectedFlight.DestinationBody,
             DepartureBiome = _selectedFlight.OriginBiome,
             DepartureBody  = _selectedFlight.OriginBody,
             Duration       = GetDuration(_selectedFlight),
             EconomySeats   = GetEconomySeats(_selectedFlight),
             FlightNumber   = _selectedFlight.FlightNumber,
             LuxurySeats    = GetLuxurySeats(_selectedFlight),
             Status         = _selectedFlight.FlightStatus,
             UniqueId       = _selectedFlight.UniqueId,
         };
         _window.Launched(metadata);
     }
 }