public static bool IsFormingCaravanOrDownedPawnToBeTakenByCaravan(Pawn p)
 {
     return(CaravanFormingUtility.GetFormAndSendCaravanLord(p) != null);
 }
        public static IEnumerable <Gizmo> GetGizmos(Pawn pawn)
        {
            if (CaravanFormingUtility.IsFormingCaravanOrDownedPawnToBeTakenByCaravan(pawn))
            {
                Lord lord = CaravanFormingUtility.GetFormAndSendCaravanLord(pawn);
                yield return(new Command_Action
                {
                    defaultLabel = "CommandCancelFormingCaravan".Translate(),
                    defaultDesc = "CommandCancelFormingCaravanDesc".Translate(),
                    icon = TexCommand.ClearPrioritizedWork,
                    activateSound = SoundDefOf.Tick_Low,
                    action = delegate
                    {
                        CaravanFormingUtility.StopFormingCaravan(lord);
                    },
                    hotKey = KeyBindingDefOf.Designator_Cancel
                });

                yield return(new Command_Action
                {
                    defaultLabel = "CommandRemoveFromCaravan".Translate(),
                    defaultDesc = "CommandRemoveFromCaravanDesc".Translate(),
                    icon = CaravanFormingUtility.RemoveFromCaravanCommand,
                    action = delegate
                    {
                        CaravanFormingUtility.RemovePawnFromCaravan(pawn, lord, true);
                    },
                    hotKey = KeyBindingDefOf.Misc6
                });
            }
            else if (pawn.Spawned)
            {
                bool anyCaravanToJoin = false;
                for (int i = 0; i < pawn.Map.lordManager.lords.Count; i++)
                {
                    Lord lord2 = pawn.Map.lordManager.lords[i];
                    if (lord2.faction == Faction.OfPlayer && lord2.LordJob is LordJob_FormAndSendCaravan)
                    {
                        anyCaravanToJoin = true;
                        break;
                    }
                }
                if (anyCaravanToJoin && Dialog_FormCaravan.AllSendablePawns(pawn.Map, false).Contains(pawn))
                {
                    yield return(new Command_Action
                    {
                        defaultLabel = "CommandAddToCaravan".Translate(),
                        defaultDesc = "CommandAddToCaravanDesc".Translate(),
                        icon = CaravanFormingUtility.AddToCaravanCommand,
                        action = delegate
                        {
                            List <Lord> list = new List <Lord>();
                            for (int j = 0; j < pawn.Map.lordManager.lords.Count; j++)
                            {
                                Lord lord3 = pawn.Map.lordManager.lords[j];
                                if (lord3.faction == Faction.OfPlayer && lord3.LordJob is LordJob_FormAndSendCaravan)
                                {
                                    list.Add(lord3);
                                }
                            }
                            if (list.Count == 0)
                            {
                                return;
                            }
                            if (list.Count == 1)
                            {
                                CaravanFormingUtility.LateJoinFormingCaravan(pawn, list[0]);
                                SoundDefOf.Click.PlayOneShotOnCamera(null);
                            }
                            else
                            {
                                List <FloatMenuOption> list2 = new List <FloatMenuOption>();
                                for (int k = 0; k < list.Count; k++)
                                {
                                    Lord caravanLocal = list[k];
                                    string label = "Caravan".Translate() + " " + (k + 1);
                                    list2.Add(new FloatMenuOption(label, delegate
                                    {
                                        if (pawn.Spawned && pawn.Map.lordManager.lords.Contains(caravanLocal) && Dialog_FormCaravan.AllSendablePawns(pawn.Map, false).Contains(pawn))
                                        {
                                            CaravanFormingUtility.LateJoinFormingCaravan(pawn, caravanLocal);
                                        }
                                    }, MenuOptionPriority.Default, null, null, 0f, null, null));
                                }
                                Find.WindowStack.Add(new FloatMenu(list2));
                            }
                        },
                        hotKey = KeyBindingDefOf.Misc7
                    });
                }
            }
        }