// *********************************************************************** // 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 } }