152 lines
3.5 KiB
C#
152 lines
3.5 KiB
C#
// ***********************************************************************
|
|
// Assembly : Unity
|
|
// Author : Kimch
|
|
// Created : 2017-11-11
|
|
//
|
|
// Last Modified By : Kimch
|
|
// Last Modified On :
|
|
// ***********************************************************************
|
|
// <copyright file= "QuickBox.View" company=""></copyright>
|
|
// <summary></summary>
|
|
// ***********************************************************************
|
|
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace G.UI
|
|
{
|
|
partial class QuickBox
|
|
{
|
|
#region Field
|
|
|
|
private KeyValuePair<GameObject, List<TemplateItem>>[] _templates;
|
|
private HashSet<TemplateItem> _activeTemplates = new HashSet<TemplateItem>();
|
|
private bool _canShow = false;
|
|
|
|
#endregion
|
|
|
|
#region Method
|
|
|
|
private void InitView()
|
|
{
|
|
_templates = new KeyValuePair<GameObject, List<TemplateItem>>[transform.childCount];
|
|
for (int i = 0; i < _templates.Length; i++)
|
|
{
|
|
var templateGO = transform.GetChild(i).gameObject;
|
|
var template = templateGO.AddComponent<TemplateItem>();
|
|
templateGO.SetActive(false);
|
|
|
|
_templates[i] = new KeyValuePair<GameObject, List<TemplateItem>>(templateGO, new List<TemplateItem>());
|
|
}
|
|
}
|
|
|
|
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<TemplateItem>();
|
|
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
|
|
}
|
|
}
|