using System.Collections.Generic; using System.Linq; using Excel2Json; using Fort23.Core; using Fort23.UTool; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using UnityEngine; using Utility; namespace Fort23.Mono { [UIBinding(prefab = "ImmortalBondPanel")] public partial class ImmortalBondPanel : UIPanel { private DaoYouWidget addDaoYouWidget; private DaoYouWidget removeDaoYouWidget; List _daoLvSkillWidgets = new List(); private void Init() { isAddStack = true; } public override CTask GetFocus() { // AppBarPanel.OpenPanel(this); AppBarPanel.ClosePanel(); return base.GetFocus(); } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_Add.onClick.AddListener(() => { if (addDaoYouWidget == null) { Btn_Add.gameObject.SetActive(false); return; } if (!PlayerManager.Instance.myHero.heroData.ImmortalBond.Contains(addDaoYouWidget._daoYouData.id)) { PlayerManager.Instance.myHero.heroData.ImmortalBond.Add(addDaoYouWidget._daoYouData.id); PlayerManager.Instance.myHero.ComputeHeroInfo(); AccountFileInfo.Instance.SavePlayerData(); addDaoYouWidget = null; Btn_Add.gameObject.SetActive(false); UpdateUi(); } }); Btn_Remove.onClick.AddListener(() => { if (removeDaoYouWidget == null) { Btn_Remove.gameObject.SetActive(false); return; } if (PlayerManager.Instance.myHero.heroData.ImmortalBond.Contains(removeDaoYouWidget._daoYouData.id)) { PlayerManager.Instance.myHero.heroData.ImmortalBond.Remove(removeDaoYouWidget._daoYouData.id); PlayerManager.Instance.myHero.ComputeHeroInfo(); AccountFileInfo.Instance.SavePlayerData(); removeDaoYouWidget = null; Btn_Remove.gameObject.SetActive(false); UpdateUi(); } }); Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); } public async override CTask AsyncInit(object[] uiData) { UpdateUi(); return await base.AsyncInit(uiData); } private async CTask UpdateUi() { foreach (var daoLvSkillWidget in _daoLvSkillWidgets) { UIManager.Instance.DormancyGComponent(daoLvSkillWidget); } _daoLvSkillWidgets.Clear(); UIManager.Instance.DormancyAllGComponent(); //已经邀请的道侣 foreach (var i in PlayerManager.Instance.myHero.heroData.ImmortalBond) { DaoYouWidget daoYouWidget = await UIManager.Instance.CreateGComponent(null, Content1); daoYouWidget.CustomInit(i); daoYouWidget.OnClick = OnClick1; } //可以被邀请的道侣 foreach (var playerDataDaoYouData in AccountFileInfo.Instance.playerData.daoYouDatas) { if (!PlayerManager.Instance.myHero.heroData.ImmortalBond.Contains(playerDataDaoYouData.id)) { DaoYouWidget daoYouWidget = await UIManager.Instance.CreateGComponent(null, Content2); daoYouWidget.CustomInit(playerDataDaoYouData.id); daoYouWidget.OnClick = OnClick2; } } foreach (var i in PlayerManager.Instance.myHero.daolvBlMap) { DaoLvSkillWidget daoLvSkillWidget = await UIManager.Instance.CreateGComponent(null, JiachengContent); daoLvSkillWidget.CustomInit(i.Key, i.Value); _daoLvSkillWidgets.Add(daoLvSkillWidget); } } private async void OnClick1(ItemWidgetBasic obj) { DaoYouWidget daoYouWidget = obj as DaoYouWidget; removeDaoYouWidget = daoYouWidget; Vector3 pos = transform.InverseTransformPoint(removeDaoYouWidget.transform.position); pos.y -= 180; Btn_Remove.gameObject.GetComponent().anchoredPosition = pos; Btn_Remove.gameObject.SetActive(true); if (PlayerManager.Instance.myHero.heroData.ImmortalBond.Contains(removeDaoYouWidget._daoYouData.id)) { List ImmortalBond = PlayerManager.Instance.myHero.heroData.ImmortalBond.ToList(); ImmortalBond.Remove(removeDaoYouWidget._daoYouData.id); Map daolvBlMap = GetDaoLvBl(ImmortalBond); foreach (var daoLvSkillWidget in _daoLvSkillWidgets) { daoLvSkillWidget.UpdateBl(daolvBlMap); } foreach (var keyValuePair in daolvBlMap) { DaoLvSkillWidget daoLvSkillWidget = _daoLvSkillWidgets.FirstOrDefault(ds => ds._daolvSkill.ID == keyValuePair.Key); if (daoLvSkillWidget == null) { DaoLvSkillWidget daoLvSkillWidget1 = await UIManager.Instance.CreateGComponent(null, JiachengContent); daoLvSkillWidget1.CustomInit(keyValuePair.Key, 0); _daoLvSkillWidgets.Add(daoLvSkillWidget1); daoLvSkillWidget1.UpdateBl(daolvBlMap); } } } } private async void OnClick2(ItemWidgetBasic obj) { DaoYouWidget daoYouWidget = obj as DaoYouWidget; addDaoYouWidget = daoYouWidget; Vector3 pos = transform.InverseTransformPoint(daoYouWidget.transform.position); pos.y -= 180; Btn_Add.gameObject.GetComponent().anchoredPosition = pos; Btn_Add.gameObject.SetActive(true); if (!PlayerManager.Instance.myHero.heroData.ImmortalBond.Contains(addDaoYouWidget._daoYouData.id)) { List ImmortalBond = PlayerManager.Instance.myHero.heroData.ImmortalBond.ToList(); ImmortalBond.Add(addDaoYouWidget._daoYouData.id); Map daolvBlMap = GetDaoLvBl(ImmortalBond); foreach (var daoLvSkillWidget in _daoLvSkillWidgets) { daoLvSkillWidget.UpdateBl(daolvBlMap); } foreach (var keyValuePair in daolvBlMap) { DaoLvSkillWidget daoLvSkillWidget = _daoLvSkillWidgets.FirstOrDefault(ds => ds._daolvSkill.ID == keyValuePair.Key); if (daoLvSkillWidget == null) { DaoLvSkillWidget daoLvSkillWidget1 = await UIManager.Instance.CreateGComponent(null, JiachengContent); daoLvSkillWidget1.CustomInit(keyValuePair.Key, 0); _daoLvSkillWidgets.Add(daoLvSkillWidget1); daoLvSkillWidget1.UpdateBl(daolvBlMap); } } } } public Map GetDaoLvBl(List ImmortalBond) { Map daolvBlMap = new Map(); foreach (var i in ImmortalBond) { DaoyouModelConfig daoyouModelConfig = ConfigComponent.Instance.Get(i); foreach (var i1 in daoyouModelConfig.daolvSkillID) { daolvSkill daolvSkill = ConfigComponent.Instance.Get(i1); //唯一只加一次 if (daolvSkill.type == 1) { if (!daolvBlMap.ContainsKey(i1)) { daolvBlMap.Add(i1, daolvSkill.para[0]); } } else { if (!daolvBlMap.ContainsKey(i1)) { daolvBlMap.Add(i1, daolvSkill.para[0]); } else { daolvBlMap[i1] += daolvSkill.para[0]; } } } } return daolvBlMap; } public async static CTask OpenPanel() { await UIManager.Instance.LoadAndOpenPanel(null); } public override void Close() { foreach (var daoLvSkillWidget in _daoLvSkillWidgets) { UIManager.Instance.DormancyGComponent(daoLvSkillWidget); } _daoLvSkillWidgets.Clear(); UIManager.Instance.DormancyAllGComponent(); Btn_Add.gameObject.SetActive(true); Btn_Remove.gameObject.SetActive(true); base.Close(); } } }