少年修仙传客户端代码仓库
client_linchunjie
2018-08-23 522ca3468a56c88cb15eaa428eb7499d3dba386f
System/BetterItemGet/BetterEquipGetModel.cs
@@ -1,308 +1,309 @@
//--------------------------------------------------------
//    [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<PlayerPackModel>(); } }
        PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel<PackModelInterface>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public string currentEquipGuid { get; private set; }
        Dictionary<string, ItemModel> betterEquipModels = new Dictionary<string, ItemModel>();
        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<string>(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);
                }
            }
            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<string>(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<string>(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<string>(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 = ConfigManager.Instance.GetTemplate<DungeonConfig>(dungeonId);
                return config.ShowNewItemTip == 1;
            }
        }
    }
}
//--------------------------------------------------------
//    [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<PlayerPackModel>(); } }
        PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel<PackModelInterface>(); } }
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
        public string currentEquipGuid { get; private set; }
        Dictionary<string, ItemModel> betterEquipModels = new Dictionary<string, ItemModel>();
        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<string>(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<string>(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<string>(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<string>(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<DungeonConfig>(dungeonId);
                return config.ShowNewItemTip == 1;
            }
        }
    }
}