コード例 #1
0
        public static void UpdateBoxSelection(Vector3 s1, Vector3 s2, SelectionCriteria selectionCriteria = null)
        {
            Profiler.BeginSample("UpdateBoxSelection");

            foreach (var selectionListener in _selectionListeners.Values)
            {
                var selectable = selectionListener.SelectableComponent;

                var  p        = Camera.main.WorldToScreenPoint(selectable.position);
                var  s1P      = Vector2.Min(s1, s2);
                var  s2P      = Vector2.Max(s1, s2);
                bool selected = s1P.x <= p.x && p.x <= s2P.x && s1P.y <= p.y && p.y <= s2P.y;

                // update and notify only selection changes
                if (selected && IsValidSelection(selectionCriteria, selectable))
                {
                    Select(selectable); // no need to check selectable again
                }
                else
                {
                    Deselect(selectable);
                }
            }

            Profiler.EndSample();
        }
コード例 #2
0
 public static void Select(GameObject gameObject, SelectionCriteria selectionCriteria = null)
 {
     foreach (var selectable in GetSelectables(gameObject))
     {
         Select(selectable, selectionCriteria);
     }
 }
コード例 #3
0
 public static void Select(SelectableComponent selectableComponent, SelectionCriteria selectionCriteria = null)
 {
     if (!selectableComponent.isSelected && IsValidSelection(selectionCriteria, selectableComponent))
     {
         selectableComponent.Select();
     }
 }
コード例 #4
0
        public void UpdateBoxSelection(Vector3 s1, Vector3 s2, SelectionCriteria selectionCriteria = null)
        {
            for (int i = 0; i < selectionListeners.Count; i++)
            {
                var selectionListener = selectionListeners[i];
                var selectable        = selectionListener.selectable;

                if (selectionCriteria != null && SelectionCriteria.isValidSelection(selectionCriteria, selectable))
                {
                    Vector3 p        = Camera.main.WorldToScreenPoint(selectable.transform.position);
                    Vector2 s1p      = Vector2.Min(s1, s2);
                    Vector2 s2p      = Vector2.Max(s1, s2);
                    bool    selected = s1p.x <= p.x && p.x <= s2p.x && s1p.y <= p.y && p.y <= s2p.y;

                    // update and notify only selection changes
                    if (selected)
                    {
                        Select(selectable); // no need to check selectable again
                    }
                    else
                    {
                        Deselect(selectable);
                    }
                }
                else
                {
                    // not valid selection
                }
            }
        }
コード例 #5
0
 public void Select(Selectable selectable, SelectionCriteria selectionCriteria = null)
 {
     if (!selectable.isSelected && SelectionCriteria.isValidSelection(selectionCriteria, selectable))
     {
         selectable.Select();
     }
 }
コード例 #6
0
        public static void UpdateMouseSelection(GameObject mouseOverObject, SelectionCriteria selectionCriteria)
        {
            // // TODO: optimize this
            // if (MouseOverObject == mouseOverObject)
            //     return;

            Deselect(MouseOverObject);
            MouseOverObject = mouseOverObject;
            Select(MouseOverObject, selectionCriteria);
        }
コード例 #7
0
        public static bool IsValidSelection(SelectionCriteria criteria, SelectableComponent selectableComponent)
        {
            if (criteria is null)
            {
                return(true);
            }

            bool valid = criteria._isAgent == selectableComponent.entity.isAgent;

            valid = criteria._op(valid, criteria._isBuilding == selectableComponent.entity.isStructure);
            //valid = criteria.op(valid, criteria.isControllable != selectable.gameObject.GetComponent<Owner>());

            return(valid);
        }
コード例 #8
0
        public static bool isValidSelection(SelectionCriteria criteria, Selectable selectable)
        {
            if (criteria is null)
            {
                return(true);
            }

            bool valid = true;

            valid &= criteria.isAgent == StaticGameDefs.IsAgent(selectable.gameObject);
            valid &= criteria.isBuilding == StaticGameDefs.IsBuilding(selectable.gameObject);
            //valid &= isControlable != selectable.gameObject.GetComponent<Owner>();

            return(valid);
        }
コード例 #9
0
        public static void UpdateSelected(Vector3 s1, Vector3 s2, GameObject mouseOverObject, SelectionCriteria selectionCriteria = null)
        {
            if (Dirty || CheckDirty(s1, s2))
            {
                Dirty = false;

                // update controls vars
                _timeSinceLastSelectionUpdate = 0f;

                UpdateBoxSelection(s1, s2, selectionCriteria);
                UpdateMouseSelection(mouseOverObject, selectionCriteria);
                ProcessSelected();
            }
            else
            {
                CheckMissingSelected();
            }
        }
コード例 #10
0
        public void UpdateSelected(Vector3 s1, Vector3 s2, GameObject mouseOverObject, SelectionCriteria selectionCriteria = null)
        {
            if (CheckDirty(s1, s2))
            {
                // update controls vars
                timeSinceLastSelectionUpdate = 0f;

                UpdateBoxSelection(s1, s2, selectionCriteria);
                UpdateMouseSelection(mouseOverObject, selectionCriteria);
                ProcessSelected();
            }
        }