using UnityEngine; using System.Collections; using System.Collections.Generic; using Thousandto.Plugins.Common; using Thousandto.Core.Base; namespace Thousandto.Plugins.Common { /// /// UI组件类 /// /// /// public class UComponentContainerPlus where TUI : IUIComponentPlus { #region//私有变量 private List _free = new List(); private Dictionary _keyDic = new Dictionary(); private Dictionary _containerDic = new Dictionary(); #endregion #region//公共变量 #endregion #region//公共接口 //添加组件 public void AddComponent(TUI ui, TData data, int key) { if (_containerDic != null) { if (_free.Count == 0) { if (_containerDic.Count == 0) { _containerDic[data] = ui; } else { _containerDic[data] = ui; } } else { TUI tUi = _free[0]; for (int i = 0; i < _free.Count; i++) { if (tUi.Index > _free[i].Index) { tUi = _free[i]; } } _containerDic[data] = tUi; _free.Remove(tUi); } } if (!_keyDic.ContainsKey(key)) { _keyDic[key] = data; } } public void CloneComponent(TData data, int key,EventDelegate.Callback call, int index = 0) { TUI ui = default(TUI); if (_free.Count != 0) { if (!_containerDic.ContainsKey(data)) { ui = _free[0]; for (int i = 0; i < _free.Count; i++) { if (ui.Index > _free[i].Index) { ui = _free[i]; } } _containerDic[data] = ui; _free.Remove(ui); } } else { if (_containerDic.Count != 0) { int i = 0; var enumer = _containerDic.GetEnumerator(); try { while (enumer.MoveNext()) { if (i == 0) { i++; if (!_containerDic.ContainsKey(data)) { ui = enumer.Current.Value.Clone(call, index); _containerDic[data] = ui; } break; } } } finally { enumer.Dispose(); } } } if (!_keyDic.ContainsKey(key)) { _keyDic[key] = data; } } //返回长度 public int GetComponentLength() { return _containerDic.Count; } //返回组件数据 public TData GetComponentKey(int key) { TData data = default(TData); if (_keyDic.ContainsKey(key)) { return _keyDic[key]; } return data; } //获取组件 public TUI GetComponent(int key) { TUI ui = default(TUI); TData data = GetComponentKey(key); ui = GetComponent(data); return ui; } //获取组件 public TUI GetComponent(TData data) { TUI ui = default(TUI); if (_containerDic.ContainsKey(data)) { _containerDic.TryGetValue(data, out ui); } return ui; } //移除 public void RemveComponent(int key) { TData data = GetComponentKey(key); RemoveComponent(data); if (_keyDic.ContainsKey(key)) _keyDic.Remove(key); } //移除 public void RemoveComponent(TData data) { if (_containerDic.ContainsKey(data)) { _containerDic.Remove(data); } } //刷新组件 public void RefreshComponent( TData data) { if (_containerDic.ContainsKey(data)) { _containerDic[data].SetData(data); } } //刷新 选中组件 public void RefreshSelect(int selectId) { TData data = default(TData); if (_keyDic.ContainsKey(selectId)) { data = _keyDic[selectId]; } var enumer = _containerDic.GetEnumerator(); try { while (enumer.MoveNext()) { enumer.Current.Value.SetSelect(false); } } finally { enumer.Dispose(); } if (_containerDic.ContainsKey(data)) { _containerDic[data].SetSelect(true); } } // public void SetActive(bool b) { var enumer = _containerDic.GetEnumerator(); try { while (enumer.MoveNext()) { enumer.Current.Value.SetActive(b); } } finally { enumer.Dispose(); } } public void SetActive(TData data) { if (_containerDic != null) { if (_containerDic.ContainsKey(data)) { _containerDic[data].SetActive(true); } } } public bool ContainsKey(int key) { if (_keyDic != null) { if (_keyDic.ContainsKey(key)) { if (_containerDic != null) { return _containerDic.ContainsKey(_keyDic[key]); } } } return false; } //清除 public void OnClear( int key ) { _containerDic.Clear(); _keyDic.Clear(); } public void Free() { if (_keyDic != null) { _keyDic.Clear(); } if (_containerDic != null) { var enumer = _containerDic.GetEnumerator(); try { while (enumer.MoveNext()) { _free.Add(enumer.Current.Value); } } finally { enumer.Dispose(); } } _containerDic.Clear(); } #endregion } }