//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Saturday, January 20, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System;
|
using TableConfig;
|
|
namespace Snxxz.UI
|
{
|
[XLua.LuaCallCSharp]
|
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.GetDungeonId(dungeonModel.GetDataMapIdByMapId(mapId), lineId);
|
if (dungeonId == 0)
|
{
|
return true;
|
}
|
else
|
{
|
var config = Config.Instance.Get<DungeonConfig>(dungeonId);
|
return config.ShowNewItemTip == 1;
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|