using System; using System.Collections.Generic; using System.Linq; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Bag; using UnityEngine; using Utility; namespace Fort23.Mono { [UIBinding(prefab = "DivineSenceInfoPanel")] public partial class DivineSenceInfoPanel : UIPanel { private Action> callback; private int useCount = 0; List useItems = new List(); List _divineSenceInfoBtnWidgets = new List(); private int maxCount; private DivineSenseConfig divineSenseConfig; private void Init() { isPopUi = true; } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_Ok.onClick.AddListener(() => { useItems.Clear(); foreach (var senceInfoBtnWidget in _divineSenceInfoBtnWidgets) { if (senceInfoBtnWidget.type == 2 && senceInfoBtnWidget.ItemInfo != null ) { useItems.Add(senceInfoBtnWidget.ItemInfo); } } callback?.Invoke(useCount,useItems); UIManager.Instance.HideUIUIPanel(this); }); Btn_Back.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); Slider_Count.onValueChanged.AddListener((c) => { useCount = (int)c; Text_Count.text = $"神识探索:{c}次"; Text_shenshishangxian.text = $"({EventSystemManager.Instance.GetShenShiCount()} + {c}/{maxCount})"; foreach (var senceInfoBtnWidget in _divineSenceInfoBtnWidgets) { senceInfoBtnWidget.UpdateItermCount(useCount); } }); Btn_Tip.onClick.AddListener(() => { DivineSenceLevelPreviewPanel.OpenPanel(); }); Btn_Event.onClick.AddListener(() => { DivineSenceEventPreviewPanel.OpenPanel(); }); } public async void CustomInit(Action> callback) { _divineSenceInfoBtnWidgets.Clear(); divineSenseConfig = ConfigComponent.Instance.Get(AccountFileInfo.Instance.playerData.divineSenseLevel); HeroPowerUpConfig heroPowerUpConfig = PlayerManager.Instance.myHero.powerUpConfig; Text_Level.text = $"神识等级:{AccountFileInfo.Instance.playerData.divineSenseLevel}级"; Text_Exp.text = $"{AccountFileInfo.Instance.playerData.divineSenseexp}/{divineSenseConfig.exp}"; Slider_Exp.maxValue = divineSenseConfig.exp; Slider_Exp.value = AccountFileInfo.Instance.playerData.divineSenseexp; int count = AccountFileInfo.Instance.playerData.divineSensePoint / PlayerManager.Instance.gameConstantConfig.DetectEventCount; maxCount = heroPowerUpConfig.ShenshiMax / PlayerManager.Instance.gameConstantConfig.DetectEventCount; maxCount = maxCount > 10 ? 10 : maxCount; count = count + EventSystemManager.Instance.GetShenShiCount() > maxCount ? maxCount - EventSystemManager.Instance.GetShenShiCount() : count; Slider_Count.maxValue = count; Slider_Count.minValue = 1; List probabilities = UtilTools.CalculateProbabilities(divineSenseConfig.QualityBonusChance.ToList()); for (var i = 0; i < Text_qs.Count; i++) { Text_qs[i].text = $"{probabilities[i] * 100:F2}%"; } DivineSenceInfoBtnWidget divineSenceInfoBtnWidget = await UIManager.Instance.CreateGComponentForObject(DivineSenceInfoBtnWidgetGam0, null); divineSenceInfoBtnWidget.CustomInit(-1, 1); divineSenceInfoBtnWidget.OnClick = OnClick; _divineSenceInfoBtnWidgets.Add(divineSenceInfoBtnWidget); divineSenceInfoBtnWidget = await UIManager.Instance.CreateGComponentForObject(DivineSenceInfoBtnWidgetGam1, null); divineSenceInfoBtnWidget.CustomInit(-1, 2); divineSenceInfoBtnWidget.OnClick = OnClick; _divineSenceInfoBtnWidgets.Add(divineSenceInfoBtnWidget); divineSenceInfoBtnWidget = await UIManager.Instance.CreateGComponentForObject(DivineSenceInfoBtnWidgetGam2, null); divineSenceInfoBtnWidget.CustomInit(-1, 2); divineSenceInfoBtnWidget.OnClick = OnClick; _divineSenceInfoBtnWidgets.Add(divineSenceInfoBtnWidget); this.callback = callback; } private void OnClick(ItemWidgetBasic obj) { DivineSenceInfoBtnWidget divineSenceInfoBtnWidget = obj as DivineSenceInfoBtnWidget; if (divineSenceInfoBtnWidget.type == 1) return; DivineSenceItemPanel.OpenPanel(divineSenceInfoBtnWidget.ItemInfo, (id) => { divineSenceInfoBtnWidget.CustomInit(id, divineSenceInfoBtnWidget.type); UpdateBl(); }, () => { divineSenceInfoBtnWidget.CustomInit(-1, divineSenceInfoBtnWidget.type); UpdateBl(); }); } public void UpdateBl() { Map probabilitiesMap = new Map(); foreach (var senceInfoBtnWidget in _divineSenceInfoBtnWidgets) { if (senceInfoBtnWidget.type == 2 && senceInfoBtnWidget.ItemInfo != null && senceInfoBtnWidget.ItemInfo.config.associateID == 6) { if (!probabilitiesMap.ContainsKey(senceInfoBtnWidget.ItemInfo.config.associateVlaue[0])) { probabilitiesMap.Add(senceInfoBtnWidget.ItemInfo.config.associateVlaue[0], senceInfoBtnWidget.ItemInfo.config.associateVlaue[1]); } else { probabilitiesMap[senceInfoBtnWidget.ItemInfo.config.associateVlaue[0]] += senceInfoBtnWidget.ItemInfo.config.associateVlaue[1]; } } senceInfoBtnWidget.UpdateItermCount(useCount); } var QualityBonusChance = divineSenseConfig.QualityBonusChance.ToList(); foreach (var keyValuePair in probabilitiesMap) { QualityBonusChance[keyValuePair.Key-1] *= keyValuePair.Value+0.01f; } List probabilities = UtilTools.CalculateProbabilities(QualityBonusChance); for (var i = 0; i < Text_qs.Count; i++) { Text_qs[i].text = $"{probabilities[i] * 100:F2}%"; } } public async static CTask OpenPanel(Action> callback) { DivineSenceInfoPanel divineSenceInfoPanel = await UIManager.Instance.LoadAndOpenPanel(null, UILayer.Top); divineSenceInfoPanel.CustomInit(callback); } } }