// select selectables in a sigle cell protected override int ProcessCell(IntVec3 cell) { if (Find.FogGrid.IsFogged(cell)) { return(0); } var cellThings = Find.ThingGrid.ThingsListAtFast(cell); var selectedObjects = Find.Selector.SelectedObjects; var hits = 0; for (var i = 0; i < cellThings.Count; i++) { var thing = cellThings[i]; if (!thing.def.selectable) { continue; } if (selectedObjects.Contains(thing)) { continue; } if (mode == OperationMode.Constrained && !ThingMatchesSelectionConstraints(thing)) { continue; } selectedObjects.Add(thing); SelectionDrawer.Notify_Selected(thing); hits++; } return(hits); }
public void Select() { SelectionDrawer.ResetPoints(_Area.Count); for (int i = 0; i < _Area.Count; i++) { SelectionDrawer.AddPoint(i, _Area[i]); } }
// Select something by adding directly to the selector's selected object list and then notfying the drawer. public static void SelectRaw(this Selector selector, object objectToSelect, bool notifyChange = true) { selector.SelectedObjects.Add(objectToSelect); if (notifyChange) { SelectionDrawer.Notify_Selected(objectToSelect); } }
static void Postfix(Blueprint_Build __instance, Thing __result) { if (transferring && Find.Selector.SelectedObjects.Contains(__instance) && __result != null) { Find.Selector.SelectedObjects.Add(__result); SelectionDrawer.Notify_Selected(__result); SelectorChangeNotifiers.SelectionChangeNotifierData.NotifyChange(); } }
private void SelectAllColonists() { Find.Selector.ClearSelection(); foreach (var pawn in GetColonistsOnVisibleMap()) { // bypass the selection limit Find.Selector.SelectedObjects.Add(pawn); SelectionDrawer.Notify_Selected(pawn); } Messages.Message("DefPos_msg_selectedAll".Translate(), MessageTypeDefOf.SilentInput); }
private void CellDesignate(IntVec3 cell) { var contents = Map.thingGrid.ThingsListAt(cell); var selector = Find.Selector; if (contents != null) { for (int i = 0; i < contents.Count; i++) { var thing = contents[i]; if (thing is Building_DetonatorWire && !selector.SelectedObjects.Contains(thing)) { selector.SelectedObjects.Add(thing); SelectionDrawer.Notify_Selected(thing); } } } }
public static void ClearAllMapsAndWorld() { if (Current.Game != null && Current.Game.Maps != null) { List <Map> maps = Find.Maps; FieldInfo[] fields = typeof(Map).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); for (int i = 0; i < fields.Length; i++) { if (fields[i].FieldType.IsClass) { for (int j = 0; j < maps.Count; j++) { fields[i].SetValue(maps[j], null); } } } maps.Clear(); Current.Game.currentMapIndex = -1; } if (Find.World != null) { World world = Find.World; FieldInfo[] fields2 = typeof(World).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); for (int k = 0; k < fields2.Length; k++) { if (fields2[k].FieldType.IsClass) { fields2[k].SetValue(world, null); } } } BillUtility.Clipboard = null; RegionTraverser.RecreateWorkers(); SelectionDrawer.Clear(); WorldSelectionDrawer.Clear(); List <MainButtonDef> allDefsListForReading = DefDatabase <MainButtonDef> .AllDefsListForReading; for (int l = 0; l < allDefsListForReading.Count; l++) { allDefsListForReading[l].Notify_ClearingAllMapsMemory(); } }
private void DrawSelectionOverlayOnGUI(Pawn colonist, Rect rect) { Thing thing = colonist; if (colonist.Dead) { thing = colonist.corpse; } float num = 0.4f * Scale; Vector2 textureSize = new Vector2(ColonistBarTextures.SelectedTex.width * num, ColonistBarTextures.SelectedTex.height * num); Vector3[] array = SelectionDrawer.SelectionBracketPartsPos(thing, rect.center, rect.size, textureSize, ColBarSettings.BaseSizeFloat * 0.4f * Scale); int num2 = 90; for (int i = 0; i < 4; i++) { Widgets.DrawTextureRotated(new Vector2(array[i].x, array[i].z), ColonistBarTextures.SelectedTex, num2, num); num2 += 90; } }
public bool TrySelectThing(Thing thing) { var selector = Find.Selector; if (!CanDesignateThing(thing).Accepted || selector.IsSelected(thing)) { return(false); } selector.SelectedObjects.Add(thing); // manually adding objects to the selection list gets around the stock selection limit SelectionDrawer.Notify_Selected(thing); if (!AnySelectionConstraints) { ReindexSelectionConstraints(); } else { constraintsNeedReindexing = true; } return(true); }
public override void UIRootUpdate() { this.CallAncestorUIRootUpdate(); try { Messages.Update(); this.targeter.TargeterUpdate(); SelectionDrawer.DrawSelectionOverlays(); RoomStatsDrawer.DrawRoomOverlays(); DesignatorManager.DesignatorManagerUpdate(); this.alerts.AlertsReadoutUpdate(); ConceptDecider.ConceptDeciderUpdate(); foreach (IUpdatedComponent current in this.updatedComponents) { current.Update(); } } catch (Exception ex) { Log.Error("Exception in UIRootUpdate: " + ex.ToString()); } }
// selects all things with the same def and stuff def private int SelectAllOfDef(ThingDef targetDef) { if (targetDef == null) { return(0); } var things = Find.ListerThings.AllThings; var selectedObjects = Find.Selector.SelectedObjects; var hits = 0; for (int i = 0; i < things.Count; i++) { var thing = things[i]; if (thing.def != targetDef || Find.FogGrid.IsFogged(thing.Position) || selectedObjects.Contains(thing)) { continue; } selectedObjects.Add(thing); SelectionDrawer.Notify_Selected(thing); hits++; } return(hits); }
public static void ClearAllMapsAndWorld() { if (Current.Game != null && Current.Game.Maps != null) { List <Map> maps = Find.Maps; FieldInfo[] fields = typeof(Map).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); for (int i = 0; i < fields.Length; i++) { if (fields[i].FieldType.IsClass) { for (int j = 0; j < maps.Count; j++) { fields[i].SetValue(maps[j], null); } } } maps.Clear(); Current.Game.currentMapIndex = -1; } if (Find.World != null) { World world = Find.World; FieldInfo[] fields2 = typeof(World).GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); for (int k = 0; k < fields2.Length; k++) { if (fields2[k].FieldType.IsClass) { fields2[k].SetValue(world, null); } } } BillUtility.Clipboard = null; RegionTraverser.RecreateWorkers(); SelectionDrawer.Clear(); WorldSelectionDrawer.Clear(); BreakRiskAlertUtility.Clear(); Region.ClearStaticData(); PawnsFinder.Clear(); List <MainButtonDef> allDefsListForReading = DefDatabase <MainButtonDef> .AllDefsListForReading; for (int l = 0; l < allDefsListForReading.Count; l++) { allDefsListForReading[l].Notify_ClearingAllMapsMemory(); } List <ThingDef> allDefsListForReading2 = DefDatabase <ThingDef> .AllDefsListForReading; for (int m = 0; m < allDefsListForReading2.Count; m++) { if (allDefsListForReading2[m].inspectorTabsResolved != null) { for (int n = 0; n < allDefsListForReading2[m].inspectorTabsResolved.Count; n++) { allDefsListForReading2[m].inspectorTabsResolved[n].Notify_ClearingAllMapsMemory(); } } } List <WorldObjectDef> allDefsListForReading3 = DefDatabase <WorldObjectDef> .AllDefsListForReading; for (int num = 0; num < allDefsListForReading3.Count; num++) { if (allDefsListForReading3[num].inspectorTabsResolved != null) { for (int num2 = 0; num2 < allDefsListForReading3[num].inspectorTabsResolved.Count; num2++) { allDefsListForReading3[num].inspectorTabsResolved[num2].Notify_ClearingAllMapsMemory(); } } } }
void Update() { //Handle Movement Vector3 velocity = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); velocity.Normalize(); velocity *= MoveSpeed * Time.deltaTime; transform.Translate(velocity, Space.World); //Handle Selection if (Input.GetButtonUp("Pause") && !_WasTreeOpen) { SetTreeOpen(true); SceneManager.LoadSceneAsync("GC_PauseMenu", LoadSceneMode.Additive); } if (Input.GetButtonDown("LMClick") && !_WasTreeOpen) { if (Input.mousePosition.y < 250.0f) { return; } var ray = _Camera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(ray, out rayHit, _MaxRayDistance, _RayLayerMask)) { if (_IsRegionMenuOpen) { RegionMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_RegionMenuMaster"); _IsRegionMenuOpen = false; } if (rayHit.transform.GetComponent <Ownership>().Owner == Owner.PLAYER) { if (rayHit.transform.CompareTag("Town")) { if (_IsArmyMenuOpen) { SceneManager.UnloadSceneAsync("GC_ArmyMenuMaster"); SceneManager.UnloadSceneAsync("GC_ArmyMenuArmy"); SelectedArmy = null; _IsArmyMenuOpen = false; if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } if (SelectedTown == null) { SelectedTown = rayHit.transform.GetComponent <Town>(); _IsTownMenuOpen = true; SceneManager.LoadScene("GC_TownMenuMaster", LoadSceneMode.Additive); } var town = rayHit.transform.GetComponent <Town>(); if (SelectedTown != town) { SelectedTown = town; TownMenuMasterSelector.Reload(); } SelectedTown.gameObject.GetComponent <SelectableArea>().Select(); } else if (rayHit.transform.CompareTag("Army")) { if (_IsTownMenuOpen) { SelectionDrawer.ResetPoints(0); SelectedTown = null; _IsTownMenuOpen = false; TownMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_TownMenuMaster"); if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } if (_IsRegionMenuOpen) { SelectionDrawer.ResetPoints(0); _IsRegionMenuOpen = false; RegionMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_RegionMenuMaster"); if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } var army = rayHit.transform.GetComponent <OverworldArmy>().Army; if (SelectedArmy == null) { SelectedArmy = army; SceneManager.LoadSceneAsync("GC_ArmyMenuMaster", LoadSceneMode.Additive); SceneManager.LoadSceneAsync("GC_ArmyMenuArmy", LoadSceneMode.Additive); _IsArmyMenuOpen = true; } else if (SelectedArmy != army) { SelectedArmy = army; SceneManager.UnloadSceneAsync("GC_ArmyMenuMaster"); SceneManager.UnloadSceneAsync("GC_ArmyMenuArmy"); SceneManager.LoadSceneAsync("GC_ArmyMenuMaster", LoadSceneMode.Additive); SceneManager.LoadSceneAsync("GC_ArmyMenuArmy", LoadSceneMode.Additive); } if (SelectedArmy != null && !rayHit.transform.GetComponent <OverworldArmy>().HasMoved) { army.DisplayRange(); } } } else if (_IsTownMenuOpen) { SelectionDrawer.ResetPoints(0); SelectedTown = null; _IsTownMenuOpen = false; TownMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_TownMenuMaster"); if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } else if (_IsRegionMenuOpen) { SelectionDrawer.ResetPoints(0); _IsRegionMenuOpen = false; RegionMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_RegionMenuMaster"); if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } else if (_IsArmyMenuOpen) { SceneManager.UnloadSceneAsync("GC_ArmyMenuMaster"); SceneManager.UnloadSceneAsync("GC_ArmyMenuArmy"); SelectedArmy = null; _IsArmyMenuOpen = false; if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } } else if (_IsTownMenuOpen) { SelectionDrawer.ResetPoints(0); SelectedTown = null; _IsTownMenuOpen = false; TownMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_TownMenuMaster"); if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } else if (_IsRegionMenuOpen) { SelectionDrawer.ResetPoints(0); _IsRegionMenuOpen = false; RegionMenuMasterSelector.Unload(); SceneManager.UnloadSceneAsync("GC_RegionMenuMaster"); if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } else if (_IsArmyMenuOpen) { SceneManager.UnloadSceneAsync("GC_ArmyMenuMaster"); SceneManager.UnloadSceneAsync("GC_ArmyMenuArmy"); SelectedArmy = null; _IsArmyMenuOpen = false; if (IsUnitStatsScreenOpen) { SceneManager.UnloadSceneAsync("GC_UnitStats"); IsUnitStatsScreenOpen = false; } } } if (Input.GetButtonDown("RMClick") && SelectedArmy != null) { if (Input.mousePosition.y < 250.0f) { return; } int mask = 1 << 10; var ray = _Camera.ScreenPointToRay(Input.mousePosition); RaycastHit rayHit; if (Physics.Raycast(ray, out rayHit, _MaxRayDistance, mask)) { if (rayHit.transform.CompareTag("Terrain") && Vector3.Distance(rayHit.point, SelectedArmy.Position) <= SelectedArmy.GetMoveRange()) { if (SelectedArmy.InOverWorld) { if (!SelectedArmy.GetOverworldArmy().HasMoved) { SelectedArmy.GetOverworldArmy().MoveTo(rayHit.point); } } else { var obj = Instantiate(ArmyTemplate); obj.GetComponent <OverworldArmy>().Army = SelectedArmy; obj.GetComponent <OverworldArmy>().MoveTo(rayHit.point); SelectedArmy.SetOverworldArmy(obj.GetComponent <OverworldArmy>()); SelectedArmy.InOverWorld = true; SelectedTown.ClearGarrison(); SelectedArmy = null; } } } } if (!_IsTreeOpen && _WasTreeOpen) { _WasTreeOpen = false; } }
public void Update() { SelectionDrawer.DrawSelectionOverlays(); }
public static bool Prefix(this Selector __instance, object obj, bool playSound, bool forceDesignatorDeselect) { Log.Message("Hello from Patch_Selector_Select Prefix"); bool clearShelfOnAdd = true; List <Object> _selected = _selected_fi.GetValue(__instance) as List <Object>; List <Object> _shelved = _shelved_fi.GetValue(__instance) as List <Object>; if (obj == null) { Log.Error("Cannot select null."); return(false); } Thing thing = obj as Thing; if (thing == null && !(obj is Zone)) { Log.Error("Tried to select " + obj + " which is neither a Thing nor a Zone."); return(false); } if (thing != null && thing.Destroyed) { Log.Error("Cannot select destroyed thing."); return(false); } Pawn pawn = obj as Pawn; if (pawn != null && pawn.IsWorldPawn()) { Log.Error("Cannot select world pawns."); return(false); } if (forceDesignatorDeselect) { Find.DesignatorManager.Deselect(); } if (__instance.SelectedZone != null && !(obj is Zone)) { __instance.ClearSelection(); } if (obj is Zone && __instance.SelectedZone == null) { __instance.ClearSelection(); } Map map = (thing != null) ? thing.Map : ((Zone)obj).Map; for (int num = _selected.Count - 1; num >= 0; num--) { Thing thing2 = _selected[num] as Thing; if (((thing2 != null) ? thing2.Map : ((Zone)_selected[num]).Map) != map) { __instance.Deselect(_selected[num]); } } //if (_selected.Count < 200 && !__instance.IsSelected(obj)) if (!__instance.IsSelected(obj)) { if (map != Find.CurrentMap) { Current.Game.CurrentMap = map; SoundDefOf.MapSelected.PlayOneShotOnCamera(); IntVec3 cell = thing?.Position ?? ((Zone)obj).Cells[0]; Find.CameraDriver.JumpToCurrentMapLoc(cell); } if (playSound) { //PlaySelectionSoundFor(obj); _PlaySelectionSoundFor.Invoke(__instance, new object[] { obj }); } _selected.Add(obj); if (clearShelfOnAdd) { _shelved.Clear(); } SelectionDrawer.Notify_Selected(obj); } return(false); }