using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
|
namespace Snxxz.UI
|
{
|
public class EquipModel : Model
|
{
|
public int showedUnLockLevel {
|
get { return LocalSave.GetInt(StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "EquipSetUnLockHasShowed"), 1); }
|
set { LocalSave.SetInt(StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "EquipSetUnLockHasShowed"), value); }
|
}
|
|
public int showedUnLockSlot {
|
get { return LocalSave.GetInt(StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "EquipSlotUnLockHasShowed"), 1); }
|
set { LocalSave.SetInt(StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "EquipSlotUnLockHasShowed"), value); }
|
}
|
|
public readonly LogicInt selectedLevel = new LogicInt();
|
public readonly LogicInt selectedPlace = new LogicInt();
|
public readonly LogicString selectedEquip = new LogicString();
|
public readonly LogicInt selectedStarLevel = new LogicInt();
|
|
int m_AppearanceLevel = 0;
|
public int appearanceLevel { get { return m_AppearanceLevel; } }
|
|
Dictionary<int, EquipSet> equipSets = new Dictionary<int, EquipSet>();
|
Dictionary<string, CandidateEquip> candidateEquips = new Dictionary<string, CandidateEquip>();
|
|
PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
|
EquipStarModel starModel { get { return ModelCenter.Instance.GetModel<EquipStarModel>(); } }
|
|
public override void Init()
|
{
|
ParseConfig();
|
packModel.refrechPackEvent += OnItemPackRefresh;
|
packModel.refreshItemCountEvent += OnItemCountRefresh;
|
PlayerDatas.Instance.PlayerDataRefreshEvent += OnPlayerDataRefresh;
|
}
|
|
public override void UnInit()
|
{
|
packModel.refrechPackEvent -= OnItemPackRefresh;
|
packModel.refreshItemCountEvent -= OnItemCountRefresh;
|
PlayerDatas.Instance.PlayerDataRefreshEvent -= OnPlayerDataRefresh;
|
}
|
|
public int GetLastestUnLockEquipSet()
|
{
|
var realmLevel = PlayerDatas.Instance.baseData.realmLevel;
|
|
var lastestSet = 0;
|
return lastestSet;
|
}
|
|
public void SelectSet(int level, int place)
|
{
|
selectedLevel.value = level;
|
selectedPlace.value = place;
|
if (selectedLevel.dirty)
|
{
|
selectedPlace.dirty = true;
|
selectedStarLevel.value = 0;
|
selectedStarLevel.dirty = true;
|
}
|
|
if (selectedLevel.dirty || selectedPlace.dirty)
|
{
|
candidateEquips.Clear();
|
selectedEquip.value = string.Empty;
|
var items = packModel.GetItems(new SinglePack.FilterParams()
|
{
|
level = selectedLevel.value,
|
equipType = selectedPlace.value
|
});
|
|
if (items != null)
|
{
|
foreach (var item in items)
|
{
|
candidateEquips[item.guid] = new CandidateEquip(item.guid);
|
}
|
}
|
}
|
|
foreach (var item in equipSets.Values)
|
{
|
item.selected.value = item.level == selectedLevel.value;
|
}
|
|
if (equipSets.ContainsKey(level))
|
{
|
equipSets[level].SelectPlace(place);
|
}
|
}
|
|
public void ResetSelectParams()
|
{
|
selectedLevel.value = 0;
|
selectedPlace.value = 0;
|
selectedEquip.value = string.Empty;
|
}
|
|
public List<string> GetCandidateEquips()
|
{
|
return new List<string>(candidateEquips.Keys);
|
}
|
|
public CandidateEquip GetCandidateEquip(string equipGuid)
|
{
|
if (candidateEquips.ContainsKey(equipGuid))
|
{
|
return candidateEquips[equipGuid];
|
}
|
else
|
{
|
return null;
|
}
|
}
|
|
public void SelectCandidateEquip(string equipGuid)
|
{
|
if (candidateEquips.ContainsKey(equipGuid))
|
{
|
foreach (var equip in candidateEquips.Values)
|
{
|
equip.selected.value = equip.guid == equipGuid;
|
}
|
}
|
}
|
|
public List<int> GetAllEquipSets()
|
{
|
return new List<int>(equipSets.Keys);
|
}
|
|
public List<int> GetViewableEquipSets()
|
{
|
var sets = new List<int>();
|
var enumerator = equipSets.GetEnumerator();
|
while (enumerator.MoveNext())
|
{
|
if (enumerator.Current.Value.unLocked)
|
{
|
sets.Add(enumerator.Current.Value.level);
|
}
|
else
|
{
|
break;
|
}
|
}
|
|
if (enumerator.Current.Value != null)
|
{
|
sets.Add(enumerator.Current.Value.level);
|
}
|
|
return sets;
|
}
|
|
public EquipSet GetEquipSet(int level)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
DebugEx.Log("错误的装备阶级。");
|
return null;
|
}
|
|
return equipSets[level];
|
}
|
|
public void SetAppearance(int level)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
return;
|
}
|
|
var pak = new C032F_tagCRequestEquipShowHide();
|
pak.EquipShowSwitch = (uint)level;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
public EquipAppearance GetAppearance()
|
{
|
var level = PlayerDatas.Instance.baseData.equipShowSwitch / 10;
|
var isSuit = PlayerDatas.Instance.baseData.equipShowSwitch % 10 > 0;
|
|
var appearance = GetAppearance((int)level);
|
appearance.isSuit = isSuit;
|
return appearance;
|
}
|
|
public EquipAppearance GetAppearance(int level)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
return default(EquipAppearance);
|
}
|
|
return equipSets[level].GetAppearance();
|
}
|
|
public int GetFightPoint(int level)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
return 0;
|
}
|
|
return equipSets[level].GetFightPoint();
|
}
|
|
public void UnLock(int level)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
return;
|
}
|
|
equipSets[level].UnLock();
|
}
|
|
public bool IsEquipSetUnLocked(int level)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
return false;
|
}
|
|
return equipSets[level].unLocked;
|
}
|
|
public void PutOn(string equipGuid)
|
{
|
var item = packModel.GetItemByGuid(equipGuid);
|
if (item == null)
|
{
|
return;
|
}
|
|
var level = item.config.LV;
|
if (!equipSets.ContainsKey(level))
|
{
|
return;
|
}
|
|
var set = equipSets[level];
|
if (!set.unLocked)
|
{
|
return;
|
}
|
|
set.PutOn(equipGuid);
|
}
|
|
public void TakeOff(int level, int place)
|
{
|
if (!equipSets.ContainsKey(level))
|
{
|
return;
|
}
|
|
var slot = equipSets[level];
|
slot.TakeOff(place);
|
}
|
|
public void UnLockSlot(int level, int place)
|
{
|
if (!equipSets.ContainsKey(place))
|
{
|
return;
|
}
|
|
var set = equipSets[level];
|
if (set.unLocked)
|
{
|
return;
|
}
|
|
set.UnLockSlot(place);
|
}
|
|
public bool IsBetterThanCurrent(string equipGuid)
|
{
|
var item = packModel.GetItemByGuid(equipGuid);
|
if (item == null)
|
{
|
return false;
|
}
|
|
var level = item.config.LV;
|
if (!equipSets.ContainsKey(level))
|
{
|
return false;
|
}
|
|
var set = equipSets[level];
|
return set.IsBetterThanCurrent(equipGuid);
|
}
|
|
public EquipSuitPropertyEntry GetEquipSuitEntry(int level, int star, EquipSuitType type)
|
{
|
var configs = EquipSuitConfig.GetConfigs(PlayerDatas.Instance.baseData.Job, level, type);
|
var suitLevel = starModel.GetSuitLevel(level, type);
|
var actived = suitLevel >= star;
|
var properties = new List<Int2>();
|
foreach (var item in configs)
|
{
|
if (item.star == star)
|
{
|
properties.AddRange(item.attr);
|
break;
|
}
|
}
|
|
var entry = new EquipSuitPropertyEntry()
|
{
|
actived = actived,
|
type = type,
|
properties = properties
|
};
|
|
return entry;
|
}
|
|
private void OnPlayerDataRefresh(PlayerDataRefresh type, int value)
|
{
|
switch (type)
|
{
|
case PlayerDataRefresh.RealmLevel:
|
var lastUnLockRealm = 1;
|
UpdateRedpoint(lastUnLockRealm);
|
break;
|
default:
|
break;
|
}
|
}
|
|
private void OnItemPackRefresh(PackType type)
|
{
|
if (type == PackType.Item)
|
{
|
UpdateRedpoints();
|
}
|
}
|
|
private void OnItemCountRefresh(PackType type, int index, int itemId)
|
{
|
if (type == PackType.Item)
|
{
|
return;
|
}
|
|
var config = ItemConfig.Get(itemId);
|
var level = config.LV;
|
if (!equipSets.ContainsKey(level))
|
{
|
return;
|
}
|
|
var item = packModel.GetItemByIndex(PackType.Item, index);
|
equipSets[level].UpdateRedPoint(item.guid);
|
}
|
|
private void UpdateRedpoints()
|
{
|
var equips = new List<ItemModel>();
|
for (var i = 1; i <= 12; i++)
|
{
|
var items = packModel.GetItems(new SinglePack.FilterParams()
|
{
|
equipType = i,
|
});
|
|
if (items != null)
|
{
|
equips.AddRange(items);
|
}
|
}
|
|
var hints = new Dictionary<int, bool>();
|
foreach (var item in equipSets)
|
{
|
if (item.Value.unLocked)
|
{
|
hints[item.Key] = false;
|
}
|
}
|
|
foreach (var equip in equips)
|
{
|
var level = equip.config.LV;
|
if (hints.ContainsKey(level) && !hints[level])
|
{
|
if (IsBetterThanCurrent(equip.guid))
|
{
|
hints[level] = true;
|
}
|
}
|
}
|
|
foreach (var level in hints.Keys)
|
{
|
equipSets[level].redpoint.state = hints[level] ? RedPointState.Simple : RedPointState.None;
|
}
|
}
|
|
private void UpdateRedpoint(int level)
|
{
|
var equips = new List<ItemModel>();
|
for (var i = 1; i <= 12; i++)
|
{
|
var items = packModel.GetItems(new SinglePack.FilterParams()
|
{
|
level = level,
|
equipType = i,
|
});
|
|
if (items != null)
|
{
|
equips.AddRange(items);
|
}
|
}
|
|
var set = equipSets[level];
|
set.redpoint.state = RedPointState.None;
|
foreach (var equip in equips)
|
{
|
if (set.redpoint.state != RedPointState.None)
|
{
|
break;
|
}
|
|
if (IsBetterThanCurrent(equip.guid))
|
{
|
set.redpoint.state = RedPointState.Simple;
|
}
|
}
|
|
}
|
|
private void ParseConfig()
|
{
|
var configs = EquipControlConfig.GetValues();
|
var setLevelToRealms = new Dictionary<int, int>();
|
foreach (var item in configs)
|
{
|
var level = item.level;
|
var currentRealm = setLevelToRealms.ContainsKey(level) ? 9999 : setLevelToRealms[level];
|
if (item.realm < currentRealm)
|
{
|
setLevelToRealms[level] = item.realm;
|
}
|
}
|
|
foreach (var item in setLevelToRealms)
|
{
|
equipSets[item.Key] = new EquipSet(item.Key, item.Value);
|
}
|
}
|
}
|
|
public struct EquipSuitPropertyEntry
|
{
|
public EquipSuitType type;
|
public bool actived;
|
public List<Int2> properties;
|
}
|
|
}
|