using System.Collections.Generic; using Cysharp.Threading.Tasks; using FaBao.Constant; using FaBao.Data; using FaBao.ExportedConfigs; using FaBao.TAction.TCard; using FaBao.TAction.TRune; using FaBao.TEvent; using FaBao.UI.Basics; using FaBao.UI.BasicUI; using FaBao.UI.Comp; using FairyGUI; using Google.Protobuf.Collections; using TEngine; using TEngine.UI; using TEngine.Redux; using UnityEngine; namespace FaBao.UI.SutraUI { public partial class MainSutraDetailDialog { public class MainSutraDetailDialogParam { public List SutraCardList; public int Index; public Card.SutraCardData CardData { get; set; } } public override IArchitecture GetArchitecture() { return App.Instance; } private Card.SutraCardData _sutraCardData; protected override void OnCreate() { base.OnCreate(); } private int _index = -1; private List _sutraCardList; protected override void OnShow(object param) { this.RegisterEvent(OnUpdateSutraCard); var mParam = GetParam(); if (mParam == null) return; _sutraCardData = mParam.CardData; _sutraCardList = mParam.SutraCardList; if (_sutraCardList == null || _sutraCardList.Count == 0) { m_btn_next.visible = false; m_btn_prev.visible = false; } else { for (var index = 0; index < _sutraCardList.Count; index++) { if (_sutraCardList[index].ConfigId == _sutraCardData.ConfigId) { _index = index; } } } Refresh(); } protected override void OnHide() { this.UnRegisterEvent(OnUpdateSutraCard); } #region 事件监听 private void OnUpdateSutraCard(UpdateSutraCardEvent obj) { if (obj == null) return; if (obj.SutraCardData.ConfigId != _sutraCardData.ConfigId) return; _sutraCardData = obj.SutraCardData; Refresh(); } #endregion private void Refresh() { //刷新按钮 m_btn_next.visible = _index < _sutraCardList?.Count - 1; m_btn_prev.visible = _index > 0; if (_sutraCardData == null) return; var cardTable = _sutraCardData.GetConfig(); if (cardTable == null) return; var sutraConfig = _sutraCardData.GetSutraConfig(); //基本信息 m_text_name.text = cardTable.Name.TR(); bool showTexture = string.IsNullOrEmpty(cardTable.PrefabRes); m_icon_sutra.visiable = showTexture; m_effect_sutra.visible = !showTexture; if (showTexture) { m_icon_sutra.icon = FUISys.Instance.GetIconUrl(cardTable.BigIcon); } else { m_effect_sutra.ShowEffect(cardTable.PrefabRes, 0.65f); } m_icon_level.icon = FUISys.Instance.GetIconUrl(_sutraCardData.LevelIcon); m_icon_property.icon = FUISys.Instance.GetIconUrl(_sutraCardData.ElementIcon); m_attri.selectedIndex = (int)sutraConfig.Element - 991001; m_text_potrem1.text = sutraConfig.Poetry[0].TR(); m_text_potrem2.text = sutraConfig.Poetry[1].TR(); var activeSkill = _sutraCardData.SkillConfig(); if (activeSkill != null) { m_btn_activeSkill.icon = FUISys.Instance.GetIconUrl(activeSkill.Icon); } //设置攻击力道心值加成 m_text_atkAdd.text = (_sutraCardData.AttackUp() / 100).ToString("0.0") + "%".TR(); m_text_hpAdd.text = (_sutraCardData.HpUp() / 100).ToString("0.0") + "%".TR(); //技能 var skillConfig = _sutraCardData.PassiveSkillConfig(false); m_text_skillName.text = skillConfig.Name.TR(); var passiveSkillConfig = _sutraCardData.PassiveSkillConfig(true); m_text_skill.text = passiveSkillConfig != null ? passiveSkillConfig.Description.TR() : "被动技能未解锁".TR(); if (_sutraCardData.GetSkillCheck()) { m_effect_skillUnlock.ShowEffect("Effect_FaBao_Unlock"); } #region 升级信息 //星级 m_list_star.RemoveChildrenToPool(); for (int i = 0; i < _sutraCardData.LevelStar; i++) { var item = m_list_star.AddItemFromPool() as ItemSutraStarSComp; if (item == null) continue; item.SetSutraStar(_sutraCardData.Level); } m_text_quality.text = Tr.Format("{0}阶", _sutraCardData.Quality); //设置通玄值 m_text_tongXuan.text = "通玄:".TR() + (_sutraCardData.InheritAtkPercent / 100).ToString("0.0") + "%".TR(); var dependLockInfo = _sutraCardData.DependUpgradeLevelUnLock(); if (dependLockInfo.Item1) { //可以升级 m_upgrade.visible = true; m_text_upgradeTip.visible = false; //刷新升级按钮 var fragmentItemId = (int)sutraConfig.FragmentItemId; var curCount = this.GetModel().GetItemCount(fragmentItemId); var levelConfig = _sutraCardData.GetSutraLevelConfig(); var costCount = (int)levelConfig.NeedFragments; var itemConfig = ItemTable.GetConfigById(fragmentItemId); m_loader_cost.url = FUISys.Instance.GetIconUrl(itemConfig.Icon); var enough = curCount >= costCount; m_text_cost.text = enough ? Tr.Format("[color=#1B8049]{0}/{1}[/color]", curCount, costCount) : Tr.Format("[color=#E55E5A]{0}/{1}[/color]", curCount, costCount); m_btn_upgrade.enabled = enough; } else { //不可以升级 m_upgrade.visible = false; m_text_upgradeTip.visible = true; m_text_upgradeTip.text = dependLockInfo.Item2.TR(); } #endregion #region 羁绊列表 m_list_fate.RemoveChildrenToPool(); var sutraTable = _sutraCardData.GetSutraConfig(); if (sutraTable != null) { var list = _sutraCardData.GetAllFates(); if (list.Count > 0) { for (var i = 0; i < list.Count; i++) { var fateConfig = SutraFateTable.GetConfigById(list[i].FateId); if (fateConfig == null) continue; var item = m_list_fate.AddItemFromPool(ItemFateIconAndNameComp.URL) as ItemFateIconAndNameComp; if (item == null) continue; item.BindData(fateConfig, true); } } else { var fates = sutraTable.Fates; for (var i = 0; i < fates.Length; i++) { var fateConfig = SutraFateTable.GetConfigById((int)fates[i]); if (fateConfig == null) continue; var item = m_list_fate.AddItemFromPool(ItemFateIconAndNameComp.URL) as ItemFateIconAndNameComp; if (item == null) continue; item.BindData(fateConfig, false); } } } #endregion if (_sutraCardData.GetFateCheck()) { m_effect_fateUnlock.ShowEffect("Effect_FaBao_Unlock"); } #region 灵纹信息 m_text_runeSlot.text = Tr.Format("({0}/6)", _sutraCardData.Card.RuneOpenCount); m_btn_unloadRune.visible = _sutraCardData.HasInlayRune(); //当前有镶嵌的灵纹才显示一键卸载按钮 var runeSlots = _sutraCardData.GetRuneList(); m_list_rune.RemoveChildrenToPool(); foreach (var kvPair in runeSlots) { var slotId = kvPair.Key; var runeData = kvPair.Value; var item = m_list_rune.AddItemFromPool(ItemRuneSlotComp.URL) as ItemRuneSlotComp; if (item == null) continue; item.BindData(slotId, runeData, _sutraCardData); } #endregion #region 等级词条列表 m_list_levelAttri.RemoveChildrenToPool(); var qualityAffixConfigs = _sutraCardData.GetSutraLevelAffixConfigs(); foreach (var config in qualityAffixConfigs) { var item = m_list_levelAttri.AddItemFromPool(ItemSutraLevelAffixComp.URL) as ItemSutraLevelAffixComp; if (item == null) continue; item.BindData(_sutraCardData, config); } #endregion _sutraCardData.ClearRed(); } private void OnBtnClose() { Close(); } private void OnBtnActiveSkill() { var sutraTable = _sutraCardData.GetSutraConfig(); int tagId = (int)sutraTable.Tag[0]; SutraLabelTable table = SutraLabelTable.GetConfigById(tagId); int tipId = (int)table.TipsId; if (tipId <= 0) { Log.Error($"Can not find tagId in sutra : {_sutraCardData.Card.Id}"); return; } //获取BattleLayer中对应组件位置 var screenPos = m_btn_activeSkill.LocalToGlobal(new Vector2(0.5f, 0)); var logicScreenPos = GRoot.inst.GlobalToLocal(screenPos); var param = new CommonTipFloatDialog.CommonTipFloatDialogParam { TipId = tipId, AlignType = CommonTipFloatDialog.AlignType.BottomToPoint, OriPosition = logicScreenPos }; FUISys.Instance.ShowLayer(UISceneType.Main, param); } private void OnBtnValueInfo() { FUISys.Instance.ShowLayer(UISceneType.Main, new DetailAttriDialog.DetailAttriDialog.DetailAttriDialogParam() { SutraData = _sutraCardData }); } private async void OnBtnUpgrade() { this.SendEvent(new TutorialTriggerEvent(283)); await this.GetModel().DispatchAction(new Card_Action_UpgradeSutraLevel(new MapField { { _sutraCardData.Card.Id, 1 } })); } private void OnBtnPrev() { _index--; _sutraCardData = _sutraCardList[_index]; Refresh(); } private void OnBtnNext() { _index++; _sutraCardData = _sutraCardList[_index]; Refresh(); } private async void OnBtnUnloadRune() { if (RuneModel.UnloadRuneConfirmSwitch) { FUISys.Instance.ShowLayer(UISceneType.Main, new MainConfirmDialog.MainConfirmDialogParam() { Title = "提示", Content = "是否一键卸下法宝当前镶嵌灵纹", ShowCancelBtn = true, ConfirmText = "确认", ConfirmCallback = async () => { //灵纹一键下阵 if (await this.GetModel().DispatchAction(new Rune_Action_CleanRune(_sutraCardData.Card.Id))) { Toast.Info("卸载成功"); } }, CancelText = "取消", CancelCallback = () => RuneModel.UnloadRuneConfirmSwitch = true, CheckBoxText = "本次登录不再提示", CheckBoxCallback = selected => RuneModel.UnloadRuneConfirmSwitch = !selected }).Forget(); } else { //灵纹一键下阵 if (await this.GetModel().DispatchAction(new Rune_Action_CleanRune(_sutraCardData.Card.Id))) { Toast.Info("卸载成功"); } } } } }