| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531 | using System.Collections.Generic;using System.Linq;using Core.Language;using Excel2Json;using Fort23.Core;using Fort23.UTool;using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;using UnityEngine;using Utility;namespace Fort23.Mono{    public class XianTuData    {        public int type;        public string name;        public XianTuLogConfig xianTuLogConfig;        public XianTuData fatherXianTuData;    }    [UIBinding(prefab = "XianTuLogPanel")]    public partial class XianTuLogPanel : UIPanel, IScrollListContent    {        private int type = 0;        private int bigMaoXaiXuan = 0;        private int placesXaiXuan = 0;        List<XianTuLogConfig> xianTuLogConfigs = new List<XianTuLogConfig>();        List<XianTuLogConfig> shoeXianTuLogConfigs = new List<XianTuLogConfig>();        List<XianTuSaiXuanWidget> bigMapXianTuSaiWidgets = new List<XianTuSaiXuanWidget>();        List<XianTuSaiXuanWidget> placesXianTuSaiWidgets = new List<XianTuSaiXuanWidget>();        List<XianTuData> xianTuDatas = new List<XianTuData>();        List<int> places = new List<int>();        private EventLogTitleWidget eventLogTitleWidget;        Map<int, List<int>> xianTuMapConfigd = new Map<int, List<int>>();        List<UIComponent> components = new List<UIComponent>();        private void Init()        {            isAddStack = true;        }                public override CTask GetFocus()        {            AppBarPanel.OpenPanel(this);            return base.GetFocus();        }        protected override void AddEvent()        {        }        protected override void DelEvent()        {        }        public override void AddButtonEvent()        {            Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });            Btn_Main.onClick.AddListener(() => { Btn_Main_OnClick(); });            Btn_Event.onClick.AddListener(() => { Btn_Event_OnClick(); });            Btn_XaiXuan.onClick.AddListener(() => { Btn_XaiXuanClose.gameObject.SetActive(true); });            Btn_XaiXuanClose.onClick.AddListener(() => { Btn_XaiXuanClose.gameObject.SetActive(false); });        }        private void Btn_Main_OnClick()        {            if (this.type == 1)                return;            Sv.transform.SetParent(MarskRoot1, false);            Sv.GetComponent<RectTransform>().anchoredPosition = new Vector2(-22.45268f, 90);            eventLogTitleWidget.own.gameObject.SetActive(false);            ChangeList.ShowTargetIndex(0);            Btn_XaiXuanClose.gameObject.SetActive(false);            Btn_XaiXuan.gameObject.SetActive(false);            bigMaoXaiXuan = 0;            placesXaiXuan = 0;            places.Clear();            UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogTitleWidget>();            type = 1;            shoeXianTuLogConfigs = GetTypeXiantuLogConfigs(type);            XaiXuanMap(shoeXianTuLogConfigs);            Content.Init(this, xianTuDatas.Count);        }        private void Btn_Event_OnClick()        {            if (this.type == 2)                return;            Sv.transform.SetParent(MarskRoot, false);            Sv.GetComponent<RectTransform>().anchoredPosition = new Vector2(-22.45268f, 38.7f);            eventLogTitleWidget.own.gameObject.SetActive(true);            ChangeList.ShowTargetIndex(1);            Btn_XaiXuanClose.gameObject.SetActive(false);            Btn_XaiXuan.gameObject.SetActive(true);            bigMaoXaiXuan = 0;            placesXaiXuan = 0;            places.Clear();            UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogTitleWidget>();            components.Clear();            type = 2;            shoeXianTuLogConfigs = GetTypeXiantuLogConfigs(type);            XaiXuanMap(shoeXianTuLogConfigs);            if (xianTuDatas.Count > 0)            {                eventLogTitleWidget.own.SetActive(true);                eventLogTitleWidget.CustomInit(xianTuDatas[0].name);            }            else            {                eventLogTitleWidget.own.SetActive(false);            }            Content.Init(this, xianTuDatas.Count);        }        private void XaiXuanMap(List<XianTuLogConfig> configs)        {            xianTuDatas.Clear();            // List<XianTuLogConfig> showConfigs = new List<XianTuLogConfig>();            Map<int, List<XianTuLogConfig>> xiantuMap = new Map<int, List<XianTuLogConfig>>();            //全部 不筛选            if (bigMaoXaiXuan == 0)            {                if (type == 1)                {                    foreach (var xianTuLogConfig in configs)                    {                        XianTuData xianTuData2 = new XianTuData();                        xianTuData2.type = 2;                        xianTuData2.xianTuLogConfig = xianTuLogConfig;                        xianTuDatas.Add(xianTuData2);                    }                    return;                }                else                {                    foreach (var xianTuLogConfig in configs)                    {                        if (xianTuMapConfigd.ContainsKey(xianTuLogConfig.ID))                        {                            foreach (var i in xianTuMapConfigd[xianTuLogConfig.ID])                            {                                if (!xiantuMap.ContainsKey(i))                                {                                    xiantuMap.Add(i, new List<XianTuLogConfig>());                                }                                xiantuMap[i].Add(xianTuLogConfig);                            }                        }                    }                }            }            else            {                List<EventConfig> eventConfigs;                foreach (var xianTuLogConfig in configs)                {                    if (EventSystemManager.Instance.eventConfigsMap.ContainsKey(xianTuLogConfig.ID))                    {                        eventConfigs = EventSystemManager.Instance.eventConfigsMap[xianTuLogConfig.ID];                        foreach (var eventConfig in eventConfigs)                        {                            if (places.Contains(eventConfig.placeID))                            {                                PlacesConfig placesConfig = ConfigComponent.Instance.Get<PlacesConfig>(eventConfig.placeID);                                if (!xiantuMap.ContainsKey(placesConfig.bigMapID))                                {                                    xiantuMap.Add(placesConfig.bigMapID, new List<XianTuLogConfig>());                                }                                xiantuMap[placesConfig.bigMapID].Add(xianTuLogConfig);                                break;                            }                        }                    }                }            }            foreach (var keyValuePair in xiantuMap)            {                XianTuData xianTuData = new XianTuData();                xianTuData.type = 1;                BigMapConfig bigMapConfig = ConfigComponent.Instance.Get<BigMapConfig>(keyValuePair.Key);                int count = 0;                int allCount = 0;                xianTuDatas.Add(xianTuData);                foreach (var xianTuLogConfig in keyValuePair.Value)                {                    if (EventSystemManager.Instance.eventConfigsMap.ContainsKey(xianTuLogConfig.ID))                    {                        var eventConfigs1 = EventSystemManager.Instance.eventConfigsMap[xianTuLogConfig.ID];                        foreach (var eventConfig in eventConfigs1)                        {                            if (places.Contains(eventConfig.placeID) || places.Count <= 0)                            {                                AccountFileInfo.EventList eventList = AccountFileInfo.Instance.playerData.completeEvents.FirstOrDefault(cl => cl.eventID == eventConfig.ID);                                if (eventList != null)                                {                                    count++;                                }                                allCount++;                            }                        }                    }                    XianTuData xianTuData2 = new XianTuData();                    xianTuData2.type = 2;                    xianTuData2.xianTuLogConfig = xianTuLogConfig;                    xianTuData2.fatherXianTuData = xianTuData;                    xianTuDatas.Add(xianTuData2);                }                xianTuData.name = LanguageManager.Instance.Text(10225, LanguageManager.Instance.Text(bigMapConfig.mapName),count,allCount) ;            }        }        public async override CTask<bool> AsyncInit(object[] uiData)        {            xianTuLogConfigs = ConfigComponent.Instance.GetAll<XianTuLogConfig>().ToList();            List<EventConfig> eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();            foreach (var xianTuLogConfig in xianTuLogConfigs)            {                List<EventConfig> configs = eventConfigs.Where(ec => ec.XiantuID == xianTuLogConfig.ID).ToList();                foreach (var eventConfig in configs)                {                    PlacesConfig placesConfig = ConfigComponent.Instance.Get<PlacesConfig>(eventConfig.placeID);                    if (!xianTuMapConfigd.ContainsKey(xianTuLogConfig.ID))                    {                        xianTuMapConfigd.Add(xianTuLogConfig.ID, new List<int>());                    }                    if (!xianTuMapConfigd[xianTuLogConfig.ID].Contains(placesConfig.bigMapID))                    {                        xianTuMapConfigd[xianTuLogConfig.ID].Add(placesConfig.bigMapID);                    }                }            }            XianTuSaiXuanWidget xianTuSaiXuanWidget1 = await UIManager.Instance.CreateGComponentForObject<XianTuSaiXuanWidget>(XianTuSaiXuanWidget1, null);            xianTuSaiXuanWidget1.CustomInit(1, 0);            xianTuSaiXuanWidget1.OnClick = OnClick;            xianTuSaiXuanWidget1 = await UIManager.Instance.CreateGComponentForObject<XianTuSaiXuanWidget>(XianTuSaiXuanWidget2, null);            xianTuSaiXuanWidget1.CustomInit(2, 0);            xianTuSaiXuanWidget1.OnClick = OnClick;            BigMapConfig[] bigMapConfigs = ConfigComponent.Instance.GetAll<BigMapConfig>();            foreach (var bigMapConfig in bigMapConfigs)            {                XianTuSaiXuanWidget xianTuSaiXuanWidget = await UIManager.Instance.CreateGComponent<XianTuSaiXuanWidget>(null, BigMapConnect);                xianTuSaiXuanWidget.CustomInit(1, bigMapConfig.ID);                xianTuSaiXuanWidget.OnClick = OnClick;                bigMapXianTuSaiWidgets.Add(xianTuSaiXuanWidget);            }            eventLogTitleWidget = await UIManager.Instance.CreateGComponentForObject<EventLogTitleWidget>(EventLogTitleWidgetGam, null);            BigMapList.GetChildObj();            BigMapList.ShowTargetIndex(0);            Btn_Main_OnClick();            return await base.AsyncInit(uiData);        }        private async void OnClick(ItemWidgetBasic obj)        {            XianTuSaiXuanWidget xianTuSaiXuanWidge = obj as XianTuSaiXuanWidget;            if (xianTuSaiXuanWidge.type == 1)            {                bigMaoXaiXuan = xianTuSaiXuanWidge._bigMapConfig.ID;                placesXaiXuan = 0;                foreach (var placesXianTuSaiWidget in placesXianTuSaiWidgets)                {                    UIManager.Instance.DormancyGComponent(placesXianTuSaiWidget);                }                placesXianTuSaiWidgets.Clear();                if (bigMaoXaiXuan == 0)                {                    PlacesRoot.gameObject.SetActive(false);                    BigMapList.ShowTargetIndex(0);                }                else                {                    PlacesRoot.gameObject.SetActive(true);                    foreach (var place in xianTuSaiXuanWidge._bigMapConfig.places)                    {                        XianTuSaiXuanWidget xianTuSaiXuanWidget = await UIManager.Instance.CreateGComponent<XianTuSaiXuanWidget>(null, PlacesConnect);                        xianTuSaiXuanWidget.CustomInit(2, place);                        xianTuSaiXuanWidget.OnClick = OnClick;                        placesXianTuSaiWidgets.Add(xianTuSaiXuanWidget);                    }                    BigMapList.ClickWidget(xianTuSaiXuanWidge.own.GetComponent<UIToggleWidgetBasic>());                    PlacesRootList.GetChildObj();                    PlacesRootList.ShowTargetIndex(0);                }            }            else if (xianTuSaiXuanWidge.type == 2)            {                placesXaiXuan = xianTuSaiXuanWidge._placesConfig.ID;                if (placesXaiXuan == 0)                {                    PlacesRootList.ShowTargetIndex(0);                }                else                {                    PlacesRootList.ClickWidget(xianTuSaiXuanWidge.own.GetComponent<UIToggleWidgetBasic>());                }            }            BigMapConfig bigMapConfig = ConfigComponent.Instance.Get<BigMapConfig>(bigMaoXaiXuan);            PlacesConfig placesConfig = ConfigComponent.Instance.Get<PlacesConfig>(placesXaiXuan);            places.Clear();            if (bigMaoXaiXuan == 0)            {            }            else if (bigMaoXaiXuan != 0 && placesXaiXuan == 0)            {                places.AddRange(bigMapConfig.places);            }            else if (bigMaoXaiXuan != 0 && placesXaiXuan != 0)            {                places.Add(placesConfig.ID);            }            UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogWidget>();            shoeXianTuLogConfigs = GetTypeXiantuLogConfigs(type);            XaiXuanMap(shoeXianTuLogConfigs);            components.Clear();            if (xianTuDatas.Count > 0)            {                eventLogTitleWidget.own.SetActive(true);                eventLogTitleWidget.CustomInit(xianTuDatas[0].name);            }            else            {                eventLogTitleWidget.own.SetActive(false);            }            Content.Init(this, xianTuDatas.Count);        }        private List<XianTuLogConfig> GetTypeXiantuLogConfigs(int type)        {            List<XianTuLogConfig> xianTuLogConfiges = new List<XianTuLogConfig>();            foreach (var xianTuLogConfig in xianTuLogConfigs)            {                if (xianTuLogConfig.EventType == type)                {                    xianTuLogConfiges.Add(xianTuLogConfig);                }            }            return xianTuLogConfiges;        }        public async CTask<IScorllListWidget> GetIScorllListWidget(int index, RectTransform root)        {            if (index < 0 || index >= xianTuDatas.Count)            {                return null;            }            if (type == 1)            {                MainEventLogWidget mainEventLogWidget = await UIManager.Instance.CreateGComponent<MainEventLogWidget>(null, Content.GetComponent<RectTransform>());                mainEventLogWidget.CustomInit(xianTuDatas[index].xianTuLogConfig);                return mainEventLogWidget;            }            else            {                XianTuData xianTuData = xianTuDatas[index];                if (xianTuData.type == 1)                {                    EventLogTitleWidget eventLogTitleWidget = await UIManager.Instance.CreateGComponentForObject<EventLogTitleWidget>(EventLogTitleWidgetGam,null, Content.GetComponent<RectTransform>(),isInstance:true);                    eventLogTitleWidget.CustomInit(xianTuData);                    components.Add(eventLogTitleWidget);                    // xianTuTitleWidgets.Add(eventLogTitleWidget);                    return eventLogTitleWidget;                }                else                {                    EventLogWidget EventLogWidget = await UIManager.Instance.CreateGComponent<EventLogWidget>(null, Content.GetComponent<RectTransform>());                    await EventLogWidget.CustomInit(xianTuData, places);                    components.Add(EventLogWidget);                    return EventLogWidget;                }            }        }        public void HindIScorllListWidget(IScorllListWidget widget)        {            UIManager.Instance.DormancyGComponent(widget as UIComponent);            if (components.Contains(widget as UIComponent))            {                components.Remove(widget as EventLogTitleWidget);            }        }        public async static CTask OpenPanel()        {            XianTuLogPanel xianTuLogPanel = await UIManager.Instance.LoadAndOpenPanel<XianTuLogPanel>(null);        }        List<UIComponent> _components = new List<UIComponent>();        private float maxY;        private float minY;        [CustomMethod(CustomMethodType.Update)]        public void Update()        {            if (type != 2)                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;                    _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)                {                    XianTuData xianTuData = default;                    if (highestItem is EventLogTitleWidget)                    {                        EventLogTitleWidget eventLogTitleWidget = highestItem as EventLogTitleWidget;                        xianTuData = eventLogTitleWidget.xiantuData;                    }                    else if (highestItem is EventLogWidget)                    {                        EventLogWidget eventLogWidget = highestItem as EventLogWidget;                        xianTuData = eventLogWidget.XianTuData.fatherXianTuData;                    }                    eventLogTitleWidget.CustomInit(xianTuData.name);                }            }        }        public async override CTask Close()        {            UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogWidget>();            UIManager.Instance.DormancyAllGComponent<EventLogTitleWidget>();            components.Clear();            type = 0;            foreach (var bigMapXianTuSaiWidget in bigMapXianTuSaiWidgets)            {                UIManager.Instance.DormancyGComponent(bigMapXianTuSaiWidget);            }            bigMapXianTuSaiWidgets.Clear();            foreach (var placesXianTuSaiWidget in placesXianTuSaiWidgets)            {                UIManager.Instance.DormancyGComponent(placesXianTuSaiWidget);            }            placesXianTuSaiWidgets.Clear();            Btn_XaiXuanClose.gameObject.SetActive(false);            Btn_XaiXuan.gameObject.SetActive(false);            bigMaoXaiXuan = 0;            placesXaiXuan = 0;            places.Clear();            await base.Close();        }    }}
 |