using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine; [AddComponentMenu("NGUI/Interaction/Table")] public class UITable : UIWidgetContainer { public bool repositionNow { set { if (value) { this.mReposition = true; base.enabled = true; } } } public List GetChildList() { Transform transform = base.transform; List list = new List(); for (int i = 0; i < transform.childCount; i++) { Transform child = transform.GetChild(i); if (!this.hideInactive || (child && NGUITools.GetActive(child.gameObject))) { list.Add(child); } } if (this.sorting != UITable.Sorting.None) { if (this.sorting == UITable.Sorting.Alphabetic) { List list2 = list; if (UITable.<>f__mg$cache0 == null) { UITable.<>f__mg$cache0 = new Comparison(UIGrid.SortByName); } list2.Sort(UITable.<>f__mg$cache0); } else if (this.sorting == UITable.Sorting.Horizontal) { List list3 = list; if (UITable.<>f__mg$cache1 == null) { UITable.<>f__mg$cache1 = new Comparison(UIGrid.SortHorizontal); } list3.Sort(UITable.<>f__mg$cache1); } else if (this.sorting == UITable.Sorting.Vertical) { List list4 = list; if (UITable.<>f__mg$cache2 == null) { UITable.<>f__mg$cache2 = new Comparison(UIGrid.SortVertical); } list4.Sort(UITable.<>f__mg$cache2); } else if (this.onCustomSort != null) { list.Sort(this.onCustomSort); } else { this.Sort(list); } } return list; } protected virtual void Sort(List list) { if (UITable.<>f__mg$cache3 == null) { UITable.<>f__mg$cache3 = new Comparison(UIGrid.SortByName); } list.Sort(UITable.<>f__mg$cache3); } protected virtual void Start() { this.Init(); this.Reposition(); base.enabled = false; } protected virtual void Init() { this.mInitDone = true; this.mPanel = NGUITools.FindInParents(base.gameObject); } protected virtual void LateUpdate() { if (this.mReposition) { this.Reposition(); } base.enabled = false; } private void OnValidate() { if (!Application.isPlaying && NGUITools.GetActive(this)) { this.Reposition(); } } protected void RepositionVariableSize(List children) { float num = 0f; float num2 = 0f; int num3 = (this.columns <= 0) ? 1 : (children.Count / this.columns + 1); int num4 = (this.columns <= 0) ? children.Count : this.columns; Bounds[,] array = new Bounds[num3, num4]; Bounds[] array2 = new Bounds[num4]; Bounds[] array3 = new Bounds[num3]; int num5 = 0; int num6 = 0; int i = 0; int count = children.Count; while (i < count) { Transform transform = children[i]; Bounds bounds = NGUIMath.CalculateRelativeWidgetBounds(transform, !this.hideInactive); Vector3 localScale = transform.localScale; bounds.min = Vector3.Scale(bounds.min, localScale); bounds.max = Vector3.Scale(bounds.max, localScale); array[num6, num5] = bounds; array2[num5].Encapsulate(bounds); array3[num6].Encapsulate(bounds); if (++num5 >= this.columns && this.columns > 0) { num5 = 0; num6++; } i++; } num5 = 0; num6 = 0; Vector2 pivotOffset = NGUIMath.GetPivotOffset(this.cellAlignment); int j = 0; int count2 = children.Count; while (j < count2) { Transform transform2 = children[j]; Bounds bounds2 = array[num6, num5]; Bounds bounds3 = array2[num5]; Bounds bounds4 = array3[num6]; Vector3 localPosition = transform2.localPosition; localPosition.x = num + bounds2.extents.x - bounds2.center.x; localPosition.x -= Mathf.Lerp(0f, bounds2.max.x - bounds2.min.x - bounds3.max.x + bounds3.min.x, pivotOffset.x) - this.padding.x; if (this.direction == UITable.Direction.Down) { localPosition.y = -num2 - bounds2.extents.y - bounds2.center.y; localPosition.y += Mathf.Lerp(bounds2.max.y - bounds2.min.y - bounds4.max.y + bounds4.min.y, 0f, pivotOffset.y) - this.padding.y; } else { localPosition.y = num2 + bounds2.extents.y - bounds2.center.y; localPosition.y -= Mathf.Lerp(0f, bounds2.max.y - bounds2.min.y - bounds4.max.y + bounds4.min.y, pivotOffset.y) - this.padding.y; } num += bounds3.size.x + this.padding.x * 2f; transform2.localPosition = localPosition; if (++num5 >= this.columns && this.columns > 0) { num5 = 0; num6++; num = 0f; num2 += bounds4.size.y + this.padding.y * 2f; } j++; } if (this.pivot != UIWidget.Pivot.TopLeft) { pivotOffset = NGUIMath.GetPivotOffset(this.pivot); Bounds bounds5 = NGUIMath.CalculateRelativeWidgetBounds(base.transform); float num7 = Mathf.Lerp(0f, bounds5.size.x, pivotOffset.x); float num8 = Mathf.Lerp(-bounds5.size.y, 0f, pivotOffset.y); Transform transform3 = base.transform; for (int k = 0; k < transform3.childCount; k++) { Transform child = transform3.GetChild(k); SpringPosition component = child.GetComponent(); if (component != null) { SpringPosition springPosition = component; springPosition.target.x = springPosition.target.x - num7; SpringPosition springPosition2 = component; springPosition2.target.y = springPosition2.target.y - num8; } else { Vector3 localPosition2 = child.localPosition; localPosition2.x -= num7; localPosition2.y -= num8; child.localPosition = localPosition2; } } } } [ContextMenu("Execute")] public virtual void Reposition() { if (Application.isPlaying && !this.mInitDone && NGUITools.GetActive(this)) { this.Init(); } this.mReposition = false; Transform transform = base.transform; List childList = this.GetChildList(); if (childList.Count > 0) { this.RepositionVariableSize(childList); } if (this.keepWithinPanel && this.mPanel != null) { this.mPanel.ConstrainTargetToBounds(transform, true); UIScrollView component = this.mPanel.GetComponent(); if (component != null) { component.UpdateScrollbars(true); } } if (this.onReposition != null) { this.onReposition(); } } public int columns; public UITable.Direction direction; public UITable.Sorting sorting; public UIWidget.Pivot pivot; public UIWidget.Pivot cellAlignment; public bool hideInactive = true; public bool keepWithinPanel; public Vector2 padding = Vector2.zero; public UITable.OnReposition onReposition; public Comparison onCustomSort; protected UIPanel mPanel; protected bool mInitDone; protected bool mReposition; [CompilerGenerated] private static Comparison <>f__mg$cache0; [CompilerGenerated] private static Comparison <>f__mg$cache1; [CompilerGenerated] private static Comparison <>f__mg$cache2; [CompilerGenerated] private static Comparison <>f__mg$cache3; public delegate void OnReposition(); public enum Direction { Down, Up } public enum Sorting { None, Alphabetic, Horizontal, Vertical, Custom } }