// 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);
 }
Пример #6
0
        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);
                    }
                }
            }
        }
Пример #7
0
        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();
            }
        }
Пример #8
0
        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);
        }
Пример #10
0
 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);
        }
Пример #12
0
        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();
                    }
                }
            }
        }
Пример #13
0
    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();
 }
Пример #15
0
        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);
        }