//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, January 20, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using TableConfig; namespace Snxxz.UI { public class BetterEquipGetModel : Model, IBeforePlayerDataInitialize, ISwitchAccount { PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } public string currentEquipGuid { get; private set; } Dictionary betterEquipModels = new Dictionary(); public event Action showEquipRefreshEvent; public override void Init() { modelInterface.RefreshGetBetterEquipEvent += OnGetBetterEquip; playerPack.RefreshPackAct += OnPackageRefresh; playerPack.RefreshItemCountAct += OnPackageItemRefresh; } public override void UnInit() { modelInterface.RefreshGetBetterEquipEvent -= OnGetBetterEquip; playerPack.RefreshPackAct -= OnPackageRefresh; playerPack.RefreshItemCountAct -= OnPackageItemRefresh; } public void OnBeforePlayerDataInitialize() { } public void OnSwitchAccount() { currentEquipGuid = string.Empty; } public bool TryGetBetterEquip(string _guid, out ItemModel _equip) { return betterEquipModels.TryGetValue(_guid, out _equip); } public void ReportConfirmBetterEquip(string _guid) { betterEquipModels.Remove(_guid); var tempGuid = GetOneEquip(); if (tempGuid != currentEquipGuid) { currentEquipGuid = tempGuid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } public int GetShowItemQuality() { if (string.IsNullOrEmpty(currentEquipGuid)) { return 0; } else { ItemModel item; if (TryGetBetterEquip(currentEquipGuid, out item)) { return item.chinItemModel.ItemColor; } else { return 0; } } } public int GetShowEquipPlace() { if (string.IsNullOrEmpty(currentEquipGuid)) { return 0; } else { ItemModel item; if (TryGetBetterEquip(currentEquipGuid, out item)) { return item.chinItemModel.EquipPlace; } else { return 0; } } } private void OnGetBetterEquip(string guid) { var betterModel = playerPack.GetItemModelByGUID(guid); ItemModel oldBetterEquip = null; if (TryGetEquipByPlace(betterModel.chinItemModel.EquipPlace, out oldBetterEquip)) { var oldGrade = oldBetterEquip != null ? oldBetterEquip.equipScore : 0; if (betterModel.equipScore >= oldGrade) { RemoveItemByEquipPlace(betterModel.chinItemModel.EquipPlace); } } betterEquipModels[guid] = betterModel; if (guid != currentEquipGuid) { if (!string.IsNullOrEmpty(guid)) { var sourcelist = betterModel.GetUseDataModel((int)ItemUseDataKey.Def_IudetSource); if (sourcelist != null && sourcelist[0] == 4) { SnxxzGame.Instance.StartCoroutine(Co_DelayRefreshBetterEquip(guid)); } else { currentEquipGuid = guid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } else { currentEquipGuid = guid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } } IEnumerator Co_DelayRefreshBetterEquip(string _guid) { yield return WaitingForSecondConst.WaitMS2000; currentEquipGuid = _guid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } private void OnPackageRefresh(PackType _packType) { if (_packType != PackType.rptItem) { return; } var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var guid = keys[i]; var itemModel = playerPack.GetItemModelByGUID(guid); if (itemModel == null || itemModel.packType != PackType.rptItem) { betterEquipModels.Remove(guid); } } var tempGuid = GetOneEquip(); if (tempGuid != currentEquipGuid) { if (!string.IsNullOrEmpty(tempGuid)) { var itemModel = playerPack.GetItemModelByGUID(tempGuid); var sourcelist = itemModel.GetUseDataModel((int)ItemUseDataKey.Def_IudetSource); if (sourcelist != null && sourcelist[0] == 4) { SnxxzGame.Instance.StartCoroutine(Co_DelayRefreshBetterEquip(tempGuid)); } else { currentEquipGuid = tempGuid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } else { currentEquipGuid = tempGuid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } } private void OnPackageItemRefresh(PackType _packType, int _index, int _itemId) { if (_packType == PackType.rptEquip) { //穿上装备的时候的处理 var item = playerPack.GetItemModelByIndex(_packType, _index); if (item != null) { RemoveLowGradeItemByEquipPlace(_index, item.equipScore); } OnPackageRefresh(PackType.rptItem); } else if (_packType == PackType.rptItem) { OnPackageRefresh(_packType); } } private string GetOneEquip() { var guid = string.Empty; foreach (var key in betterEquipModels.Keys) { guid = key; break; } return guid; } private void RemoveItemByEquipPlace(int _place) { var place = _place == 10 ? 9 : _place; var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var item = betterEquipModels[keys[i]]; if (item != null && item.chinItemModel.EquipPlace == place) { betterEquipModels.Remove(keys[i]); } } } private void RemoveLowGradeItemByEquipPlace(int _place, int _score) { var place = _place == 10 ? 9 : _place; var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var item = betterEquipModels[keys[i]]; if (item != null && item.chinItemModel.EquipPlace == place && item.equipScore <= _score) { betterEquipModels.Remove(keys[i]); } } } private bool TryGetEquipByPlace(int _place, out ItemModel _itemModel) { var place = _place == 10 ? 9 : _place; var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var item = betterEquipModels[keys[i]]; if (item != null && item.chinItemModel.EquipPlace == place) { _itemModel = item; return true; } } _itemModel = null; return false; } public bool ShowBetterEquipAble() { var mapId = PlayerDatas.Instance.baseData.MapID; var lineId = PlayerDatas.Instance.baseData.dungeonLineId; var dungeonId = dungeonModel.DungeonMap(dungeonModel.GetDungeonDataIdByMapId(mapId), lineId); if (dungeonId == 0) { return true; } else { var config = Config.Instance.Get(dungeonId); return config.ShowNewItemTip == 1; } } } }