using System.Collections.Generic; using System.Linq; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Hero; using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using Utility; namespace Fort23.Mono { [UIBinding(prefab = "SelectFaBaoPanel")] public partial class SelectFaBaoPanel : UIPanel { List faBaoSkillWidgets = new List(); List faBaoAttributeWidgets = new List(); List itemWidgetType1s = new List(); List faBaoWidgets = new List(); FaBaoWidget currentFaBaoWidget = null; FaBaoInfo currentFaBaoInfo; FaBaoInfo selectedFaBaoInfo; int selectIndex; private bool isUpGrade = false; private List shownFaBaoInfos; private void Init() { IsShowAppBar = false; isAddStack = true; } protected override void AddEvent() { } protected override void DelEvent() { } public override CTask GetFocus() { // AppBarPanel.ClosePanel(); return base.GetFocus(); } public override void AddButtonEvent() { Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); Btn_Change.onClick.AddListener(() => { if (selectedFaBaoInfo.FaBaoData.useIndex != -1) { TipMessagePanel.OpenTipMessagePanel("当前法宝已经被装备"); return; } PlayerManager.Instance.FaBaoControl.ChangeUseFaBao(selectIndex, selectedFaBaoInfo); currentFaBaoInfo = selectedFaBaoInfo; selectedFaBaoInfo = null; CustomInit(selectIndex); UpdateBjUI(false); }); Btn_UpGrade.onClick.AddListener(() => { if (selectedFaBaoInfo != null) { if (selectedFaBaoInfo.FabaoPowerupConfig.ID >= ConfigComponent.Instance.GetAll().Length) { TipMessagePanel.OpenTipMessagePanel("已经满级"); return; } // for (var i = 0; i < selectedFaBaoInfo.FabaoPowerupConfig.PowerupItemIDs.Length; i++) // { // if (!PlayerManager.Instance.BagController.IsEnough(selectedFaBaoInfo.FabaoPowerupConfig.PowerupItemIDs[i], selectedFaBaoInfo.FabaoPowerupConfig.PowerupItemCosts[i])) // { // TipMessagePanel.OpenTipMessagePanel("道具不足"); // return; // } // // } selectedFaBaoInfo.UpGrade(); UpdateCurrentFaBaoWidget(); UpadaFabaoBag(); UpdateUI(selectedFaBaoInfo); UpdataGradeUI(true); } }); Btn_PeiYang.onClick.AddListener(() => { isUpGrade = true; BtnUpGradeRoot.SetActive(true); BtnChangeRoot.SetActive(false); UpdataGradeUI(true); UpdateBjUI(false); }); Btn_Cancel.onClick.AddListener(() => { isUpGrade = false; BtnUpGradeRoot.SetActive(false); BtnChangeRoot.SetActive(true); UpdataGradeUI(false); UpdateBjUI(true); }); } public async override CTask AsyncInit(object[] uiData) { // await UpadaFabaoBag(); return await base.AsyncInit(uiData); } private void UpdataGradeUI(bool isStartUpGrade) { if (isStartUpGrade) { AccountFileInfo.FaBaoData faBaoData = new AccountFileInfo.FaBaoData(); faBaoData.id = selectedFaBaoInfo.FaBaoData.id; faBaoData.level = selectedFaBaoInfo.FaBaoData.level + 1; FaBaoInfo nextFabaoInfo = new FaBaoInfo(faBaoData); foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { faBaoAttributeWidget.StartUpGrad(nextFabaoInfo); } Text_NextLv.text = "+1"; Text_NextPower.text = "+" + (nextFabaoInfo.qiangDu - selectedFaBaoInfo.qiangDu); Text_NextLv.gameObject.SetActive(true); Text_NextPower.gameObject.SetActive(true); } else { foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { faBaoAttributeWidget.EndUpGrade(); } Text_NextLv.gameObject.SetActive(false); Text_NextPower.gameObject.SetActive(false); } } private void UpdateBjUI(bool isBj) { if (isBj) { if (currentFaBaoInfo != selectedFaBaoInfo && selectedFaBaoInfo != null) { if (currentFaBaoInfo == null || selectedFaBaoInfo.FabaoPowerupConfig.ID > currentFaBaoInfo.FabaoPowerupConfig.ID) { Icon_LvBj.gameObject.SetActive(true); Icon_LvBj.icon_name = "icon_tisheng"; } else if (selectedFaBaoInfo.FabaoPowerupConfig.ID < currentFaBaoInfo.FabaoPowerupConfig.ID) { Icon_LvBj.gameObject.SetActive(true); Icon_LvBj.icon_name = "icon_xiajiang"; } else { Icon_LvBj.gameObject.SetActive(false); } if (currentFaBaoInfo == null || selectedFaBaoInfo.qiangDu > currentFaBaoInfo.qiangDu) { Icon_PowrBj.gameObject.SetActive(true); Icon_PowrBj.icon_name = "icon_tisheng"; } else if (selectedFaBaoInfo.qiangDu < currentFaBaoInfo.qiangDu) { Icon_PowrBj.gameObject.SetActive(true); Icon_PowrBj.icon_name = "icon_xiajiang"; } else { Icon_PowrBj.gameObject.SetActive(false); } foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { faBaoAttributeWidget.StartBj(currentFaBaoInfo); } } else { Icon_LvBj.gameObject.SetActive(false); Icon_PowrBj.gameObject.SetActive(false); foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { faBaoAttributeWidget.EndBj(); } } } else { Icon_LvBj.gameObject.SetActive(false); Icon_PowrBj.gameObject.SetActive(false); foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { faBaoAttributeWidget.EndBj(); } } } private async CTask UpadaFabaoBag() { foreach (var faBaoAttributeWidget in faBaoWidgets) { UIManager.Instance.DormancyGComponent(faBaoAttributeWidget); } faBaoWidgets.Clear(); shownFaBaoInfos = PlayerManager.Instance.FaBaoControl.myAllFaBao.ToList(); shownFaBaoInfos.Sort((l, r) => { if (l.FaBaoData.useIndex == -1 && r.FaBaoData.useIndex > -1) { return -1; } if (l.FaBaoData.useIndex > -1 && r.FaBaoData.useIndex == 1) { return 1; } return r.FabaoPowerupConfig.ID.CompareTo(l.FabaoPowerupConfig.ID); }); if (shownFaBaoInfos.Count > 0) { for (var i = 0; i < shownFaBaoInfos.Count; i++) { if (shownFaBaoInfos[i] == currentFaBaoInfo) { continue; } FaBaoWidget faBaoWidget = await UIManager.Instance.CreateGComponent(null, Content); faBaoWidget.CustomInit(shownFaBaoInfos[i], true); faBaoWidget.onClick = OnClick; faBaoWidgets.Add(faBaoWidget); } NoFaBagRoot.gameObject.SetActive(false); } else { NoFaBagRoot.gameObject.SetActive(true); } } private async void OnClick(ItemWidgetBasic obj) { FaBaoWidget faBao = obj as FaBaoWidget; selectedFaBaoInfo = faBao.faoInfo; Btn_Change.gameObject.SetActive(true); Btn_PeiYang.gameObject.SetActive(true); await UpdateUI(selectedFaBaoInfo); FaBaoInfoRoot.SetActive(true); Text_NoFabaoTips.gameObject.gameObject.SetActive(false); if (!isUpGrade) { UpdateBjUI(true); } } public async void CustomInit(int selectIndex) { this.selectIndex = selectIndex; BtnUpGradeRoot.SetActive(false); BtnChangeRoot.SetActive(true); currentFaBaoInfo = PlayerManager.Instance.FaBaoControl.FightFaBao[selectIndex]; selectedFaBaoInfo = currentFaBaoInfo; UpdateCurrentFaBaoWidget(); UpdateUI(selectedFaBaoInfo); UpadaFabaoBag(); } private async CTask UpdateCurrentFaBaoWidget() { if (currentFaBaoInfo != null) { if (currentFaBaoWidget == null) currentFaBaoWidget = await UIManager.Instance.CreateGComponent(null, CurrentFaBaoRoot); currentFaBaoWidget.onClick = OnClick; currentFaBaoWidget.CustomInit(currentFaBaoInfo, false); equipTipsRoot.gameObject.SetActive(true); } else { UIManager.Instance.DormancyGComponent(currentFaBaoWidget); equipTipsRoot.gameObject.SetActive(false); } } private async CTask UpdateUI(FaBaoInfo faBaoInfo) { if (faBaoInfo != null) { FaBaoInfoRoot.SetActive(true); Text_NoFabaoTips.gameObject.gameObject.SetActive(false); if (faBaoInfo.FaBaoData.useIndex != -1) { Btn_Change.transform.Gray(true); } else { Btn_Change.transform.RecoverColor(); } Btn_PeiYang.gameObject.SetActive(true); Btn_Change.gameObject.SetActive(true); await UpdateFaBaoUI(faBaoInfo); } else { FaBaoInfoRoot.SetActive(false); Text_NoFabaoTips.gameObject.gameObject.SetActive(true); Btn_Change.gameObject.SetActive(false); Btn_PeiYang.gameObject.SetActive(false); } } private async CTask UpdateFaBaoUI(FaBaoInfo faBaoInfo) { using (CTaskAwaitBuffer cts = new CTaskAwaitBuffer()) { Text_FaBaoName.text = LanguageManager.Instance.Text(faBaoInfo.FabaoConfig.name) + " Lv." + faBaoInfo.FabaoPowerupConfig.ID; Text_Power.text = $"强度:{faBaoInfo.qiangDu}"; Text_Desc.text = UtilTools.GetString(LanguageManager.Instance.Text(faBaoInfo.SkillConfig.dec), faBaoInfo.effectValue); if (faBaoInfo.FabaoPowerupConfig.ID >= ConfigComponent.Instance.GetAll().Length) { Text_UpGrade.gameObject.SetActive(false); ItemRoot.gameObject.SetActive(false); Text_ManTips.gameObject.SetActive(true); } else { AccountFileInfo.FaBaoData _faBaoData = new AccountFileInfo.FaBaoData(); _faBaoData.id = faBaoInfo.FaBaoData.id; _faBaoData.level = faBaoInfo.FabaoPowerupConfig.ID + 1; FaBaoInfo _nextFaBaoInfo = new FaBaoInfo(_faBaoData); cts.AddTask(CreatItemWidgetType1(faBaoInfo)); //tupo if (_nextFaBaoInfo.FabaoPowerupConfig.SkillLevel != selectedFaBaoInfo.FabaoPowerupConfig.SkillLevel) { Text_UpGrade.text = "突破"; } else { Text_UpGrade.text = "升级"; } Text_UpGrade.gameObject.SetActive(true); ItemRoot.gameObject.SetActive(true); Text_ManTips.gameObject.SetActive(false); } Icon_FaBaoIcon.icon_name = faBaoInfo.SkillConfig.icon; switch (faBaoInfo.FabaoConfig.magicAttribute) { case 1: Icon_Attribute.GetComponent().ChangeState(0); Text_Attribute.text = "金"; break; case 2: Icon_Attribute.GetComponent().ChangeState(1); Text_Attribute.text = "木"; break; case 4: Icon_Attribute.GetComponent().ChangeState(2); Text_Attribute.text = "水"; break; case 8: Icon_Attribute.GetComponent().ChangeState(3); Text_Attribute.text = "火"; break; case 16: Icon_Attribute.GetComponent().ChangeState(4); Text_Attribute.text = "土"; break; } cts.AddTask(CreatFaBaoSkillWidget(faBaoInfo)); cts.AddTask(CreatFaBaoAttributeWidget(faBaoInfo)); await cts.WaitAll(); } } private async CTask CreatItemWidgetType1(FaBaoInfo faBaoInfo) { foreach (var itemWidgetType1 in itemWidgetType1s) { UIManager.Instance.DormancyGComponent(itemWidgetType1); } itemWidgetType1s.Clear(); for (var i = 0; i < faBaoInfo.FabaoPowerupConfig.PowerupItemIDs.Length; i++) { ItemWidgetType1 itemWidgetType1 = await UIManager.Instance.CreateGComponent(null, ItemRoot); itemWidgetType1.CustomInit(faBaoInfo.FabaoPowerupConfig.PowerupItemIDs[i], faBaoInfo.FabaoPowerupConfig.PowerupItemCosts[i]); itemWidgetType1s.Add(itemWidgetType1); } } private async CTask CreatFaBaoSkillWidget(FaBaoInfo faBaoInfo) { foreach (var faBaoSkillWidget in faBaoSkillWidgets) { UIManager.Instance.DormancyGComponent(faBaoSkillWidget); } faBaoSkillWidgets.Clear(); List fabaoPowerupConfigs = ConfigComponent.Instance.GetAll().ToList(); var fanappower = fabaoPowerupConfigs.GroupBy(f => f.SkillLevel).Select(g => new { config = g.OrderBy(f => f.ID).FirstOrDefault() }).ToList(); foreach (var powerupConfigse in fanappower) { AccountFileInfo.FaBaoData faBaoData = new AccountFileInfo.FaBaoData(); faBaoData.id = selectedFaBaoInfo.FaBaoData.id; faBaoData.level = powerupConfigse.config.ID; FaBaoInfo _faBaoInfo = new FaBaoInfo(faBaoData); FaBaoSkillWidget faBaoSkillWidget = await UIManager.Instance.CreateGComponent(null, SkillContent); faBaoSkillWidget.CustomInit(selectedFaBaoInfo, _faBaoInfo); faBaoSkillWidgets.Add(faBaoSkillWidget); } } private async CTask CreatFaBaoAttributeWidget(FaBaoInfo faBaoInfo) { foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { UIManager.Instance.DormancyGComponent(faBaoAttributeWidget); } faBaoAttributeWidgets.Clear(); foreach (var keyValuePair in faBaoInfo.attriButedIC) { FaBaoAttributeWidget faBaoAttributeWidget = await UIManager.Instance.CreateGComponent(null, FaBaoAttributeWidgetRoot); faBaoAttributeWidget.CusomtInit(selectedFaBaoInfo, keyValuePair.Key); faBaoAttributeWidgets.Add(faBaoAttributeWidget); } } public async static CTask OpenPanel(int selectIndex) { SelectFaBaoPanel selectFaBaoPanel = await UIManager.Instance.LoadAndOpenPanel(null); selectFaBaoPanel.CustomInit(selectIndex); return selectFaBaoPanel; } public override void Close() { foreach (var faBaoAttributeWidget in faBaoAttributeWidgets) { UIManager.Instance.DormancyGComponent(faBaoAttributeWidget); } faBaoAttributeWidgets.Clear(); foreach (var faBaoAttributeWidget in faBaoWidgets) { UIManager.Instance.DormancyGComponent(faBaoAttributeWidget); } faBaoWidgets.Clear(); foreach (var faBaoSkillWidget in faBaoSkillWidgets) { UIManager.Instance.DormancyGComponent(faBaoSkillWidget); } faBaoSkillWidgets.Clear(); foreach (var itemWidgetType1 in itemWidgetType1s) { UIManager.Instance.DormancyGComponent(itemWidgetType1); } itemWidgetType1s.Clear(); UIManager.Instance.DormancyGComponent(currentFaBaoWidget); UpdataGradeUI(false); UpdateBjUI(false); currentFaBaoWidget = null; BtnUpGradeRoot.SetActive(false); BtnChangeRoot.SetActive(true); currentFaBaoInfo = null; selectedFaBaoInfo = null; base.Close(); } } }