using System.Collections.Generic; using System.Linq; using Core.Language; using Excel2Json; using Fort23.Core; using Fort23.UTool; using UnityEngine; using Utility; namespace Fort23.Mono { public class XianTuLogInfoData { /// /// 1.大标题 2.标题 3.描述 /// public int type; public string message; public int id; } [UIBinding(prefab = "XianTuLogInfoPanel")] public partial class XianTuLogInfoPanel : UIPanel, IScrollListContent { private EventLogTitleWidget eventLogTitleWidget; private XianTuLogConfig _xianTuLogConfig; List showXianTuLogInfoData = new List(); List components = new List(); // List titleWidgets = new List(); private int type; private void Init() { } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); Sr.onValueChanged.AddListener(OnValueChanged); } private void OnValueChanged(Vector2 arg0) { UpdateTitleWidget(); } public async void CustomInit(int type, int id) { this.type = type; eventLogTitleWidget = await UIManager.Instance.CreateGComponentForObject(EventLogTitleWidget, null); Map> eventConfigMap = new Map>(); showXianTuLogInfoData.Clear(); _xianTuLogConfig = ConfigComponent.Instance.Get(id); var configs = EventSystemManager.Instance.eventConfigsMap[_xianTuLogConfig.ID]; foreach (var @c in configs) { EventConfig eventConfig = c; if (!eventConfigMap.ContainsKey(eventConfig.placeID)) { eventConfigMap.Add(eventConfig.placeID, new List()); } eventConfigMap[eventConfig.placeID].Add(eventConfig); } foreach (var keyValuePair in eventConfigMap) { if (type == 1) { PlacesConfig placesConfig = ConfigComponent.Instance.Get(keyValuePair.Key); XianTuLogInfoData xianTuLogInfoData3 = new XianTuLogInfoData(); xianTuLogInfoData3.type = 1; xianTuLogInfoData3.id = keyValuePair.Value[0].ID; xianTuLogInfoData3.message = LanguageManager.Instance.Text(placesConfig.placeName); showXianTuLogInfoData.Add(xianTuLogInfoData3); } foreach (var eventConfig in keyValuePair.Value) { AccountFileInfo.EventList eventList = AccountFileInfo.Instance.playerData.completeEvents.FirstOrDefault(cl => cl.eventID == eventConfig.ID); if (eventList == null) { //主线没有做不显示问好 if (_xianTuLogConfig.EventType == 2) { XianTuLogInfoData xianTuLogInfoData = new XianTuLogInfoData(); xianTuLogInfoData.type = 2; xianTuLogInfoData.id = eventConfig.ID; xianTuLogInfoData.message = "????????"; XianTuLogInfoData xianTuLogInfoData1 = new XianTuLogInfoData(); xianTuLogInfoData1.type = 3; xianTuLogInfoData1.id = eventConfig.ID; xianTuLogInfoData1.message = "?????????????????????????????????"; showXianTuLogInfoData.Add(xianTuLogInfoData); showXianTuLogInfoData.Add(xianTuLogInfoData1); } } else { XianTuLogInfoData xianTuLogInfoData = new XianTuLogInfoData(); xianTuLogInfoData.type = 2; xianTuLogInfoData.id = eventConfig.ID; xianTuLogInfoData.message = LanguageManager.Instance.Text(eventConfig.EventName); showXianTuLogInfoData.Add(xianTuLogInfoData); foreach (var eventListSelectEventLinkId in eventList.selectEventLinkIds) { EventLinkConfig eventLinkConfig = ConfigComponent.Instance.Get(eventListSelectEventLinkId); if (eventLinkConfig.LanID != null) { foreach (var i in eventLinkConfig.LanID) { XianTuLogInfoData xianTuLogInfoData1 = new XianTuLogInfoData(); xianTuLogInfoData1.type = 3; xianTuLogInfoData1.id = eventConfig.ID; if (eventLinkConfig.NPCID != 0) { xianTuLogInfoData1.message = $"{LanguageManager.Instance.Text(i)}"; } else { xianTuLogInfoData1.message = $"{LanguageManager.Instance.Text(i)}"; } showXianTuLogInfoData.Add(xianTuLogInfoData1); } } } } } } if (type == 1) { // eventLogTitleWidget.SetActive(true); Sv.SetParent(Marsk1, false); eventLogTitleWidget.CustomInit(showXianTuLogInfoData[0].message); eventLogTitleWidget.own.SetActive(true); } else if (type == 2) { Sv.SetParent(Marsk2, false); eventLogTitleWidget.own.SetActive(false); } Content.Init(this, showXianTuLogInfoData.Count); } public async CTask GetIScorllListWidget(int index, RectTransform root) { if (index < 0 || index >= showXianTuLogInfoData.Count) { return null; } XianTuLogInfoData xianTuLogInfoData = showXianTuLogInfoData[index]; if (xianTuLogInfoData.type == 1) { EventLogTitleWidget eventLogTitleWidget = await UIManager.Instance.CreateGComponent(null, ContentRoot); eventLogTitleWidget.CustomInit(xianTuLogInfoData); // titleWidgets.Add(eventLogTitleWidget); components.Add(eventLogTitleWidget); return eventLogTitleWidget; } else if (xianTuLogInfoData.type == 2) { EventLogInfoWidget eventLogInfoWidget = await UIManager.Instance.CreateGComponent(null, ContentRoot); eventLogInfoWidget.CustomInit(xianTuLogInfoData); components.Add(eventLogInfoWidget); return eventLogInfoWidget; } else if (xianTuLogInfoData.type == 3) { EventLogMessageWidget eventLogInfoWidget = await UIManager.Instance.CreateGComponent(null, ContentRoot); eventLogInfoWidget.CustomInit(xianTuLogInfoData); components.Add(eventLogInfoWidget); return eventLogInfoWidget; } return null; } public void HindIScorllListWidget(IScorllListWidget widget) { UIManager.Instance.DormancyGComponent(widget as UIComponent); if (components.Contains(widget as UIComponent)) { components.Remove(widget as UIComponent); } // if (titleWidgets.Contains(widget as EventLogTitleWidget)) // { // titleWidgets.Remove(widget as EventLogTitleWidget); // } } public override void Close() { showXianTuLogInfoData.Clear(); foreach (var uiComponent in components) { UIManager.Instance.DormancyGComponent(uiComponent); } components.Clear(); // titleWidgets.Clear(); base.Close(); } List _components = new List(); private float maxY; private float minY; public void UpdateTitleWidget() { if (type != 1) return; UIComponent highestItem = null; maxY = float.MinValue; minY = float.MaxValue; _components.Clear(); foreach (var xianTuTitleWidget in components) { float itemY = xianTuTitleWidget.own.transform.position.y; // 使用世界坐标的 Y 值 if (itemY > eventLogTitleWidget.own.transform.position.y) { maxY = itemY; // highestItem = xianTuTitleWidget; _components.Add(xianTuTitleWidget); } } foreach (var uiComponent in _components) { float itemY = uiComponent.own.transform.position.y; // 使用世界坐标的 Y 值 if (itemY < minY) { minY = itemY; highestItem = uiComponent; } } if (highestItem != null) { float outsideY = eventLogTitleWidget.own.transform.position.y; if (maxY > outsideY) { EventConfig eventConfig = default; if (highestItem is EventLogTitleWidget) { EventLogTitleWidget eventLogTitleWidget = highestItem as EventLogTitleWidget; eventConfig = ConfigComponent.Instance.Get(eventLogTitleWidget.data.id); } else if (highestItem is EventLogInfoWidget) { EventLogInfoWidget eventLogTitleWidget = highestItem as EventLogInfoWidget; eventConfig = ConfigComponent.Instance.Get(eventLogTitleWidget.data.id); } else if (highestItem is EventLogMessageWidget) { EventLogMessageWidget eventLogTitleWidget = highestItem as EventLogMessageWidget; eventConfig = ConfigComponent.Instance.Get(eventLogTitleWidget.data.id); } PlacesConfig placesConfig = ConfigComponent.Instance.Get(eventConfig.placeID); eventLogTitleWidget.CustomInit(LanguageManager.Instance.Text(placesConfig.placeName)); } } } public async static CTask OpenPanel(int type, int id) { XianTuLogInfoPanel xianTuLogInfoPanel = await UIManager.Instance.LoadAndOpenPanel(null); xianTuLogInfoPanel.CustomInit(type, id); } } }