void switch_vessel(Func <Vessel, Vessel> get_next) { if (ActiveVesselTCA == null) { return; } var next_vessel = vessel; ModuleTCA next = null; while (next == null || !SquadControl.IsCommReachable(ActiveVesselTCA, next)) { next_vessel = get_next(next_vessel); if (next_vessel.loaded) { next = ModuleTCA.AvailableTCA(next_vessel); } } if (next != TCA) { SquadControl.UnpackVessel(ActiveVesselTCA.vessel, next_vessel); onVesselChange(next_vessel); } }