private void SelectElements(HierarchyObjectElementV2 hierarchyObjectElement) { if (!canSelectDropdownElements && hierarchyObjectElement.isDropdownElement) { return; } else { } if (allowMultiElementSelection) { //allow a multiselection click } else { for (int i = 0; i < _selectedElements.Count; i++) { _selectedElements[i].isSelected = false; } _selectedElements.Clear(); hierarchyObjectElement.isSelected = true; _selectedElements.Add(hierarchyObjectElement); } }
//Update all the children of a specific element public void UpdateChildrenElements(HierarchyObjectElementV2 hierarchyObjectElement) { for (int i = 0; i < hierarchyObjectElement.hierarchyObjectElements.Count; i++) { UpdateCompleteElement(hierarchyObjectElement); } }
public void CallEventOnElementSelected(HierarchyObjectElementV2 hierarchyObjectElement) { if (onElementSelected != null) { onElementSelected.Invoke(hierarchyObjectElement); } }
//Some things have not been implimented fully! #region Remove HierarchyObjectV2 Methods public void RemoveHierarchyObjectWithoutUpdate(HierarchyObjectElementV2 hierarchyObjectElement) { BufferHierarchyBranch(hierarchyObjectElement); if (hierarchyObjectElement.rootElement != null) { hierarchyObjectElement.rootElement.RemoveHeirarchyElement(hierarchyObjectElement); } }
public void RemoveHeirarchyElement(HierarchyObjectElementV2 hierarchyObjectElement) { _hierarchyObjectElements.Remove(hierarchyObjectElement); hierarchyObjectElement._siblingIndex = 0; hierarchyObjectElement.rectTransform.SetParent(null); hierarchyObjectElement._rootElement = null; hierarchyObjectElement._depthIndex = 0; //hierarchyElement.GetComponent<RectTransform>().SetParent(rectTransform); }
//Places the element in the correct child spot inside its root element (Must be an element with a root element) public void UpdateElementPosition(HierarchyObjectElementV2 hierarchyObjectElement) { float heightOffset = hierarchyObjectElement.rootElement.rectTransform.sizeDelta.y / 2.0f - hierarchyBaseElement.hierarchyElementsHeight / 2.0f; for (int i = 0; i < hierarchyObjectElement.siblingIndex; i++) { heightOffset -= hierarchyObjectElement.rootElement.hierarchyObjectElements[i].rectTransform.sizeDelta.y; } hierarchyObjectElement.rectTransform.localPosition = new Vector2(0, heightOffset - hierarchyObjectElement.rectTransform.sizeDelta.y / 2.0f - hierarchyBaseElement.hierarchyElementsHeight / 2.0f); }
private void BufferHierarchyBranch(HierarchyObjectElementV2 hierarchyObjectElement) { for (int i = hierarchyObjectElement.hierarchyObjectElements.Count - 1; i >= 0; i--) { BufferHierarchyBranch(hierarchyObjectElement.hierarchyObjectElements[0]); hierarchyObjectElement.RemoveHeirarchyElement(hierarchyObjectElement.hierarchyObjectElements[0]); } hierarchyElementArchetypeBuffer[hierarchyObjectElement.bufferedHierarchyType].bufferedHierarchyObjectElements.Buffer(hierarchyObjectElement.bufferedHierarchyObjectElement); bufferedHierarchyTabElements.BufferRange(hierarchyObjectElement.ClearTabElements()); }
public void AddHeirarchyElement(HierarchyObjectElementV2 hierarchyObjectElement) { hierarchyObjectElement._siblingIndex = _hierarchyObjectElements.Count; _hierarchyObjectElements.Add(hierarchyObjectElement); hierarchyObjectElement.rectTransform.SetParent(rectTransform); hierarchyObjectElement._rootElement = this; hierarchyObjectElement._depthIndex = _depthIndex + 1; //Debug.Log("ADDED A CHILD", hierarchyObjectElement); //UpdateElementHeight(); }
//Updates this element and all its roots public void UpdateHierarchyBranch(HierarchyObjectElementV2 hierarchyObjectElement) { HierarchyObjectElementV2 childHierarchyObjectElement = hierarchyObjectElement; for (int i = 0; i < hierarchyObjectElement.depthIndex + 1; i++) { childHierarchyObjectElement.UpdateElementHeight(); childHierarchyObjectElement.rectTransform.sizeDelta = new Vector2(_rect.width, childHierarchyObjectElement.fullElementHeight); childHierarchyObjectElement = childHierarchyObjectElement.rootElement; } }
public void RemoveHierarchyObject(HierarchyObjectElementV2 hierarchyObjectElement) { RemoveHierarchyObjectWithoutUpdate(hierarchyObjectElement); if (hierarchyObjectElement.rootElement != null) { hierarchyContentElement.UpdateHierarchyBranch(hierarchyObjectElement.rootElement); } else { Debug.LogError("THIS HAS NOT BEEN IMPLIMENTED"); //remove the base hierarchyObject and then call hierarhcyEleme.UpdateRootElements } }
//Cannot call on an element that is a root element of the hierarchy private void UpdateCompleteElement(HierarchyObjectElementV2 hierarchyObjectElement) { float heightOffset = hierarchyObjectElement.rectTransform.sizeDelta.y / 2.0f - hierarchyBaseElement.hierarchyElementsHeight / 2.0f; hierarchyObjectElement.labelRectTransform.localPosition = new Vector2(0, heightOffset); for (int i = 0; i < hierarchyObjectElement.hierarchyObjectElements.Count; i++) { hierarchyObjectElement.hierarchyObjectElements[i].rectTransform.localPosition = new Vector2(0, heightOffset - hierarchyObjectElement.hierarchyObjectElements[i].rectTransform.sizeDelta.y / 2.0f - hierarchyBaseElement.hierarchyElementsHeight / 2.0f); heightOffset -= hierarchyObjectElement.hierarchyObjectElements[i].rectTransform.sizeDelta.y; UpdateCompleteElement(hierarchyObjectElement.hierarchyObjectElements[i]); } }
private IEnumerator UpdateHierarchyBranch(HierarchyObjectElementV2 hierarchyObjectElement) { List <HierarchyObjectElementV2> expandingElements = new List <HierarchyObjectElementV2>(); expandingElements.Add(hierarchyObjectElement); GetRootElement(hierarchyObjectElement); void GetRootElement(HierarchyObjectElementV2 element) { if (element.rootElement != null) { expandingElements.Add(element.rootElement); GetRootElement(element.rootElement); } } for (int i = 0; i < expandingElements.Count; i++) { expandingElements[i].UpdateElementHeight(); } for (int i = expandingElements.Count - 1; i >= 0; i--) { LayoutRebuilder.ForceRebuildLayoutImmediate(expandingElements[i].rectTransform); } while (expandingElements.Count > 0) { for (int i = expandingElements.Count - 1; i >= 0; i--) { var sizeDelta = expandingElements[i].rectTransform.sizeDelta; expandingElements[i].rectTransform.sizeDelta = Vector2.Lerp(sizeDelta, expandingElements[i].desiredSize, hierarchyAnimationValues.hierarchyListOpenSpeed); if (Mathf.Abs(sizeDelta.y - expandingElements[i].desiredSize.y) < 0.5f) { expandingElements[i].rectTransform.sizeDelta = expandingElements[i].desiredSize; expandingElements.RemoveAt(i); } } UpdateHierarchyLayoutElements(); yield return(new WaitForFixedUpdate()); } }
public HierarchyObjectElementV2 AddHierarchyObject(HierarchyObjectV2 hierarchyObject, HierarchyObjectElementV2 parent, int siblingIndex) { var hierarchyObjectElement = AddHierarchyObjectWithoutUpdate(hierarchyObject, parent, siblingIndex); //Cannot use this function as even though this places the Object correctly while being more optmised than updating all children elements //If the update is being is being optimised by calling AddHierarchyObjectWithoutUpdate, when finally calling AddHierarchyObject, the objects called WithoutUpdate would be missplaced //hierarchyBaseElement.hierarchyContentElement.UpdateElementPosition(hierarchyObjectElement); hierarchyContentElement.UpdateChildrenElements(parent); hierarchyContentElement.UpdateHierarchyBranch(parent); if (parent.isExpanded) { hierarchyContentElement.UpdateRootElements(); } return(hierarchyObjectElement); }
public HierarchyObjectElementV2 AddHierarchyObjectWithoutUpdate(HierarchyObjectV2 hierarchyObject, HierarchyObjectElementV2 parent, int siblingIndex) { var hierarchyObjectElement = CreateHierarchy(hierarchyObject, parent.depthIndex + 1); if (parent.hierarchyObjectElements.Count == 0) { parent.enableArrowElement = true; } parent.AddHeirarchyElement(hierarchyObjectElement); hierarchyObjectElement.SetSiblingIndex(siblingIndex); return(hierarchyObjectElement); }
public void EnableHierarchyBranch(HierarchyObjectElementV2 hierarchyObjectElement) { StartCoroutine(UpdateHierarchyBranch(hierarchyObjectElement)); }
public BufferedHierarchyObjectElementV2(GameObject gameObject) : base(gameObject) { hierarchyObjectElement = gameObject.GetComponent <HierarchyObjectElementV2>(); }