// ***********************************************************************
// Assembly : Unity
// Author : Kimch
// Created : 2017-11-11
//
// Last Modified By : Kimch
// Last Modified On :
// ***********************************************************************
//
//
// ***********************************************************************
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace G.UI
{
partial class QuickBox
{
#region Field
private KeyValuePair>[] _templates;
private HashSet _activeTemplates = new HashSet();
private bool _canShow = false;
#endregion
#region Method
private void InitView()
{
_templates = new KeyValuePair>[transform.childCount];
for (int i = 0; i < _templates.Length; i++)
{
var templateGO = transform.GetChild(i).gameObject;
var template = templateGO.AddComponent();
templateGO.SetActive(false);
_templates[i] = new KeyValuePair>(templateGO, new List());
}
}
private void RefreshView()
{
if (gameObject)
transform.SetAsLastSibling();
_canShow = true;
ShowTemplate();
}
private void ClearView()
{
_canShow = true;
ReturnAllTemplate();
}
private void ShowTemplate()
{
if (_canShow && _infoQueue.Count > 0)
{
TemplateInfo showInfo = null;
do
{
showInfo = _infoQueue.Dequeue();
if (showInfo.equipment == null || PlayerProxy.Instance.IsBetterEquipment(showInfo.equipment))
break;
else
showInfo = null;
}
while (_infoQueue.Count > 0);
if (showInfo != null && showInfo.equipment != null)
{
_canShow = false;
var templateI = GetTemplate(showInfo.type);
if (showInfo.type == 0)
{
templateI.SetData(showInfo.equipment);
}
}
}
//else
//{
// _canShow = true;
//}
}
private TemplateItem GetTemplate(int index = 0)
{
TemplateItem result = null;
if (index >= 0 && index < _templates.Length)
{
int remain = _templates[index].Value.Count;
if (remain > 0)
{
result = _templates[index].Value[remain - 1];
_templates[index].Value.RemoveAt(remain - 1);
}
else
{
var go = Object.Instantiate(_templates[index].Key, this.transform);
result = go.GetComponent();
result.index = index;
}
result.gameObject.SetActive(true);
result.transform.localPosition = _templates[index].Key.transform.localPosition;
_activeTemplates.Add(result);
}
return result;
}
private void ReturnTemplate(TemplateItem template)
{
_activeTemplates.Remove(template);
template.gameObject.SetActive(false);
_templates[template.index].Value.Add(template);
}
private void ReturnAllTemplate()
{
if (_activeTemplates.Count > 0)
foreach (var template in _activeTemplates)
{
template.gameObject.SetActive(false);
_templates[template.index].Value.Add(template);
}
_activeTemplates.Clear();
}
private void OnTemplateFunc(TemplateItem template)
{
if (template.index == 0)
{
PlayerProxy.Instance.SetEquipment(template.data as EntityItemEquipment);
}
ReturnTemplate(template);
_canShow = true;
ShowTemplate();
}
private void OnTemplateClose(TemplateItem template)
{
ReturnTemplate(template);
_canShow = true;
ShowTemplate();
}
#endregion
}
}