//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, January 03, 2018
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using TableConfig;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace Snxxz.UI
|
{
|
|
public class RuneComposeWin : Window
|
{
|
[SerializeField] ScrollerController scrollerController;
|
[SerializeField] Image m_MagicLockImg;
|
[SerializeField] Button m_MagicEssenceBtn;
|
[SerializeField] Text m_MagicEssenceTxt;
|
[SerializeField] RectTransform m_ContainerMagicUnlock;
|
|
[SerializeField] Image m_ComposeRuneImg;
|
[SerializeField] Text m_ComposeRuneNameTxt;
|
[SerializeField] Text m_ComposeRuneProperty0;
|
[SerializeField] Text m_ComposeRuneProperty1;
|
[SerializeField] Text m_ComposeRunePropertyValue0;
|
[SerializeField] Text m_ComposeRunePropertyValue1;
|
[SerializeField] RectTransform m_ContainerComposeUnlock;
|
|
[SerializeField] Image m_Rune1Img;
|
[SerializeField] Image m_Rune1LockImg;
|
[SerializeField] Text m_Rune1NameTxt;
|
[SerializeField] Text m_Rune1NumTxt;
|
[SerializeField] Button m_Rune1Btn;
|
[SerializeField] RectTransform m_ContainerRune1Unlock;
|
|
[SerializeField] Image m_Rune2Img;
|
[SerializeField] Image m_Rune2LockImg;
|
[SerializeField] Text m_Rune2NameTxt;
|
[SerializeField] Text m_Rune2NumTxt;
|
[SerializeField] Button m_Rune2Btn;
|
[SerializeField] RectTransform m_ContainerRune2Unlock;
|
|
[SerializeField] UIEffect m_RuneComposeEffect;
|
|
private bool m_PlayEffect = false;
|
|
[SerializeField] Button m_ComposeBtn;
|
[SerializeField] RedpointBehaviour m_ComposeRedpoint;
|
|
RuneComposeModel m_Model;
|
RuneComposeModel model
|
{
|
get
|
{
|
return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<RuneComposeModel>());
|
}
|
}
|
|
RuneModel m_RuneModel;
|
RuneModel runeModel
|
{
|
get
|
{
|
return m_RuneModel ?? (m_RuneModel = ModelCenter.Instance.GetModel<RuneModel>());
|
}
|
}
|
#region Built-in
|
protected override void BindController()
|
{
|
}
|
|
protected override void AddListeners()
|
{
|
scrollerController.lockType = EnhanceLockType.KeepVertical;
|
m_Rune2Btn.onClick.AddListener(() =>
|
{
|
OnClickRune(1);
|
});
|
m_Rune1Btn.onClick.AddListener(() =>
|
{
|
OnClickRune(0);
|
});
|
m_ComposeBtn.onClick.AddListener(OnComposeBtn);
|
m_MagicEssenceBtn.onClick.AddListener(OnMagicEssenceBtn);
|
}
|
|
protected override void OnPreOpen()
|
{
|
m_PlayEffect = false;
|
runeModel.OnRefreshRuneTowerLv += OnRefreshRuneTowerLv;
|
runeModel.OnRefreshRunePack += RefreshRuneCompose;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent += OnRefreshPlayerInfo;
|
RefreshRuneType();
|
RefreshRuneCompose();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
}
|
|
protected override void OnPreClose()
|
{
|
runeModel.OnRefreshRuneTowerLv -= OnRefreshRuneTowerLv;
|
runeModel.OnRefreshRunePack -= RefreshRuneCompose;
|
PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= OnRefreshPlayerInfo;
|
}
|
|
protected override void OnAfterClose()
|
{
|
}
|
#endregion
|
private void OnRefreshRuneTowerLv()
|
{
|
scrollerController.m_Scorller.RefreshActiveCellViews();
|
}
|
private void OnRefreshPlayerInfo(PlayerDataRefresh type)
|
{
|
if (type == PlayerDataRefresh.MagicEssence)
|
{
|
RuneComposeConfig _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune);
|
if (_cfg == null)
|
{
|
return;
|
}
|
var _magicEssence = PlayerDatas.Instance.extersion.magicEssence;
|
m_MagicEssenceTxt.text = StringUtility.Contact(_magicEssence >= _cfg.NeedMJ ?
|
UIHelper.GetTextColorByItemColor(TextColType.Green, _magicEssence.ToString()) :
|
UIHelper.GetTextColorByItemColor(TextColType.Red, _magicEssence.ToString()), "/", _cfg.NeedMJ);
|
}
|
}
|
void RefreshRuneCompose()
|
{
|
RuneComposeConfig _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune);
|
m_MagicLockImg.gameObject.SetActive(_cfg == null);
|
m_ContainerMagicUnlock.gameObject.SetActive(_cfg != null);
|
m_ContainerComposeUnlock.gameObject.SetActive(_cfg != null);
|
m_ContainerRune1Unlock.gameObject.SetActive(_cfg != null);
|
m_ContainerRune2Unlock.gameObject.SetActive(_cfg != null);
|
m_Rune1LockImg.gameObject.SetActive(_cfg == null);
|
m_Rune2LockImg.gameObject.SetActive(_cfg == null);
|
m_ComposeBtn.gameObject.SetActive(_cfg != null);
|
|
if (m_PlayEffect)
|
{
|
m_RuneComposeEffect.Play();
|
m_PlayEffect = false;
|
}
|
|
if (_cfg != null)
|
{
|
var _redpointTypeKey = 10803 * 100 + model.presentSelectRuneQuality;
|
m_ComposeRedpoint.redpointId = _redpointTypeKey * 100 + model.presentSelectComposeRune;
|
var _magicEssence = PlayerDatas.Instance.extersion.magicEssence;
|
m_MagicEssenceTxt.text = StringUtility.Contact(_magicEssence >= _cfg.NeedMJ ?
|
UIHelper.GetTextColorByItemColor(TextColType.Green, _magicEssence.ToString()) :
|
UIHelper.GetTextColorByItemColor(TextColType.Red, _magicEssence.ToString()), "/", _cfg.NeedMJ);
|
|
ItemConfig _itemCfg = Config.Instance.Get<ItemConfig>(_cfg.NeedItem[0]);
|
m_Rune1Img.SetSprite(_itemCfg.IconKey);
|
RuneData _rune1 = null;
|
var _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[0], out _rune1);
|
m_Rune1NumTxt.text = StringUtility.Contact(_runeCnt > 0 ?
|
UIHelper.GetTextColorByItemColor(TextColType.White, _runeCnt.ToString()) :
|
UIHelper.GetTextColorByItemColor(TextColType.Red, _runeCnt.ToString()), "/", 1);
|
m_Rune1NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune1 == null ? 1 : _rune1.lv);
|
m_Rune1NameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true);
|
|
_itemCfg = Config.Instance.Get<ItemConfig>(_cfg.NeedItem[1]);
|
m_Rune2Img.SetSprite(_itemCfg.IconKey);
|
RuneData _rune2 = null;
|
_runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[1], out _rune2);
|
m_Rune2NumTxt.text = StringUtility.Contact(_runeCnt > 0 ?
|
UIHelper.GetTextColorByItemColor(TextColType.White, _runeCnt.ToString()) :
|
UIHelper.GetTextColorByItemColor(TextColType.Red, _runeCnt.ToString()), "/", 1);
|
m_Rune2NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune2 == null ? 1 : _rune2.lv);
|
m_Rune2NameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true);
|
|
_itemCfg = Config.Instance.Get<ItemConfig>(_cfg.TagItemID);
|
var _composeLv = 1;
|
m_ComposeRuneImg.SetSprite(_itemCfg.IconKey);
|
if (_rune1 != null && _rune2 != null)
|
{
|
float _exp = 0;
|
_exp += runeModel.GetRuneBreakExp(_rune1, true);
|
_exp += runeModel.GetRuneBreakExp(_rune2, true);
|
_composeLv = runeModel.GetRuneLevelByExp(_cfg.TagItemID, _exp);
|
}
|
m_ComposeRuneNameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _composeLv);
|
RuneConfig _tagRuneModel = Config.Instance.Get<RuneConfig>(_itemCfg.ID);
|
int[] _runeTypes = _tagRuneModel.AttrType;
|
var _propertyCfg = Config.Instance.Get<PlayerPropertyConfig>(_runeTypes[0]);
|
m_ComposeRuneProperty0.text = _propertyCfg.Name;
|
m_ComposeRunePropertyValue0.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetRuneAttrVal(_itemCfg.ID,
|
_composeLv, _runeTypes[0]), _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty);
|
_propertyCfg = Config.Instance.Get<PlayerPropertyConfig>(_runeTypes[1]);
|
m_ComposeRuneProperty1.text = _propertyCfg.Name;
|
m_ComposeRunePropertyValue1.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetRuneAttrVal(_itemCfg.ID,
|
_composeLv, _runeTypes[1]), _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty);
|
m_ComposeRuneNameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true);
|
}
|
}
|
void RefreshRuneType()
|
{
|
scrollerController.Refresh();
|
foreach (var _key in model.runeComposeDict.Keys)
|
{
|
scrollerController.AddCell(ScrollerDataType.Header, _key, OnRuneQualityClick);
|
if (model.presentSelectRuneQuality == _key)
|
{
|
List<RuneComposeConfig> list = model.runeComposeDict[_key];
|
for (int i = 0; i < list.Count; i++)
|
{
|
scrollerController.AddCell(ScrollerDataType.Normal, i, OnComposeRuneClick);
|
}
|
}
|
}
|
scrollerController.Restart();
|
}
|
private void OnComposeRuneClick(CellView cell)
|
{
|
if (model.presentSelectComposeRune == cell.index)
|
{
|
return;
|
}
|
List<RuneComposeConfig> _list = model.runeComposeDict[model.presentSelectRuneQuality];
|
if (cell.index >= _list.Count)
|
{
|
return;
|
}
|
RuneConfig _runeCfg = Config.Instance.Get<RuneConfig>(_list[cell.index].TagItemID);
|
bool _unlockTower = _runeCfg.TowerID <= runeModel.RuneTowerOpenLV;
|
if (!_unlockTower)
|
{
|
return;
|
}
|
model.presentSelectComposeRune = cell.index;
|
scrollerController.m_Scorller.RefreshActiveCellViews();
|
RefreshRuneCompose();
|
}
|
private void OnRuneQualityClick(CellView cell)
|
{
|
model.presentSelectRuneQuality = model.presentSelectRuneQuality == cell.index ? 0 : cell.index;
|
model.presentSelectComposeRune = -1;
|
RefreshRuneType();
|
RefreshRuneCompose();
|
}
|
|
private void OnClickRune(int _index)
|
{
|
RuneComposeConfig _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune);
|
if (_cfg != null)
|
{
|
var _itemPathModel = ModelCenter.Instance.GetModel<GetItemPathModel>();
|
|
RuneConfig _runeCfg = Config.Instance.Get<RuneConfig>(_cfg.NeedItem[_index]);
|
RuneTowerConfig _towerCfg = null;
|
RuneTowerFloorConfig _runeTowerCfg = null;
|
if (_runeCfg.TowerID != 0)
|
{
|
_runeTowerCfg = Config.Instance.Get<RuneTowerFloorConfig>(_runeCfg.TowerID);
|
_towerCfg = Config.Instance.Get<RuneTowerConfig>(_runeTowerCfg.TowerId);
|
}
|
RuneData _rune = null;
|
var _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[_index], out _rune);
|
_itemPathModel.SetRuneModel(_cfg.NeedItem[_index], _rune != null ? _rune.lv : 1, runeModel.GetRuneAttrStr(_cfg.NeedItem[_index], _rune != null ? _rune.lv : 1),
|
_runeCfg.TowerID == 0 ? Language.Get("L1062") : Language.Get("RuneItemOrigin", _towerCfg.TowerName, _runeTowerCfg.FloorName));
|
}
|
}
|
|
private void OnComposeBtn()
|
{
|
RuneComposeConfig _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune);
|
RuneData _rune1 = null;
|
var _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[0], out _rune1);
|
RuneData _rune2 = null;
|
_runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[1], out _rune2);
|
if (PlayerDatas.Instance.extersion.magicEssence < _cfg.NeedMJ)
|
{
|
return;
|
}
|
if (_rune1 != null && _rune2 != null)
|
{
|
m_PlayEffect = true;
|
CA578_tagCMRuneCompound _pak = new CA578_tagCMRuneCompound();
|
_pak.TagItemID = (uint)_cfg.TagItemID;
|
_pak.Cnt = 2;
|
_pak.PackList = new byte[_pak.Cnt];
|
_pak.IndexList = new byte[_pak.Cnt];
|
_pak.PackList[0] = _rune1.packtype == (int)PackType.rptRunePack ? (byte)0 : (byte)1;
|
_pak.IndexList[0] = (byte)_rune1.index;
|
_pak.PackList[1] = _rune2.packtype == (int)PackType.rptRunePack ? (byte)0 : (byte)1;
|
_pak.IndexList[1] = (byte)_rune2.index;
|
GameNetSystem.Instance.SendInfo(_pak);
|
}
|
}
|
|
private void OnMagicEssenceBtn()
|
{
|
var _itemPath = ModelCenter.Instance.GetModel<GetItemPathModel>();
|
var _displayId = GeneralDefine.moneyDisplayIds.ContainsKey(14) ? GeneralDefine.moneyDisplayIds[14] : 0;
|
if (_displayId != 0)
|
{
|
_itemPath.SetChinItemModel(_displayId);
|
}
|
}
|
}
|
}
|
|
|
|
|