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)); } }
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; } } } } }
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}"); } }
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}"); } }
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); } } }