using System.Collections.Generic; using System.Linq; using Core.Audio; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Bag; using UnityEngine; namespace Fort23.Mono { [UIBinding(prefab = "DaoYouInfoPanel")] public partial class DaoYouInfoPanel : UIPanel { private AccountFileInfo.DaoYouData daoYouData; private DaoyouModelConfig _daoyouModelConfig; private ItemInfo currentSelectWidgetItem; List widgetItems = new List(); List giveWidgetItems = new List(); List _daoYouLevelWidgets = new List(); List _daoYouIdleEarningsWidgets = new List(); List daoYouaaFfixWidgets = new List(); private TimerEntity _timerEntity = null; private DaoyouGiftConfig[] daoyouGiftConfigs; private void Init() { IsShowAppBar = true; isAddStack = true; } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_CiZuiHelp.onClick.AddListener(() => { HelpTipPanel.OpenTipMessagePanel(10791); }); Btn_SongLiHelp.onClick.AddListener(() => { HelpTipPanel.OpenTipMessagePanel(10790); }); Btn_Emotion.onClick.AddListener((() => { ShowMessage(); })); Btn_Facorability.onClick.AddListener(() => { Info.SetActive(false); Facorability.SetActive(true); }); Btn_InfoMation.onClick.AddListener(() => { Info.SetActive(true); Facorability.SetActive(false); }); Btn_SendGift.onClick.AddListener(async () => { if (daoYouData.favorabilityLv >= _daoYouLevelWidgets.Count) { TipMessagePanel.OpenTipMessagePanel("道友等级已到最高"); return; } AppBarPanel.ClosePanel(); await UpdateGiveGiftRoot(); GiveGite.gameObject.SetActive(true); }); Btn_Love.onClick.AddListener(() => { ClosePoolGive(); saiXuanType = 2; List showItems = SaiXuan(saiXuanType); CreatItem(showItems); }); Btn_Tongyong.onClick.AddListener(() => { ClosePoolGive(); saiXuanType = 1; List showItems = SaiXuan(saiXuanType); CreatItem(showItems); }); Btn_Eveent.onClick.AddListener(() => { TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(10697, daoYouData.favorabilityLv)); // if (daoYouData.favorabilityLv >= _daoyouModelConfig.EmotionLvforQuest // && !EventSystemManager.Instance.BagIsEvent(_daoyouModelConfig.QuestID) // && EventSystemManager.Instance.BagIsEvent(_daoyouModelConfig.EventCompleteforQuest) // && !EventSystemManager.Instance.IsEventCompleted(_daoyouModelConfig.QuestID)) // { // AccountFileInfo.EventList eventList = // EventSystemManager.Instance.AddEvent(_daoyouModelConfig.QuestID); // AccountFileInfo.Instance.playerData.eventList.Add(eventList); // AccountFileInfo.Instance.SavePlayerData(); // EventSystemManager.Instance.TriggerEvent(eventList); // Btn_Eveent.gameObject.SetActive(false); // } }); Btn_Back.onClick.AddListener(() => { ClosePoolGive(); currentSelectWidgetItem = null; GiveGite.gameObject.SetActive(false); AppBarPanel.OpenPanel(this); }); Btn_Add.onClick.AddListener(Add); Btn_Reduce.onClick.AddListener(Reduce); Btn_Max.onClick.AddListener(() => { if (widgetItem1 == null) return; Slider_Give.value = (int)widgetItem1.itemInfo.count.Value; }); Slider_Give.onValueChanged.AddListener((i) => { count = (int)i; UpdateGiveItemCount(); }); Btn_Give.onClick.AddListener(() => { if (widgetItem1 == null) { return; } //加好感 if (widgetItem1 != null && daoyouGiftConfig.ID != 0) { PlayerManager.Instance.BagController.DeductItem(daoyouGiftConfig.ItemID, count); emotionConfig emotionConfig = ConfigComponent.Instance.Get(daoYouData.emotion); if (_daoyouModelConfig.PreferGiftID.Contains(daoyouGiftConfig.ItemID) && !daoYouData.loveIds.Contains(daoyouGiftConfig.ItemID)) { daoYouData.loveIds.Add(daoyouGiftConfig.ItemID); } //加经验 for (int i = 0; i < count; i++) { int bl = Random.Range(emotionConfig.hanganUpRate[0], emotionConfig.hanganUpRate[1] + 1); //喜好礼物翻倍 if (_daoyouModelConfig.PreferGiftID.Contains(daoyouGiftConfig.ItemID)) { daoYouData.exp += (daoyouGiftConfig.emotionValue * bl * 0.001f * PlayerManager.Instance.gameConstantConfig.daolvfavoratePara * 0.01f); } else { daoYouData.exp += (daoyouGiftConfig.emotionValue * bl * 0.001f); } } DaoyouLevelupConfig[] configs = ConfigComponent.Instance.GetAll(); for (var i = daoYouData.favorabilityLv; i < configs.Length; i++) { if (daoYouData.exp >= configs[i].exp) { daoYouData.exp -= configs[i].exp; daoYouData.favorabilityLv++; } else { break; } } AudioManager.Instance.PlayAudio("ui_shiyonghuode"); AccountFileInfo.Instance.SavePlayerData(); } //加心情 else { if (daoYouData.emotionValue >= 100) { TipMessagePanel.OpenTipMessagePanel("心情已经到最高"); return; } PlayerManager.Instance.BagController.DeductItem(widgetItem1.itemInfo.itemID, count); daoYouData.emotionValue += widgetItem1.itemInfo.config.associateVlaue[0]; int emotionId = 4 - (int)(daoYouData.emotionValue / (100 / (float)3)); if (emotionId > 3) emotionId = 3; daoYouData.emotion = emotionId; emotionConfig emotionConfig = ConfigComponent.Instance.Get(daoYouData.emotion); Text_message.text = LanguageManager.Instance.Text(emotionConfig.des); AccountFileInfo.Instance.SavePlayerData(); } UpdateUI(); UpdateGiveGiftRoot(); }); } public async override CTask AsyncInit(object[] uiData) { daoYouData = uiData[0] as AccountFileInfo.DaoYouData; _daoyouModelConfig = ConfigComponent.Instance.Get(daoYouData.id); daoyouGiftConfigs = ConfigComponent.Instance.GetAll(); emotionConfig emotionConfig = ConfigComponent.Instance.Get(daoYouData.emotion); Text_message.text = LanguageManager.Instance.Text(emotionConfig.des); ShowMessage(); Icon_bodyIcon.icon_name = _daoyouModelConfig.bodyIcon; Icon_bodyIcon.GetComponent().anchoredPosition = new Vector2(_daoyouModelConfig.bodyPos[0], _daoyouModelConfig.bodyPos[1]); await UpdateUI(); return await base.AsyncInit(uiData); } private void ShowMessage() { dotPoint.SetActive(true); _timerEntity?.Dispose(); _timerEntity = null; _timerEntity = TimerComponent.Instance.AddTimer(5000, () => { dotPoint.SetActive(false); _timerEntity?.Dispose(); _timerEntity = null; }); } public async CTask UpdateUI() { foreach (var widgetItem in widgetItems) { UIManager.Instance.DormancyGComponent(widgetItem); } widgetItems.Clear(); foreach (var daoYouLevelWidget in _daoYouLevelWidgets) { UIManager.Instance.DormancyGComponent(daoYouLevelWidget); } _daoYouLevelWidgets.Clear(); foreach (var daoYouIdleEarningsWidget in _daoYouIdleEarningsWidgets) { UIManager.Instance.DormancyGComponent(daoYouIdleEarningsWidget); } _daoYouIdleEarningsWidgets.Clear(); foreach (var daoYouaaFfixWidget in daoYouaaFfixWidgets) { UIManager.Instance.DormancyGComponent(daoYouaaFfixWidget); } daoYouaaFfixWidgets.Clear(); if (daoYouData.favorabilityLv != -1 && !EventSystemManager.Instance.IsEventCompleted(_daoyouModelConfig.QuestID)) { Btn_Eveent.gameObject.SetActive(true); } else { Btn_Eveent.gameObject.SetActive(false); } Slider_Emotion.fillAmount = daoYouData.emotionValue / 100f; HeroPowerUpConfig heroPowerUpConfig = ConfigComponent.Instance.Get(PlayerManager.Instance.GetDaoYouLevel(daoYouData)); Text_JingJie.text = LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[0]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[1]) + LanguageManager.Instance.Text(heroPowerUpConfig.jingjieLanIDs[2]); Text_Name.text = LanguageManager.Instance.Text(_daoyouModelConfig.name); int index = 0; for (var i = 0; i < _daoyouModelConfig.desUnlockLv.Length; i++) { if (daoYouData.favorabilityLv >= _daoyouModelConfig.desUnlockLv[i]) { index = i; } } Text_Desc.text = LanguageManager.Instance.Text(_daoyouModelConfig.des[index]); // guajibuff guajibuff = ConfigComponent.Instance.Get(_daoyouModelConfig.guajiBuffID[0]); // DaoyouLevelupConfig daoyouLevelupConfig1 = ConfigComponent.Instance.Get(daoYouData.favorabilityLv); Text_GiftGailv.text = LanguageManager.Instance.Text(10278, PlayerManager.Instance.GetBl(daoYouData, _daoyouModelConfig.guajiBuffID[0])); // "送礼概率:" + PlayerManager.Instance.GetBl(daoYouData, _daoyouModelConfig.guajiBuffID[0]) + "%"; for (var i = 1; i < _daoyouModelConfig.guajiBuffID.Length; i++) { DaoYouIdleEarningsWidget daoYouIdleEarningsWidget = await UIManager.Instance.CreateGComponent(null, GuajiContent); daoYouIdleEarningsWidget.CustomInit(daoYouData, _daoyouModelConfig.guajiBuffID[i]); _daoYouIdleEarningsWidgets.Add(daoYouIdleEarningsWidget); } DaoyouLevelupConfig currentDaoyouLevelupConfig = ConfigComponent.Instance.Get(daoYouData.favorabilityLv); Text_CurrentName.text = LanguageManager.Instance.Text(currentDaoyouLevelupConfig.name); Text_CurrentLevel.text = daoYouData.favorabilityLv.ToString(); Slider_LeveUp.maxValue = currentDaoyouLevelupConfig.exp; DaoyouLevelupConfig[] configs = ConfigComponent.Instance.GetAll(); if (daoYouData.favorabilityLv >= configs.Length) { Text_Exp.text = $"{daoYouData.exp.ToString("0.0")}/MAX"; } else { Text_Exp.text = $"{daoYouData.exp.ToString("0.0")}/{currentDaoyouLevelupConfig.exp}"; } Slider_LeveUp.value = daoYouData.exp; CTaskAwaitBuffer taskAwaitBuffer = new CTaskAwaitBuffer(); CTaskAwaitBuffer cts = null; if (_daoyouModelConfig.PreferGiftID != null) { cts = new CTaskAwaitBuffer(); foreach (var i in _daoyouModelConfig.PreferGiftID) { cts.AddTask(UIManager.Instance.CreateGComponent(null, LoveItemContent)); } taskAwaitBuffer.AddTask(cts.WaitAll()); } CTaskAwaitBuffer cts2 = null; if (_daoyouModelConfig.daolvSkillID != null) { cts2 = new CTaskAwaitBuffer(); for (var i = 0; i < _daoyouModelConfig.daolvSkillID.Length; i++) { cts2.AddTask(UIManager.Instance.CreateGComponent(null, DaoLvContent)); } taskAwaitBuffer.AddTask(cts2.WaitAll()); } CTaskAwaitBuffer cts1 = new CTaskAwaitBuffer(); foreach (var daoyouLevelupConfig in configs) { cts1.AddTask(UIManager.Instance.CreateGComponent(null, DaoYouLevelWidgetContent)); } taskAwaitBuffer.AddTask(cts1.WaitAll()); await taskAwaitBuffer.WaitAll(); if (_daoyouModelConfig.PreferGiftID != null) { widgetItems = cts.GetResultsLists(); for (var i = 0; i < _daoyouModelConfig.PreferGiftID.Length; i++) { if (_daoyouModelConfig.shownPreferGiftID.Contains(_daoyouModelConfig.PreferGiftID[i]) || (daoYouData != null && daoYouData.loveIds.Contains(_daoyouModelConfig.PreferGiftID[i]))) { widgetItems[i].InitWidget(new ItemInfo(_daoyouModelConfig.PreferGiftID[i], 0)); } else { widgetItems[i].ShowWenhao(); } } } if (_daoyouModelConfig.daolvSkillID != null) { daoYouaaFfixWidgets = cts2.GetResultsLists(); for (var i = 0; i < _daoyouModelConfig.daolvSkillID.Length; i++) { daoYouaaFfixWidgets[i].CustomInit(_daoyouModelConfig.daolvSkillID[i]); } } _daoYouLevelWidgets = cts1.GetResultsLists(); for (var i = 0; i < configs.Length; i++) { _daoYouLevelWidgets[i].CustomInit(daoYouData, configs[i].ID); } taskAwaitBuffer?.Dispose(); cts?.Dispose(); cts1?.Dispose(); cts2?.Dispose(); } List allItems = new List(); private int saiXuanType = 1; public async CTask UpdateGiveGiftRoot() { ClosePoolGive(); allItems.Clear(); foreach (var daoyouGiftConfig in daoyouGiftConfigs) { if (PlayerManager.Instance.BagController.GetItemCount(daoyouGiftConfig.ItemID) > 0) { ItemInfo itemInfo = PlayerManager.Instance.BagController.GetItemInfo(daoyouGiftConfig.ItemID); allItems.Add(itemInfo); } } foreach (var keyValuePair in PlayerManager.Instance.BagController.allBagDic) { if (keyValuePair.Value.config.itemTag == 7 && !allItems.Contains(keyValuePair.Value)) { allItems.Add(keyValuePair.Value); } } List showItems = SaiXuan(saiXuanType); CreatItem(showItems); } private List SaiXuan(int type) { List shownItems = new List(); //全部 if (type == 1) { shownItems = allItems.ToList(); } //喜欢 else if (type == 2) { foreach (var itemInfo in allItems) { if (_daoyouModelConfig.shownPreferGiftID.Contains(itemInfo.itemID) || (daoYouData != null && daoYouData.loveIds.Contains(itemInfo.itemID))) { shownItems.Add(itemInfo); } } } return shownItems; } private async CTask CreatItem(List shownItems) { using (CTaskAwaitBuffer cts = new CTaskAwaitBuffer()) { foreach (var itemInfo in shownItems) { cts.AddTask(UIManager.Instance.CreateGComponent(null, GiveGiftContent)); } giveWidgetItems = await cts.WaitAll(); } for (var i = 0; i < shownItems.Count; i++) { giveWidgetItems[i].InitWidget(shownItems[i], false); giveWidgetItems[i].OnClick = OnClick; } if (giveWidgetItems.Count > 0) { if (currentSelectWidgetItem != null) { bool isHave = false; foreach (var giveWidgetItem in giveWidgetItems) { if (giveWidgetItem.itemInfo == currentSelectWidgetItem) { giveWidgetItem.OnPointerClick(); isHave = true; break; } } if(!isHave) giveWidgetItems[0].OnPointerClick(); } else { giveWidgetItems[0].OnPointerClick(); } } } DaoyouGiftConfig daoyouGiftConfig = default; private int count = 1; private WidgetItem widgetItem1; private async void OnClick(ItemWidgetBasic obj) { WidgetItem widgetItem = obj as WidgetItem; currentSelectWidgetItem = widgetItem.itemInfo; if (widgetItem1 == null) { widgetItem1 = await UIManager.Instance.CreateGComponent(null, WidgetItemRoot); widgetItem1.transform.GetComponent().anchoredPosition = Vector2.zero; } widgetItem1.InitWidget(widgetItem.itemInfo); daoyouGiftConfig = default; foreach (var giftConfig in daoyouGiftConfigs) { if (giftConfig.ItemID == widgetItem.itemInfo.itemID) { daoyouGiftConfig = giftConfig; break; } } Slider_Give.maxValue = widgetItem.itemInfo.count.Value; Slider_Give.minValue = 1; UpdateGiveItemCount(); } private void Reduce() { if (widgetItem1 == null) return; count--; if (count < 1) { count = 1; } Slider_Give.value = count; } private void Add() { if (widgetItem1 == null) return; count++; if (count > widgetItem1.itemInfo.count.Value) { count = (int)widgetItem1.itemInfo.count.Value; } Slider_Give.value = count; } private void UpdateGiveItemCount() { emotionConfig emotionConfig = ConfigComponent.Instance.Get(daoYouData.emotion); Text_Count.text = $"当前选择数量{count}"; if (widgetItem1 != null && daoyouGiftConfig.ID != 0) { Text_GiveGiftDesc.text = LanguageManager.Instance.Text(10289, daoyouGiftConfig.emotionValue, daoyouGiftConfig.emotionValue * emotionConfig.hanganUpRate[0] * 0.001, daoyouGiftConfig.emotionValue * emotionConfig.hanganUpRate[1] * 0.001); } else if (widgetItem1 != null && daoyouGiftConfig.ID == 0) { Text_GiveGiftDesc.text = LanguageManager.Instance.Text(10290, widgetItem1.itemInfo.config.associateVlaue[0]); } } public override CTask GetFocus() { AppBarPanel.OpenPanel(this); return base.GetFocus(); } public static async CTask OpenPanel(AccountFileInfo.DaoYouData daoYouData) { await UIManager.Instance.LoadAndOpenPanel(null, uiData: new[] { daoYouData }); } private void ClosePoolGive() { count = 0; daoyouGiftConfig = default; Slider_Give.value = 0; Slider_Give.minValue = 0; Slider_Give.maxValue = 0; foreach (var giveWidgetItem in giveWidgetItems) { UIManager.Instance.DormancyGComponent(giveWidgetItem); } giveWidgetItems.Clear(); UIManager.Instance.DormancyGComponent(widgetItem1); widgetItem1 = null; } public async override CTask Close() { daoyouGiftConfigs = null; foreach (var widgetItem in widgetItems) { UIManager.Instance.DormancyGComponent(widgetItem); } widgetItems.Clear(); foreach (var daoYouLevelWidget in _daoYouLevelWidgets) { UIManager.Instance.DormancyGComponent(daoYouLevelWidget); } _daoYouLevelWidgets.Clear(); foreach (var daoYouaaFfixWidget in daoYouaaFfixWidgets) { UIManager.Instance.DormancyGComponent(daoYouaaFfixWidget); } daoYouaaFfixWidgets.Clear(); foreach (var daoYouIdleEarningsWidget in _daoYouIdleEarningsWidgets) { UIManager.Instance.DormancyGComponent(daoYouIdleEarningsWidget); } _daoYouIdleEarningsWidgets.Clear(); allItems.Clear(); saiXuanType = 1; ClosePoolGive(); await base.Close(); } } }