//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, January 03, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; 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; [SerializeField] Button m_ComposeBtn; [SerializeField] RedpointBehaviour m_ComposeRedpoint; RuneComposeModel model { get { return ModelCenter.Instance.GetModel(); } } RuneModel runeModel { get { return ModelCenter.Instance.GetModel(); } } RuneResolveModel runeResolveModel { get { return ModelCenter.Instance.GetModel(); } } VirtualPackModel virtualPackModel { get { return 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() { runeModel.onRuneTowerRefresh += OnRuneTowerRefresh; virtualPackModel.virtualPackRefresh += VirtualPackRefresh; PlayerDatas.Instance.playerDataRefreshEvent += OnRefreshPlayerInfo; DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent += MakeItemAnswerEvent; RefreshRuneType(); RefreshRuneCompose(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { runeModel.onRuneTowerRefresh -= OnRuneTowerRefresh; virtualPackModel.virtualPackRefresh -= VirtualPackRefresh; PlayerDatas.Instance.playerDataRefreshEvent -= OnRefreshPlayerInfo; DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent -= MakeItemAnswerEvent; } protected override void OnAfterClose() { } #endregion private void OnRuneTowerRefresh() { scrollerController.m_Scorller.RefreshActiveCellViews(); } private void OnRefreshPlayerInfo(PlayerDataType type) { if (type == PlayerDataType.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.AppendColor(TextColType.Green, _magicEssence.ToString()) : UIHelper.AppendColor(TextColType.Red, _magicEssence.ToString()), "/", _cfg.NeedMJ); } } private void MakeItemAnswerEvent(H0721_tagMakeItemAnswer package) { if (package.MakeType == (int)MakeType.RuneCompound) { if (package.Result == 1) { if (m_RuneComposeEffect != null) { m_RuneComposeEffect.Play(); } } } } 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 (_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.AppendColor(TextColType.Green, _magicEssence.ToString()) : UIHelper.AppendColor(TextColType.Red, _magicEssence.ToString()), "/", _cfg.NeedMJ); ItemConfig _itemCfg = ItemConfig.Get(_cfg.NeedItem[0]); m_Rune1Img.SetSprite(_itemCfg.IconKey); RuneItem _rune1 = null; var _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[0], out _rune1); m_Rune1NumTxt.text = StringUtility.Contact(_runeCnt > 0 ? UIHelper.AppendColor(TextColType.White, _runeCnt.ToString()) : UIHelper.AppendColor(TextColType.Red, _runeCnt.ToString()), "/", 1); m_Rune1NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune1 == null ? 1 : _rune1.level); m_Rune1NameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true); _itemCfg = ItemConfig.Get(_cfg.NeedItem[1]); m_Rune2Img.SetSprite(_itemCfg.IconKey); RuneItem _rune2 = null; _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[1], out _rune2); m_Rune2NumTxt.text = StringUtility.Contact(_runeCnt > 0 ? UIHelper.AppendColor(TextColType.White, _runeCnt.ToString()) : UIHelper.AppendColor(TextColType.Red, _runeCnt.ToString()), "/", 1); m_Rune2NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune2 == null ? 1 : _rune2.level); m_Rune2NameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true); _itemCfg = ItemConfig.Get(_cfg.TagItemID); var _composeLv = 1; m_ComposeRuneImg.SetSprite(_itemCfg.IconKey); if (_rune1 != null && _rune2 != null) { float _exp = 0; _exp += runeResolveModel.GetRuneResolveGetSplinters(_rune1.id, _rune1.level, true); _exp += runeResolveModel.GetRuneResolveGetSplinters(_rune2.id, _rune2.level, true); _composeLv = runeModel.GetRuneLevelBySplinters(_cfg.TagItemID, _exp); } m_ComposeRuneNameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _composeLv); RuneConfig _tagRuneModel = RuneConfig.Get(_itemCfg.ID); int[] _runeTypes = _tagRuneModel.AttrType; var _propertyCfg = PlayerPropertyConfig.Get(_runeTypes[0]); m_ComposeRuneProperty0.text = _propertyCfg.Name; m_ComposeRunePropertyValue0.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetPropertyValue(_itemCfg.ID, _composeLv, _runeTypes[0]), _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); _propertyCfg = PlayerPropertyConfig.Get(_runeTypes[1]); m_ComposeRuneProperty1.text = _propertyCfg.Name; m_ComposeRunePropertyValue1.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetPropertyValue(_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 VirtualPackRefresh(PackType packType) { if (packType == PackType.RunePack) { RefreshRuneCompose(); } } 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 = RuneConfig.Get(_list[cell.index].TagItemID); bool _unlockTower = _runeCfg.TowerID <= runeModel.passRuneTowerFloor; 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) { var _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune); if (_cfg != null) { ItemTipUtility.Show(_cfg.NeedItem[_index]); } } private void OnComposeBtn() { RuneComposeConfig _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune); RuneItem _rune1 = null; var _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[0], out _rune1); RuneItem _rune2 = null; _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[1], out _rune2); if (PlayerDatas.Instance.extersion.magicEssence < _cfg.NeedMJ) { return; } if (_rune1 != null && _rune2 != null) { 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] = (byte)_rune1.placeType; pak.IndexList[0] = (byte)_rune1.index; pak.PackList[1] = (byte)_rune2.placeType; pak.IndexList[1] = (byte)_rune2.index; GameNetSystem.Instance.SendInfo(pak); } } private void OnMagicEssenceBtn() { var _displayId = GeneralDefine.moneyDisplayIds.ContainsKey(14) ? GeneralDefine.moneyDisplayIds[14] : 0; if (_displayId != 0) { ItemTipUtility.Show(_displayId); } } } }