コード例 #1
0
        public static List <WorldObject> WorldObjectsUnderMouse(Vector2 mousePos)
        {
            List <WorldObject> list = new List <WorldObject>();

            ExpandableWorldObjectsUtility.GetExpandedWorldObjectUnderMouse(mousePos, list);
            float caravanDirectClickRadius = CaravanDirectClickRadius;

            clickedCaravans.Clear();
            List <Caravan> caravans = Find.WorldObjects.Caravans;

            for (int i = 0; i < caravans.Count; i++)
            {
                Caravan caravan = caravans[i];
                if (caravan.DistanceToMouse(mousePos) < caravanDirectClickRadius)
                {
                    clickedCaravans.Add(caravan);
                }
            }
            clickedCaravans.SortBy((Caravan x) => x.DistanceToMouse(mousePos));
            for (int j = 0; j < clickedCaravans.Count; j++)
            {
                if (!list.Contains(clickedCaravans[j]))
                {
                    list.Add(clickedCaravans[j]);
                }
            }
            float dynamicallyDrawnObjectDirectClickRadius = DynamicallyDrawnObjectDirectClickRadius;

            clickedDynamicallyDrawnObjects.Clear();
            List <WorldObject> allWorldObjects = Find.WorldObjects.AllWorldObjects;

            for (int k = 0; k < allWorldObjects.Count; k++)
            {
                WorldObject worldObject = allWorldObjects[k];
                if (worldObject.def.useDynamicDrawer && worldObject.DistanceToMouse(mousePos) < dynamicallyDrawnObjectDirectClickRadius)
                {
                    clickedDynamicallyDrawnObjects.Add(worldObject);
                }
            }
            clickedDynamicallyDrawnObjects.SortBy((WorldObject x) => x.DistanceToMouse(mousePos));
            for (int l = 0; l < clickedDynamicallyDrawnObjects.Count; l++)
            {
                if (!list.Contains(clickedDynamicallyDrawnObjects[l]))
                {
                    list.Add(clickedDynamicallyDrawnObjects[l]);
                }
            }
            int num = GenWorld.TileAt(mousePos);
            List <WorldObject> allWorldObjects2 = Find.WorldObjects.AllWorldObjects;

            for (int m = 0; m < allWorldObjects2.Count; m++)
            {
                if (allWorldObjects2[m].Tile == num && !list.Contains(allWorldObjects2[m]))
                {
                    list.Add(allWorldObjects2[m]);
                }
            }
            float caravanWideClickRadius = CaravanWideClickRadius;

            clickedCaravans.Clear();
            List <Caravan> caravans2 = Find.WorldObjects.Caravans;

            for (int n = 0; n < caravans2.Count; n++)
            {
                Caravan caravan2 = caravans2[n];
                if (caravan2.DistanceToMouse(mousePos) < caravanWideClickRadius)
                {
                    clickedCaravans.Add(caravan2);
                }
            }
            clickedCaravans.SortBy((Caravan x) => x.DistanceToMouse(mousePos));
            for (int num2 = 0; num2 < clickedCaravans.Count; num2++)
            {
                if (!list.Contains(clickedCaravans[num2]))
                {
                    list.Add(clickedCaravans[num2]);
                }
            }
            clickedCaravans.Clear();
            return(list);
        }
コード例 #2
0
 public virtual bool AllMatchingObjectsOnScreenMatchesWith(WorldObject other)
 {
     return(Faction == other.Faction);
 }
コード例 #3
0
 public static void Notify_Selected(WorldObject t)
 {
     WorldSelectionDrawer.selectTimes[t] = Time.realtimeSinceStartup;
 }
コード例 #4
0
        public static IEnumerable <FloatMenuOption> GetFloatMenuOptions <T>(Func <FloatMenuAcceptanceReport> acceptanceReportGetter, Func <T> arrivalActionGetter, string label, Caravan caravan, int pathDestination, WorldObject revalidateWorldClickTarget, Action <Action> confirmActionProxy = null) where T : CaravanArrivalAction
        {
            FloatMenuAcceptanceReport floatMenuAcceptanceReport = acceptanceReportGetter();

            if (!floatMenuAcceptanceReport.Accepted && floatMenuAcceptanceReport.FailReason.NullOrEmpty() && floatMenuAcceptanceReport.FailMessage.NullOrEmpty())
            {
                yield break;
            }
            if (!floatMenuAcceptanceReport.FailReason.NullOrEmpty())
            {
                yield return(new FloatMenuOption(label + " (" + floatMenuAcceptanceReport.FailReason + ")", null));

                yield break;
            }
            Action action = delegate
            {
                FloatMenuAcceptanceReport floatMenuAcceptanceReport3 = acceptanceReportGetter();
                if (floatMenuAcceptanceReport3.Accepted)
                {
                    caravan.pather.StartPath(pathDestination, arrivalActionGetter(), repathImmediately: true);
                }
                else if (!floatMenuAcceptanceReport3.FailMessage.NullOrEmpty())
                {
                    Messages.Message(floatMenuAcceptanceReport3.FailMessage, new GlobalTargetInfo(pathDestination), MessageTypeDefOf.RejectInput, historical: false);
                }
            };

            yield return(new FloatMenuOption(label, (confirmActionProxy == null) ? action : ((Action) delegate
            {
                confirmActionProxy(action);
            }), MenuOptionPriority.Default, null, null, 0f, null, revalidateWorldClickTarget));

            if (Prefs.DevMode)
            {
                yield return(new FloatMenuOption(label + " (Dev: instantly)", delegate
                {
                    FloatMenuAcceptanceReport floatMenuAcceptanceReport2 = acceptanceReportGetter();
                    if (floatMenuAcceptanceReport2.Accepted)
                    {
                        caravan.Tile = pathDestination;
                        caravan.pather.StopDead();
                        arrivalActionGetter().Arrived(caravan);
                    }
                    else if (!floatMenuAcceptanceReport2.FailMessage.NullOrEmpty())
                    {
                        Messages.Message(floatMenuAcceptanceReport2.FailMessage, new GlobalTargetInfo(pathDestination), MessageTypeDefOf.RejectInput, historical: false);
                    }
                }, MenuOptionPriority.Default, null, null, 0f, null, revalidateWorldClickTarget));
            }
        }