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); }
public virtual bool AllMatchingObjectsOnScreenMatchesWith(WorldObject other) { return(Faction == other.Faction); }
public static void Notify_Selected(WorldObject t) { WorldSelectionDrawer.selectTimes[t] = Time.realtimeSinceStartup; }
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)); } }