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(); }
public static void Select(GameObject gameObject, SelectionCriteria selectionCriteria = null) { foreach (var selectable in GetSelectables(gameObject)) { Select(selectable, selectionCriteria); } }
public static void Select(SelectableComponent selectableComponent, SelectionCriteria selectionCriteria = null) { if (!selectableComponent.isSelected && IsValidSelection(selectionCriteria, selectableComponent)) { selectableComponent.Select(); } }
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 } } }
public void Select(Selectable selectable, SelectionCriteria selectionCriteria = null) { if (!selectable.isSelected && SelectionCriteria.isValidSelection(selectionCriteria, selectable)) { selectable.Select(); } }
public static void UpdateMouseSelection(GameObject mouseOverObject, SelectionCriteria selectionCriteria) { // // TODO: optimize this // if (MouseOverObject == mouseOverObject) // return; Deselect(MouseOverObject); MouseOverObject = mouseOverObject; Select(MouseOverObject, selectionCriteria); }
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); }
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); }
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(); } }
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(); } }