//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, September 08, 2017 //-------------------------------------------------------- using System.Collections.Generic; using UnityEngine; namespace vnxbqy.UI { public class NewItemGetWin : Window { [SerializeField] Transform m_StartPoint; [SerializeField] Transform m_EndPoint; Queue newItemQueue = new Queue(); List showingItems = new List(); float nextShowTime = 0f; float fixWinPosTime = 0f; PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { InitPool(); } protected override void AddListeners() { } protected override void OnPreOpen() { ItemLogicUtility.Instance.PickItemEvent += OnGetNewItem; } protected override void OnAfterOpen() { } protected override void OnPreClose() { ItemLogicUtility.Instance.PickItemEvent -= OnGetNewItem; for (int i = 0; i < showingItems.Count; i++) { var item = showingItems[i]; itemGetBehaviourPool.Release(item); } showingItems.Clear(); } protected override void OnAfterClose() { } #endregion private void OnGetNewItem(PackType type, string itemIDStr) { if (Time.time - fixWinPosTime > 2f) { this.transform.SetAsLastSibling(); fixWinPosTime = Time.time; } if (newItemQueue.Count >= 10) { newItemQueue.Dequeue(); } newItemQueue.Enqueue(itemIDStr); } protected override void LateUpdate() { if (newItemQueue.Count > 0 && Time.time > nextShowTime) { nextShowTime = Time.time + 0.2f; ItemConfig model = null; do { var itemIDStr = newItemQueue.Dequeue(); model = ItemConfig.Get(itemIDStr); } while (model == null && newItemQueue.Count > 0); if (model != null && ClientDropItemUtility.Instance.GetJiaDropItemShowDelay(model.ID) == 0f) { int itemId = model.ID; var itemBehaviour = RequireBehaviour(); if (itemBehaviour != null) { var quality = model.ItemColor; itemBehaviour.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one); itemBehaviour.Begin(new Item(itemId, 1, quality), m_StartPoint.localPosition, m_EndPoint.localPosition, OnBehaviourFinished); showingItems.Add(itemBehaviour.gameObject); } } } } private void OnBehaviourFinished() { ReycleUnShowingItem(); } GameObjectPoolManager.GameObjectPool itemGetBehaviourPool; private void InitPool() { var prefab = UILoader.LoadPrefab("NewItemGetBehaviour"); if (prefab != null) { itemGetBehaviourPool = GameObjectPoolManager.Instance.RequestPool(prefab); } } private NewItemGetBehaviour RequireBehaviour() { var item = itemGetBehaviourPool.Request(); return item.GetComponent(); } private void ReycleUnShowingItem() { for (int i = showingItems.Count - 1; i >= 0; i--) { var item = showingItems[i]; if (!item.activeInHierarchy) { itemGetBehaviourPool.Release(item); item.transform.SetParent(null); item.SetActive(false); showingItems.Remove(item); } } } } }