public static IEnumerable <FloatMenuOption> GetFloatMenuOptions <T>(Func <FloatMenuAcceptanceReport> acceptanceReportGetter, Func <T> arrivalActionGetter, string label, CompLaunchableSRTS representative, int destinationTile, Caravan car) where T : TransportPodsArrivalAction
        {
            FloatMenuAcceptanceReport rep = acceptanceReportGetter();

            if (rep.Accepted || !rep.FailReason.NullOrEmpty() || !rep.FailMessage.NullOrEmpty())
            {
                if (!rep.FailReason.NullOrEmpty())
                {
                    yield return(new FloatMenuOption(label + " (" + rep.FailReason + ")", null));
                }
                else
                {
                    yield return(new FloatMenuOption(label, (Action)(() =>
                    {
                        FloatMenuAcceptanceReport acceptanceReport = acceptanceReportGetter();
                        if (acceptanceReport.Accepted)
                        {
                            representative.TryLaunch(destinationTile, (TransportPodsArrivalAction)arrivalActionGetter(), car);
                        }
                        else
                        {
                            if (acceptanceReport.FailMessage.NullOrEmpty())
                            {
                                return;
                            }
                            Messages.Message(acceptanceReport.FailMessage, (LookTargets) new GlobalTargetInfo(destinationTile), MessageTypeDefOf.RejectInput, false);
                        }
                    })));
                }
            }
        }
 public static IEnumerable <FloatMenuOption> GetMapParent(
     MapParent mapparent,
     IEnumerable <IThingHolder> pods,
     CompLaunchableSRTS representative,
     Caravan car)
 {
     if (TransportPodsArrivalAction_LandInSpecificCell.CanLandInSpecificCell(pods, mapparent))
     {
         yield return(new FloatMenuOption("LandInExistingMap".Translate(mapparent.Label), (Action)(() =>
         {
             Map myMap = car != null ? (Map)null : representative.parent.Map;
             Current.Game.CurrentMap = mapparent.Map;
             CameraJumper.TryHideWorld();
             Find.Targeter.BeginTargeting(TargetingParameters.ForDropPodsDestination(), (Action <LocalTargetInfo>)(x => representative.TryLaunch(mapparent.Tile, (TransportPodsArrivalAction) new TransportPodsArrivalAction_LandInSpecificCell(mapparent, x.Cell), car)), (Pawn)null, (Action)(() =>
             {
                 if (myMap == null || !Find.Maps.Contains(myMap))
                 {
                     return;
                 }
                 Current.Game.CurrentMap = myMap;
             }), CompLaunchable.TargeterMouseAttachment);
         }), MenuOptionPriority.Default, (Action)null, (Thing)null, 0.0f, (Func <Rect, bool>)null, (WorldObject)null));
     }
 }