From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- Client/Assets/Scripts/UICommon/XUIWrapContent.cs | 201 +++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 Client/Assets/Scripts/UICommon/XUIWrapContent.cs (limited to 'Client/Assets/Scripts/UICommon/XUIWrapContent.cs') diff --git a/Client/Assets/Scripts/UICommon/XUIWrapContent.cs b/Client/Assets/Scripts/UICommon/XUIWrapContent.cs new file mode 100644 index 00000000..d167a64b --- /dev/null +++ b/Client/Assets/Scripts/UICommon/XUIWrapContent.cs @@ -0,0 +1,201 @@ +using System.Collections.Generic; +using UILib; +using UnityEngine; +using XUtliPoolLib; + +public class XUIWrapContent : XUIObject, IXUIWrapContent +{ + + protected override void OnAwake() + { + base.OnAwake(); + m_uiWrapContent = GetComponent(); + if (null == m_uiWrapContent) + { + Debug.LogError("null == m_uiWrapContent"); + } + + m_uiWrapContent.updateHandler = OnItemUpdate; + + if (Tpl == null) + { + Debug.LogError("Tpl == null"); + } + + if (!m_uiWrapContent.Init()) + { + Debug.LogError("m_uiWrapContent.Init Failed"); + } + } + + protected override void OnStart() + { + base.OnStart(); + + if (!m_ItemPool.IsValid) + m_ItemPool.SetupPool(this.gameObject, Tpl, (uint)maxItemCount, false); + } + + public bool enableBounds + { + get + { + return m_uiWrapContent.bBounds; + } + set + { + m_uiWrapContent.bBounds = value; + } + } + + public Vector2 itemSize + { + get + { + return m_uiWrapContent.itemSize; + } + set + { + m_uiWrapContent.itemSize = value; + } + } + + public int widthDimension + { + get + { + return m_uiWrapContent.WidthDimension; + } + set + { + m_uiWrapContent.WidthDimension = value; + } + } + + public int heightDimensionMax + { + get + { + return m_uiWrapContent.HeightDimemsionMax; + } + } + public int maxItemCount + { + get + { + return (m_uiWrapContent.HeightDimemsionMax + 2) * m_uiWrapContent.WidthDimension; + } + } + + //public void SetBounds(int lowerBound, int upperBound) + //{ + // m_uiWrapContent.lowerBound = lowerBound; + // m_uiWrapContent.upperBound = upperBound; + // m_uiWrapContent.bBounds = true; + // m_uiWrapContent.AdjustContent(); + //} + + protected void _InitContent(int count, bool fadeIn = false) + { + int goCount = Mathf.Min(count, maxItemCount); + + if(!m_ItemPool.IsValid) + m_ItemPool.SetupPool(this.gameObject, Tpl, (uint)maxItemCount, false); + + if (fadeIn || goCount != m_ItemPool.ActiveCount) + { + BetterList itemList = m_uiWrapContent.ItemList; + itemList.Clear(); + if (fadeIn) + m_ItemPool.ReturnAll(); + else + m_ItemPool.FakeReturnAll(); + for (int i = 0; i < goCount; ++i) + { + GameObject go = m_ItemPool.FetchGameObject(fadeIn); + itemList.Add(go.transform); + OnItemInit(go.transform, i); + } + if(!fadeIn) + m_ItemPool.ActualReturnAll(); + + m_uiWrapContent.SetChildPositionOffset(0); + } + } + + private int _GetRowCount(int count, int columnCount) + { + if (count <= 0) + return 0; + return ((count - 1) / columnCount + 1); + } + + public void SetContentCount(int num, bool fadeIn = false) + { + if (m_uiWrapContent.WidthDimension != 1) + { + num = _GetRowCount(num, m_uiWrapContent.WidthDimension) * m_uiWrapContent.WidthDimension; + } + + m_uiWrapContent.SetContentCount(num); + _InitContent(num, fadeIn); + m_uiWrapContent.AdjustContent(); + } + + private void OnItemUpdate(Transform item, int index) + { + if (updateHandler != null) + updateHandler(item, index); + } + + private void OnItemInit(Transform item, int index) + { + if (initHandler != null) + initHandler(item, index); + } + + public void RegisterItemUpdateEventHandler(WrapItemUpdateEventHandler eventHandler) + { + updateHandler = eventHandler; + } + + public void RegisterItemInitEventHandler(WrapItemInitEventHandler eventHandler) + { + initHandler = eventHandler; + } + + public void ResetPosition() + { + SetOffset(0); + } + + public void SetOffset(int offset) + { + m_uiWrapContent.SetChildPositionOffset(offset); + m_uiWrapContent.WrapContent(); + } + + public void InitContent() + { + m_uiWrapContent.Init(); + } + + public void RefreshAllVisibleContents() + { + m_uiWrapContent.RefreshAllChildrenContent(); + } + + public void GetActiveList(List ret) + { + m_ItemPool.GetActiveList(ret); + } + + + private UIWrapContent m_uiWrapContent = null; + private WrapItemUpdateEventHandler updateHandler; + private WrapItemInitEventHandler initHandler; + private XUtliPoolLib.XUIPool m_ItemPool = new XUtliPoolLib.XUIPool(null); + + public GameObject Tpl; +} + -- cgit v1.1-26-g67d0