Exemple #1
0
 private string GetDuration(ICrewRoute flight)
 {
     if (flight.FlightStatus == FlightStatus.Enroute)
     {
         var remaining = flight.ArrivalTime - Planetarium.GetUniversalTime();
         return(TimeFormatters.ToTimeSpanString(remaining));
     }
     else
     {
         return(TimeFormatters.ToTimeSpanString(flight.Duration));
     }
 }
Exemple #2
0
        public void Disembark()
        {
            if (_selectedTerminal != null &&
                _passengers.Count > 0 &&
                !_activeWarnings.Any(w => w.Value.PreventsAction))
            {
                var terminalVessel = FlightGlobals.Vessels
                                     .FirstOrDefault(v => v.id == _selectedTerminal.VesselId);

                if (terminalVessel != null)
                {
                    var terminal = terminalVessel
                                   .FindPartModulesImplementing <WOLF_TerminalModule>()
                                   .FirstOrDefault(t => t.TerminalId == _selectedTerminal.TerminalId);

                    if (terminal != null)
                    {
                        foreach (var passenger in _passengers)
                        {
                            var kerbal = HighLogic.CurrentGame.CrewRoster.Kerbals()
                                         .FirstOrDefault(k => k.name == passenger.Value.Name);
                            if (kerbal != null)
                            {
                                kerbal.rosterStatus = ProtoCrewMember.RosterStatus.Available;
                                terminal.part.AddCrewmember(kerbal);
                            }
                            else
                            {
                                Debug.LogError($"[WOLF] CrewTransferScenario.Disembark: Could not find {passenger.Value.Name} in current game crew roster.");
                            }
                            var wolfPassenger = _selectedFlight.Passengers
                                                .FirstOrDefault(p => p.Name == passenger.Value.Name);
                            _selectedFlight.Disembark(wolfPassenger);
                        }
                        _passengers.Clear();
                        terminalVessel.CrewListSetDirty();
                        terminalVessel.MakeActive();
                        KSP.UI.Screens.Flight.KerbalPortraitGallery.Instance.StartRefresh(terminalVessel);

                        // Check if flight has finished disembarking all passengers
                        var flight = _wolf.GetCrewRoute(_selectedFlight.UniqueId);
                        if (flight.FlightStatus != FlightStatus.Arrived)
                        {
                            _selectedFlight = null;
                        }
                    }
                }
            }
        }
Exemple #3
0
 private string GetEconomySeats(ICrewRoute flight)
 {
     if (flight.FlightStatus == FlightStatus.Boarding)
     {
         var passengers = Math.Min(
             _passengers.Values.Count(p => !p.IsTourist),
             flight.EconomyBerths);
         return($"{passengers} / {flight.EconomyBerths}");
     }
     else
     {
         var passengers = flight.Passengers.Count(p => !p.IsTourist);
         return($"{passengers} / {flight.EconomyBerths}");
     }
 }
Exemple #4
0
 private string GetLuxurySeats(ICrewRoute flight)
 {
     if (flight.FlightStatus == FlightStatus.Boarding)
     {
         var passengers = _passengers.Values;
         var tourists   = passengers.Count(p => p.IsTourist);
         var extraCrew  = Math.Min(
             flight.EconomyBerths - passengers.Count(p => !p.IsTourist),
             0);
         return($"{tourists + extraCrew} / {flight.LuxuryBerths}");
     }
     else
     {
         var passengers = flight.Passengers.Count(p => p.IsTourist);
         return($"{passengers} / {flight.LuxuryBerths}");
     }
 }
Exemple #5
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);
         }
     }
 }