//-------------------------------------------------------- // [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()); } } RuneModel m_RuneModel; RuneModel runeModel { get { return m_RuneModel ?? (m_RuneModel = ModelCenter.Instance.GetModel()); } } #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(_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(_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(_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(_itemCfg.ID); int[] _runeTypes = _tagRuneModel.AttrType; var _propertyCfg = Config.Instance.Get(_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(_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 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 _list = model.runeComposeDict[model.presentSelectRuneQuality]; if (cell.index >= _list.Count) { return; } RuneConfig _runeCfg = Config.Instance.Get(_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(); RuneConfig _runeCfg = Config.Instance.Get(_cfg.NeedItem[_index]); RuneTowerConfig _towerCfg = null; RuneTowerFloorConfig _runeTowerCfg = null; if (_runeCfg.TowerID != 0) { _runeTowerCfg = Config.Instance.Get(_runeCfg.TowerID); _towerCfg = Config.Instance.Get(_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(); var _displayId = GeneralConfig.Instance.moneyDisplayIds.ContainsKey(14) ? GeneralConfig.Instance.moneyDisplayIds[14] : 0; if (_displayId != 0) { _itemPath.SetChinItemModel(_displayId); } } } }