예제 #1
0
        public static IEnumerable <Zone> MultiSelectableZonesInScreenRectDistinct(Rect rect)
        {
            CellRect mapRect = ThingSelectionUtility.GetMapRect(rect);

            ThingSelectionUtility.yieldedZones.Clear();
            try
            {
                foreach (IntVec3 c in mapRect)
                {
                    if (c.InBounds(Find.CurrentMap))
                    {
                        Zone zone = c.GetZone(Find.CurrentMap);
                        if (zone != null)
                        {
                            if (zone.IsMultiselectable)
                            {
                                if (!ThingSelectionUtility.yieldedZones.Contains(zone))
                                {
                                    yield return(zone);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                base.< > __Finally0();
            }
        }
예제 #2
0
        public static IEnumerable <Thing> MultiSelectableThingsInScreenRectDistinct(Rect rect)
        {
            CellRect mapRect = ThingSelectionUtility.GetMapRect(rect);

            ThingSelectionUtility.yieldedThings.Clear();
            foreach (IntVec3 item in mapRect)
            {
                if (item.InBounds(Find.VisibleMap))
                {
                    List <Thing> cellThings = Find.VisibleMap.thingGrid.ThingsListAt(item);
                    if (cellThings != null)
                    {
                        for (int i = 0; i < cellThings.Count; i++)
                        {
                            Thing t = cellThings[i];
                            if (ThingSelectionUtility.SelectableByMapClick(t) && !t.def.neverMultiSelect && !ThingSelectionUtility.yieldedThings.Contains(t))
                            {
                                yield return(t);

                                /*Error: Unable to find new state assignment for yield return*/;
                            }
                        }
                    }
                }
            }
            yield break;
IL_01a1:
            /*Error near IL_01a2: Unexpected return in MoveNext()*/;
        }
예제 #3
0
        public static IEnumerable <Thing> MultiSelectableThingsInScreenRectDistinct(Rect rect)
        {
            CellRect mapRect = ThingSelectionUtility.GetMapRect(rect);

            ThingSelectionUtility.yieldedThings.Clear();
            try
            {
                foreach (IntVec3 c in mapRect)
                {
                    if (c.InBounds(Find.CurrentMap))
                    {
                        List <Thing> cellThings = Find.CurrentMap.thingGrid.ThingsListAt(c);
                        if (cellThings != null)
                        {
                            for (int i = 0; i < cellThings.Count; i++)
                            {
                                Thing t = cellThings[i];
                                if (ThingSelectionUtility.SelectableByMapClick(t) && !t.def.neverMultiSelect && !ThingSelectionUtility.yieldedThings.Contains(t))
                                {
                                    yield return(t);
                                }
                            }
                        }
                    }
                }
            }
            finally
            {
                base.< > __Finally0();
            }
        }
예제 #4
0
 public bool CanTarget(TargetInfo targ)
 {
     if (this.validator != null && !this.validator(targ))
     {
         return(false);
     }
     if (targ.Thing == null)
     {
         return(this.canTargetLocations);
     }
     if (this.neverTargetDoors && targ.Thing.def.IsDoor)
     {
         return(false);
     }
     if (this.onlyTargetDamagedThings && targ.Thing.HitPoints == targ.Thing.MaxHitPoints)
     {
         return(false);
     }
     if (this.onlyTargetFlammables && !targ.Thing.FlammableNow)
     {
         return(false);
     }
     if (this.mustBeSelectable && !ThingSelectionUtility.SelectableByMapClick(targ.Thing))
     {
         return(false);
     }
     if (this.targetSpecificThing != null && targ.Thing == this.targetSpecificThing)
     {
         return(true);
     }
     if (this.canTargetFires && targ.Thing.def == ThingDefOf.Fire)
     {
         return(true);
     }
     if (this.canTargetPawns && targ.Thing.def.category == ThingCategory.Pawn)
     {
         if (((Pawn)targ.Thing).Downed)
         {
             if (this.neverTargetIncapacitated)
             {
                 return(false);
             }
         }
         else if (this.onlyTargetIncapacitatedPawns)
         {
             return(false);
         }
         return(this.onlyTargetFactions == null || this.onlyTargetFactions.Contains(targ.Thing.Faction));
     }
     if (this.canTargetBuildings && targ.Thing.def.category == ThingCategory.Building)
     {
         return((!this.onlyTargetThingsAffectingRegions || targ.Thing.def.AffectsRegions) && (this.onlyTargetFactions == null || this.onlyTargetFactions.Contains(targ.Thing.Faction)));
     }
     return(this.canTargetItems && (!this.mapObjectTargetsMustBeAutoAttackable || targ.Thing.def.isAutoAttackableMapObject));
 }
예제 #5
0
 public void ShortcutKeysOnGUI()
 {
     if (Current.ProgramState == ProgramState.Playing)
     {
         if (KeyBindingDefOf.NextColonist.KeyDownEvent)
         {
             ThingSelectionUtility.SelectNextColonist();
             Event.current.Use();
         }
         if (KeyBindingDefOf.PreviousColonist.KeyDownEvent)
         {
             ThingSelectionUtility.SelectPreviousColonist();
             Event.current.Use();
         }
     }
 }
예제 #6
0
        public static IEnumerable <object> SelectableObjectsAt(IntVec3 c, Map map)
        {
            List <Thing> thingList = c.GetThingList(map);

            for (int i = 0; i < thingList.Count; i++)
            {
                Thing t = thingList[i];
                if (ThingSelectionUtility.SelectableByMapClick(t))
                {
                    yield return(t);
                }
            }
            Zone z = map.zoneManager.ZoneAt(c);

            if (z != null)
            {
                yield return(z);
            }
        }
예제 #7
0
        public static IEnumerable <Zone> MultiSelectableZonesInScreenRectDistinct(Rect rect)
        {
            CellRect mapRect = ThingSelectionUtility.GetMapRect(rect);

            ThingSelectionUtility.yieldedZones.Clear();
            foreach (IntVec3 item in mapRect)
            {
                if (item.InBounds(Find.VisibleMap))
                {
                    Zone zone = item.GetZone(Find.VisibleMap);
                    if (zone != null && zone.IsMultiselectable && !ThingSelectionUtility.yieldedZones.Contains(zone))
                    {
                        yield return(zone);

                        /*Error: Unable to find new state assignment for yield return*/;
                    }
                }
            }
            yield break;
IL_014a:
            /*Error near IL_014b: Unexpected return in MoveNext()*/;
        }
예제 #8
0
        public static IEnumerable <object> SelectableObjectsAt(IntVec3 c, Map map)
        {
            List <Thing> thingList = c.GetThingList(map);

            for (int i = 0; i < thingList.Count; i++)
            {
                Thing t = thingList[i];
                if (ThingSelectionUtility.SelectableByMapClick(t))
                {
                    yield return((object)t);

                    /*Error: Unable to find new state assignment for yield return*/;
                }
            }
            Zone z = map.zoneManager.ZoneAt(c);

            if (z != null)
            {
                yield return((object)z);

                /*Error: Unable to find new state assignment for yield return*/;
            }
        }
예제 #9
0
        private void SelectAllMatchingObjectUnderMouseOnScreen()
        {
            List <object> list = this.SelectableObjectsUnderMouse().ToList <object>();

            if (list.Count == 0)
            {
                return;
            }
            Thing clickedThing = list.FirstOrDefault((object o) => o is Pawn && ((Pawn)o).Faction == Faction.OfPlayer && !((Pawn)o).IsPrisoner) as Thing;

            clickedThing = (list.FirstOrDefault((object o) => o is Pawn) as Thing);
            if (clickedThing == null)
            {
                clickedThing = ((from o in list
                                 where o is Thing && !((Thing)o).def.neverMultiSelect
                                 select o).FirstOrDefault <object>() as Thing);
            }
            Rect rect = new Rect(0f, 0f, (float)UI.screenWidth, (float)UI.screenHeight);

            if (clickedThing != null)
            {
                IEnumerable       enumerable = ThingSelectionUtility.MultiSelectableThingsInScreenRectDistinct(rect);
                Predicate <Thing> predicate  = delegate(Thing t)
                {
                    if (t.def != clickedThing.def || t.Faction != clickedThing.Faction || this.IsSelected(t))
                    {
                        return(false);
                    }
                    Pawn pawn = clickedThing as Pawn;
                    if (pawn != null)
                    {
                        Pawn pawn2 = t as Pawn;
                        if (pawn2.RaceProps != pawn.RaceProps)
                        {
                            return(false);
                        }
                        if (pawn2.HostFaction != pawn.HostFaction)
                        {
                            return(false);
                        }
                    }
                    return(true);
                };
                foreach (Thing obj in enumerable)
                {
                    if (predicate(obj))
                    {
                        this.Select(obj, true, true);
                    }
                }
                return;
            }
            if (list.FirstOrDefault((object o) => o is Zone && ((Zone)o).IsMultiselectable) == null)
            {
                return;
            }
            IEnumerable <Zone> enumerable2 = ThingSelectionUtility.MultiSelectableZonesInScreenRectDistinct(rect);

            foreach (Zone current in enumerable2)
            {
                if (!this.IsSelected(current))
                {
                    this.Select(current, true, true);
                }
            }
        }
예제 #10
0
        private void SelectInsideDragBox()
        {
            if (!this.ShiftIsHeld)
            {
                this.ClearSelection();
            }
            bool         selectedSomething = false;
            List <Thing> list = Find.ColonistBar.MapColonistsOrCorpsesInScreenRect(this.dragBox.ScreenRect);

            for (int i = 0; i < list.Count; i++)
            {
                selectedSomething = true;
                this.Select(list[i], true, true);
            }
            if (selectedSomething)
            {
                return;
            }
            List <Caravan> list2 = Find.ColonistBar.CaravanMembersCaravansInScreenRect(this.dragBox.ScreenRect);

            for (int j = 0; j < list2.Count; j++)
            {
                if (!selectedSomething)
                {
                    CameraJumper.TryJumpAndSelect(list2[j]);
                    selectedSomething = true;
                }
                else
                {
                    Find.WorldSelector.Select(list2[j], true);
                }
            }
            if (selectedSomething)
            {
                return;
            }
            List <Thing> boxThings = ThingSelectionUtility.MultiSelectableThingsInScreenRectDistinct(this.dragBox.ScreenRect).ToList <Thing>();
            Func <Predicate <Thing>, bool> func = delegate(Predicate <Thing> predicate)
            {
                foreach (Thing current2 in from t in boxThings
                         where predicate(t)
                         select t)
                {
                    this.Select(current2, true, true);
                    selectedSomething = true;
                }
                return(selectedSomething);
            };
            Predicate <Thing> arg = (Thing t) => t.def.category == ThingCategory.Pawn && ((Pawn)t).RaceProps.Humanlike && t.Faction == Faction.OfPlayer;

            if (func(arg))
            {
                return;
            }
            Predicate <Thing> arg2 = (Thing t) => t.def.category == ThingCategory.Pawn && ((Pawn)t).RaceProps.Humanlike;

            if (func(arg2))
            {
                return;
            }
            Predicate <Thing> arg3 = (Thing t) => t.def.CountAsResource;

            if (func(arg3))
            {
                return;
            }
            Predicate <Thing> arg4 = (Thing t) => t.def.category == ThingCategory.Pawn;

            if (func(arg4))
            {
                return;
            }
            if (func((Thing t) => t.def.selectable))
            {
                return;
            }
            List <Zone> list3 = ThingSelectionUtility.MultiSelectableZonesInScreenRectDistinct(this.dragBox.ScreenRect).ToList <Zone>();

            foreach (Zone current in list3)
            {
                selectedSomething = true;
                this.Select(current, true, true);
            }
            if (selectedSomething)
            {
                return;
            }
            this.SelectUnderMouse();
        }
예제 #11
0
 public bool CanTarget(TargetInfo targ)
 {
     if (validator != null && !validator(targ))
     {
         return(false);
     }
     if (targ.Thing == null)
     {
         return(canTargetLocations);
     }
     if (neverTargetDoors && targ.Thing.def.IsDoor)
     {
         return(false);
     }
     if (onlyTargetDamagedThings && targ.Thing.HitPoints == targ.Thing.MaxHitPoints)
     {
         return(false);
     }
     if (onlyTargetFlammables && !targ.Thing.FlammableNow)
     {
         return(false);
     }
     if (mustBeSelectable && !ThingSelectionUtility.SelectableByMapClick(targ.Thing))
     {
         return(false);
     }
     if (targetSpecificThing != null && targ.Thing == targetSpecificThing)
     {
         return(true);
     }
     if (canTargetFires && targ.Thing.def == ThingDefOf.Fire)
     {
         return(true);
     }
     if (canTargetPawns && targ.Thing.def.category == ThingCategory.Pawn)
     {
         Pawn pawn = (Pawn)targ.Thing;
         if (pawn.Downed)
         {
             if (neverTargetIncapacitated)
             {
                 return(false);
             }
         }
         else if (onlyTargetIncapacitatedPawns)
         {
             return(false);
         }
         if (onlyTargetFactions != null && !onlyTargetFactions.Contains(targ.Thing.Faction))
         {
             return(false);
         }
         if (pawn.NonHumanlikeOrWildMan())
         {
             if (pawn.Faction == Faction.OfMechanoids)
             {
                 if (!canTargetMechs)
                 {
                     return(false);
                 }
             }
             else if (!canTargetAnimals)
             {
                 return(false);
             }
         }
         if (!pawn.NonHumanlikeOrWildMan() && !canTargetHumans)
         {
             return(false);
         }
         if (onlyTargetControlledPawns && !pawn.IsColonistPlayerControlled)
         {
             return(false);
         }
         if (onlyTargetColonists && (!pawn.IsColonist || pawn.HostFaction != null))
         {
             return(false);
         }
         if (onlyTargetPrisonersOfColony && !pawn.IsPrisonerOfColony)
         {
             return(false);
         }
         if (onlyTargetPsychicSensitive && pawn.GetStatValue(StatDefOf.PsychicSensitivity) <= 0f)
         {
             return(false);
         }
         if (neverTargetHostileFaction && !pawn.IsPrisonerOfColony)
         {
             Faction factionOrExtraMiniOrHomeFaction = pawn.FactionOrExtraMiniOrHomeFaction;
             if (factionOrExtraMiniOrHomeFaction != null && factionOrExtraMiniOrHomeFaction.HostileTo(Faction.OfPlayer))
             {
                 return(false);
             }
         }
         return(true);
     }
     if (canTargetBuildings && targ.Thing.def.category == ThingCategory.Building)
     {
         if (onlyTargetThingsAffectingRegions && !targ.Thing.def.AffectsRegions)
         {
             return(false);
         }
         if (onlyTargetFactions != null && !onlyTargetFactions.Contains(targ.Thing.Faction))
         {
             return(false);
         }
         return(true);
     }
     if (canTargetItems)
     {
         if (mapObjectTargetsMustBeAutoAttackable && !targ.Thing.def.isAutoAttackableMapObject)
         {
             return(false);
         }
         if (thingCategory == ThingCategory.None || thingCategory == targ.Thing.def.category)
         {
             return(true);
         }
     }
     return(false);
 }
예제 #12
0
        private void SelectAllMatchingObjectUnderMouseOnScreen()
        {
            List <object> list = SelectableObjectsUnderMouse().ToList();

            if (list.Count == 0)
            {
                return;
            }
            Thing clickedThing = list.FirstOrDefault((object o) => o is Pawn && ((Pawn)o).Faction == Faction.OfPlayer && !((Pawn)o).IsPrisoner) as Thing;

            clickedThing = (list.FirstOrDefault((object o) => o is Pawn) as Thing);
            if (clickedThing == null)
            {
                clickedThing = (list.Where((object o) => o is Thing && !((Thing)o).def.neverMultiSelect).FirstOrDefault() as Thing);
            }
            Rect rect = new Rect(0f, 0f, UI.screenWidth, UI.screenHeight);

            if (clickedThing == null)
            {
                if (list.FirstOrDefault((object o) => o is Zone && ((Zone)o).IsMultiselectable) != null)
                {
                    foreach (Zone item in ThingSelectionUtility.MultiSelectableZonesInScreenRectDistinct(rect))
                    {
                        if (!IsSelected(item))
                        {
                            Select(item);
                        }
                    }
                }
            }
            else
            {
                IEnumerable <Thing> enumerable = ThingSelectionUtility.MultiSelectableThingsInScreenRectDistinct(rect);
                Predicate <Thing>   predicate  = delegate(Thing t)
                {
                    if (t.def != clickedThing.GetInnerIfMinified().def || t.Faction != clickedThing.Faction || IsSelected(t))
                    {
                        return(false);
                    }
                    Pawn pawn = clickedThing as Pawn;
                    if (pawn != null)
                    {
                        Pawn pawn2 = t as Pawn;
                        if (pawn2.RaceProps != pawn.RaceProps)
                        {
                            return(false);
                        }
                        if (pawn2.HostFaction != pawn.HostFaction)
                        {
                            return(false);
                        }
                    }
                    return(true);
                };
                foreach (Thing item2 in (IEnumerable)enumerable)
                {
                    if (predicate(item2.GetInnerIfMinified()))
                    {
                        Select(item2);
                    }
                }
            }
        }
예제 #13
0
        private void SelectAllMatchingObjectUnderMouseOnScreen()
        {
            List <object> list = SelectableObjectsUnderMouse().ToList();

            if (list.Count != 0)
            {
                Thing clickedThing = list.FirstOrDefault((object o) => o is Pawn && ((Pawn)o).Faction == Faction.OfPlayer && !((Pawn)o).IsPrisoner) as Thing;
                clickedThing = (list.FirstOrDefault((object o) => o is Pawn) as Thing);
                if (clickedThing == null)
                {
                    clickedThing = ((from o in list
                                     where o is Thing && !((Thing)o).def.neverMultiSelect
                                     select o).FirstOrDefault() as Thing);
                }
                Rect rect = new Rect(0f, 0f, (float)UI.screenWidth, (float)UI.screenHeight);
                if (clickedThing == null)
                {
                    object obj = list.FirstOrDefault((object o) => o is Zone && ((Zone)o).IsMultiselectable);
                    if (obj != null)
                    {
                        IEnumerable <Zone> enumerable = ThingSelectionUtility.MultiSelectableZonesInScreenRectDistinct(rect);
                        foreach (Zone item in enumerable)
                        {
                            if (!IsSelected(item))
                            {
                                Select(item);
                            }
                        }
                    }
                }
                else
                {
                    IEnumerable       enumerable2 = ThingSelectionUtility.MultiSelectableThingsInScreenRectDistinct(rect);
                    Predicate <Thing> predicate   = delegate(Thing t)
                    {
                        if (t.def != clickedThing.def || t.Faction != clickedThing.Faction || IsSelected(t))
                        {
                            return(false);
                        }
                        Pawn pawn = clickedThing as Pawn;
                        if (pawn != null)
                        {
                            Pawn pawn2 = t as Pawn;
                            if (pawn2.RaceProps != pawn.RaceProps)
                            {
                                return(false);
                            }
                            if (pawn2.HostFaction != pawn.HostFaction)
                            {
                                return(false);
                            }
                        }
                        return(true);
                    };
                    IEnumerator enumerator2 = enumerable2.GetEnumerator();
                    try
                    {
                        while (enumerator2.MoveNext())
                        {
                            Thing obj2 = (Thing)enumerator2.Current;
                            if (predicate(obj2))
                            {
                                Select(obj2);
                            }
                        }
                    }
                    finally
                    {
                        IDisposable disposable;
                        if ((disposable = (enumerator2 as IDisposable)) != null)
                        {
                            disposable.Dispose();
                        }
                    }
                }
            }
        }