123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- 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<Transform> GetChildList()
- {
- Transform transform = base.transform;
- List<Transform> list = new List<Transform>();
- 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<Transform> list2 = list;
- if (UITable.<>f__mg$cache0 == null)
- {
- UITable.<>f__mg$cache0 = new Comparison<Transform>(UIGrid.SortByName);
- }
- list2.Sort(UITable.<>f__mg$cache0);
- }
- else if (this.sorting == UITable.Sorting.Horizontal)
- {
- List<Transform> list3 = list;
- if (UITable.<>f__mg$cache1 == null)
- {
- UITable.<>f__mg$cache1 = new Comparison<Transform>(UIGrid.SortHorizontal);
- }
- list3.Sort(UITable.<>f__mg$cache1);
- }
- else if (this.sorting == UITable.Sorting.Vertical)
- {
- List<Transform> list4 = list;
- if (UITable.<>f__mg$cache2 == null)
- {
- UITable.<>f__mg$cache2 = new Comparison<Transform>(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<Transform> list)
- {
- if (UITable.<>f__mg$cache3 == null)
- {
- UITable.<>f__mg$cache3 = new Comparison<Transform>(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<UIPanel>(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<Transform> 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<SpringPosition>();
- 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<Transform> 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<UIScrollView>();
- 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<Transform> onCustomSort;
- protected UIPanel mPanel;
- protected bool mInitDone;
- protected bool mReposition;
- [CompilerGenerated]
- private static Comparison<Transform> <>f__mg$cache0;
- [CompilerGenerated]
- private static Comparison<Transform> <>f__mg$cache1;
- [CompilerGenerated]
- private static Comparison<Transform> <>f__mg$cache2;
- [CompilerGenerated]
- private static Comparison<Transform> <>f__mg$cache3;
- public delegate void OnReposition();
- public enum Direction
- {
- Down,
- Up
- }
- public enum Sorting
- {
- None,
- Alphabetic,
- Horizontal,
- Vertical,
- Custom
- }
- }
|