//--------------------------------------------------------
|
// [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<string> newItemQueue = new Queue<string>();
|
List<GameObject> showingItems = new List<GameObject>();
|
|
float nextShowTime = 0f;
|
|
PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
|
#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 (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<NewItemGetBehaviour>();
|
}
|
|
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);
|
}
|
}
|
}
|
}
|
|
|
}
|