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