//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, May 23, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using TableConfig;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
|
public class TreasureSoulWin : Window
|
{
|
[SerializeField] FunctionButton m_TreasureSoulBtn;
|
[SerializeField] Button m_CloseBtn;
|
|
[SerializeField] Image m_SelectSoulImg;
|
|
[SerializeField] Text m_SoulName;
|
[SerializeField] Text m_SoulDescription;
|
[SerializeField] Image m_SoulTarget;
|
[SerializeField] Button m_Active;
|
|
[SerializeField] List<TreasureSoulPattern> m_TreasureSouls;
|
|
[SerializeField] ScrollerController m_ScollerControl;
|
|
TreasureSoulModel m_Model;
|
TreasureSoulModel model
|
{
|
get
|
{
|
return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<TreasureSoulModel>());
|
}
|
}
|
PlayerSuitModel suitModel { get { return ModelCenter.Instance.GetModel<PlayerSuitModel>(); } }
|
PlayerPackModel pack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
|
|
public PlayerStrengthengDatas strengthengmodel
|
{
|
get
|
{
|
return ModelCenter.Instance.GetModel<PlayerStrengthengDatas>();
|
}
|
}
|
|
|
int m_SelectSoul = 0;
|
|
List<int> sortSouls = new List<int>();
|
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
m_Active.onClick.AddListener(Active);
|
m_CloseBtn.onClick.AddListener(CloseClick);
|
m_ScollerControl.OnRefreshCell += OnRefreshCell;
|
}
|
|
protected override void OnPreOpen()
|
{
|
model.treasureSelectSoulChangeEvent += TreasureSelectSoulChangeEvent;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent;
|
m_TreasureSoulBtn.state = TitleBtnState.Click;
|
Display();
|
DisplaySelect();
|
}
|
|
private void PlayerDataRefreshInfoEvent(PlayerDataRefresh refreshType)
|
{
|
if (refreshType == PlayerDataRefresh.LV)
|
{
|
m_ScollerControl.m_Scorller.RefreshActiveCellViews();
|
}
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
model.treasureSelectSoulChangeEvent -= TreasureSelectSoulChangeEvent;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= PlayerDataRefreshInfoEvent;
|
for (int i = 0; i < m_TreasureSouls.Count; i++)
|
{
|
m_TreasureSouls[i].Dispose();
|
}
|
m_SelectSoul = model.selectSoul;
|
}
|
|
protected override void OnAfterClose()
|
{
|
WindowCenter.Instance.Open<MainInterfaceWin>();
|
}
|
#endregion
|
|
private void Display()
|
{
|
sortSouls.Clear();
|
var _list = model.GetTreasureSouls();
|
for (int i = 0; i < _list.Count; i++)
|
{
|
if (model.IsOpenTreasureSoul(_list[i]))
|
{
|
sortSouls.Add(_list[i]);
|
}
|
}
|
if (m_ScollerControl.GetNumberOfCells(m_ScollerControl.m_Scorller) != sortSouls.Count)
|
{
|
m_ScollerControl.Refresh();
|
for (int i = 0; i < sortSouls.Count; i++)
|
{
|
m_ScollerControl.AddCell(ScrollerDataType.Header, i);
|
}
|
m_ScollerControl.Restart();
|
}
|
sortSouls.Sort(Compare);
|
model.selectSoul = CheckOpenSelect();
|
var index = sortSouls.FindIndex((x) =>
|
{
|
return x == model.selectSoul;
|
});
|
m_ScollerControl.m_Scorller.RefreshActiveCellViews();
|
m_ScollerControl.JumpIndex(index);
|
}
|
|
int CheckOpenSelect()
|
{
|
if (WindowJumpMgr.Instance.IsJumpState && model.gotoSoul != 0)
|
{
|
var _soul = model.gotoSoul;
|
model.gotoSoul = 0;
|
return _soul;
|
}
|
model.gotoSoul = 0;
|
var _select = sortSouls[sortSouls.Count - 1];
|
for (int i = 0; i < sortSouls.Count; i++)
|
{
|
TreasureSpecialData special;
|
if (model.TryGetTreasureSoul(sortSouls[i], out special))
|
{
|
if (special.redpoint.state == RedPointState.Simple)
|
{
|
return sortSouls[i];
|
}
|
}
|
}
|
return _select;
|
}
|
|
private void OnRefreshCell(ScrollerDataType type, CellView cell)
|
{
|
TreasureSoulCell treasureSoulCell = cell as TreasureSoulCell;
|
if (cell.index < sortSouls.Count)
|
{
|
treasureSoulCell.Display(sortSouls[cell.index]);
|
}
|
}
|
|
private void TreasureSelectSoulChangeEvent(int _id)
|
{
|
DisplaySelect();
|
}
|
|
private void Active()
|
{
|
}
|
|
private void DisplaySelect()
|
{
|
TreasureSpecialData special;
|
model.TryGetTreasureSoul(model.selectSoul, out special);
|
if (special != null)
|
{
|
var config = ConfigManager.Instance.GetTemplate<TreasurePrivilegeConfig>((int)special.type);
|
if (config != null)
|
{
|
m_SoulName.text = config.Name;
|
m_SoulDescription.text = UIHelper.ReplaceNewLine(config.Description);
|
m_SoulTarget.SetSprite(config.targetDescription);
|
m_SoulTarget.SetNativeSize();
|
m_Active.gameObject.SetActive(model.IsGetTreasureSoul(model.selectSoul));
|
DisplayPrivilege(special);
|
|
m_SelectSoulImg.SetSprite(config.Icon);
|
}
|
}
|
}
|
|
private void DisplayPrivilege(TreasureSpecialData special)
|
{
|
int _pattern = -1;
|
switch (special.type)
|
{
|
case TreasurePrivilege.Property:
|
case TreasurePrivilege.Suit:
|
case TreasurePrivilege.Wing:
|
_pattern = 3;
|
break;
|
case TreasurePrivilege.DemonJarAtk:
|
case TreasurePrivilege.MountAtk:
|
case TreasurePrivilege.PetHp:
|
case TreasurePrivilege.Sp:
|
_pattern = 0;
|
break;
|
case TreasurePrivilege.StrengthenAdd:
|
_pattern = 1;
|
break;
|
case TreasurePrivilege.Wash:
|
_pattern = 2;
|
break;
|
}
|
for (int i = 0; i < m_TreasureSouls.Count; i++)
|
{
|
m_TreasureSouls[i].Dispose();
|
m_TreasureSouls[i].gameObject.SetActive(_pattern == i && model.IsGetTreasureSoul(model.selectSoul));
|
if (_pattern == i)
|
{
|
m_TreasureSouls[i].Display((int)special.type);
|
}
|
}
|
}
|
|
int Compare(int x, int y)
|
{
|
TreasureSpecialData special_x;
|
TreasureSpecialData special_y;
|
if (model.TryGetTreasureSoul(x, out special_x) && model.TryGetTreasureSoul(y, out special_y))
|
{
|
return special_x.treasureId.CompareTo(special_y.treasureId);
|
}
|
return x.CompareTo(y);
|
}
|
}
|
|
}
|
|
|
|
|