using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace vnxbqy.UI { public class RuneComposeModel : Model, IPlayerLoginOk { RuneModel runeModel { get { return ModelCenter.Instance.GetModel(); } } VirtualPackModel virtualPackModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { presentSelectRuneQuality = 0; presentSelectComposeRune = -1; ParseConfig(); PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; runeModel.onRuneTowerRefresh += OnRefreshRune; virtualPackModel.virtualPackRefresh += VirtualPackRefresh; runeModel.onRuneHoleRefresh += OnRefreshRune; foreach (var _key in runeComposeDict.Keys) { var _redpointTypeKey = 10803 * 100 + _key; m_RuneComposeTypeRedpoints.Add(_key, new Redpoint(10803, _redpointTypeKey)); var _list = runeComposeDict[_key]; List redpoints = new List(); m_RuneComposeRedpoints.Add(_key, redpoints); for (int i = 0; i < _list.Count; i++) { redpoints.Add(new Redpoint(_redpointTypeKey, _redpointTypeKey * 100 + i)); } } } public override void UnInit() { runeModel.onRuneTowerRefresh -= OnRefreshRune; runeModel.onRuneHoleRefresh -= OnRefreshRune; virtualPackModel.virtualPackRefresh -= VirtualPackRefresh; } public void OnPlayerLoginOk() { UpdateRedpoint(); } #region 配置 public Dictionary> runeComposeDict = new Dictionary>(); public RuneComposeConfig GetRuneCompose(int _itemColor, int _index) { if (runeComposeDict.ContainsKey(_itemColor)) { if (_index >= 0 && _index < runeComposeDict[_itemColor].Count) { return runeComposeDict[_itemColor][_index]; } } return null; } public List m_RuneBothPropertys = new List(); void ParseConfig() { var allConfigs = RuneComposeConfig.GetValues(); foreach (var _cfg in allConfigs) { ItemConfig _itemCfg = ItemConfig.Get(_cfg.TagItemID); if (_itemCfg != null) { List _list = null; if (runeComposeDict.TryGetValue(_itemCfg.ItemColor, out _list) == false) { _list = new List(); runeComposeDict.Add(_itemCfg.ItemColor, _list); } _list.Add(_cfg); } } var configs = RuneConfig.GetValues(); foreach (var _cfg in configs) { if (_cfg.AttrType.Length > 1) { m_RuneBothPropertys.Add(_cfg.ID); } } } #endregion private void PlayerDataRefreshInfoEvent(PlayerDataType refreshType) { if (refreshType == PlayerDataType.MagicEssence) { UpdateRedpoint(); } } private void VirtualPackRefresh(PackType packType) { if (packType == PackType.RunePack) { UpdateRedpoint(); } } private void OnRefreshRune() { UpdateRedpoint(); } public int presentSelectRuneQuality { get; set; } public int presentSelectComposeRune { get; set; } #region 红点 private Redpoint m_RuneComposeRedpoint = new Redpoint(108, 10803); private Dictionary m_RuneComposeTypeRedpoints = new Dictionary(); private Dictionary> m_RuneComposeRedpoints = new Dictionary>(); void UpdateRedpoint() { foreach (var _key in m_RuneComposeRedpoints.Keys) { var _list = m_RuneComposeRedpoints[_key]; for (int i = 0; i < _list.Count; i++) { _list[i].state = RedPointState.None; } } foreach (var _key in runeComposeDict.Keys) { var _list = runeComposeDict[_key]; for (int i = 0; i < _list.Count; i++) { var _runeConfig = RuneConfig.Get(_list[i].TagItemID); if (runeModel.passRuneTowerFloor < _runeConfig.TowerID) { continue; } var _runeComposeConfig = RuneComposeConfig.Get(_list[i].TagItemID); RuneItem item; var count1 = runeModel.TryGetComposeRuneCount(_runeComposeConfig.NeedItem[0], out item); var count2 = runeModel.TryGetComposeRuneCount(_runeComposeConfig.NeedItem[1], out item); var magicEssence = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.MagicEssence); if (count1 > 0 && count2 > 0 && magicEssence >= (ulong)_runeComposeConfig.NeedMJ) { m_RuneComposeRedpoints[_key][i].state = RedPointState.Simple; } } } } public Redpoint GetRedpoint(int _quality) { if (m_RuneComposeTypeRedpoints.ContainsKey(_quality)) { return m_RuneComposeTypeRedpoints[_quality]; } return null; } #endregion } }