XianTuLogPanel.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Core.Language;
  4. using Excel2Json;
  5. using Fort23.Core;
  6. using Fort23.UTool;
  7. using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
  8. using UnityEngine;
  9. using Utility;
  10. namespace Fort23.Mono
  11. {
  12. public class XianTuData
  13. {
  14. public int type;
  15. public string name;
  16. public XianTuLogConfig xianTuLogConfig;
  17. }
  18. [UIBinding(prefab = "XianTuLogPanel")]
  19. public partial class XianTuLogPanel : UIPanel, IScrollListContent
  20. {
  21. private int type = 0;
  22. private int bigMaoXaiXuan = 0;
  23. private int placesXaiXuan = 0;
  24. List<XianTuLogConfig> xianTuLogConfigs = new List<XianTuLogConfig>();
  25. List<XianTuLogConfig> shoeXianTuLogConfigs = new List<XianTuLogConfig>();
  26. List<XianTuSaiXuanWidget> bigMapXianTuSaiWidgets = new List<XianTuSaiXuanWidget>();
  27. List<XianTuSaiXuanWidget> placesXianTuSaiWidgets = new List<XianTuSaiXuanWidget>();
  28. List<XianTuData> xianTuDatas = new List<XianTuData>();
  29. List<EventLogTitleWidget> xianTuTitleWidgets = new List<EventLogTitleWidget>();
  30. List<int> places = new List<int>();
  31. private EventLogTitleWidget eventLogTitleWidget;
  32. Map<int, List<int>> xianTuMapConfigd = new Map<int, List<int>>();
  33. private void Init()
  34. {
  35. isAddStack = true;
  36. IsShowAppBar = false;
  37. }
  38. protected override void AddEvent()
  39. {
  40. }
  41. protected override void DelEvent()
  42. {
  43. }
  44. public override void AddButtonEvent()
  45. {
  46. Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  47. Btn_Main.onClick.AddListener(() => { Btn_Main_OnClick(); });
  48. Btn_Event.onClick.AddListener(() => { Btn_Event_OnClick(); });
  49. Btn_XaiXuan.onClick.AddListener(() => { Btn_XaiXuanClose.gameObject.SetActive(true); });
  50. Btn_XaiXuanClose.onClick.AddListener(() => { Btn_XaiXuanClose.gameObject.SetActive(false); });
  51. }
  52. private void Btn_Main_OnClick()
  53. {
  54. if (this.type == 1)
  55. return;
  56. Sv.transform.SetParent(MarskRoot1, false);
  57. eventLogTitleWidget.own.gameObject.SetActive(false);
  58. ChangeList.ShowTargetIndex(0);
  59. Btn_XaiXuanClose.gameObject.SetActive(false);
  60. Btn_XaiXuan.gameObject.SetActive(false);
  61. bigMaoXaiXuan = 0;
  62. placesXaiXuan = 0;
  63. places.Clear();
  64. UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();
  65. UIManager.Instance.DormancyAllGComponent<EventLogWidget>();
  66. UIManager.Instance.DormancyAllGComponent<EventLogTitleWidget>();
  67. xianTuTitleWidgets.Clear();
  68. type = 1;
  69. shoeXianTuLogConfigs = GetTypeXiantuLogConfigs(type);
  70. XaiXuanMap(shoeXianTuLogConfigs);
  71. Content.Init(this, xianTuDatas.Count);
  72. }
  73. private void Btn_Event_OnClick()
  74. {
  75. if (this.type == 2)
  76. return;
  77. Sv.transform.SetParent(MarskRoot, false);
  78. eventLogTitleWidget.own.gameObject.SetActive(true);
  79. ChangeList.ShowTargetIndex(1);
  80. Btn_XaiXuanClose.gameObject.SetActive(false);
  81. Btn_XaiXuan.gameObject.SetActive(true);
  82. bigMaoXaiXuan = 0;
  83. placesXaiXuan = 0;
  84. places.Clear();
  85. UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();
  86. UIManager.Instance.DormancyAllGComponent<EventLogWidget>();
  87. UIManager.Instance.DormancyAllGComponent<EventLogTitleWidget>();
  88. xianTuTitleWidgets.Clear();
  89. type = 2;
  90. shoeXianTuLogConfigs = GetTypeXiantuLogConfigs(type);
  91. XaiXuanMap(shoeXianTuLogConfigs);
  92. if (xianTuDatas.Count > 0)
  93. {
  94. eventLogTitleWidget.own.SetActive(true);
  95. eventLogTitleWidget.CustomInit(xianTuDatas[0].name);
  96. }
  97. else
  98. {
  99. eventLogTitleWidget.own.SetActive(false);
  100. }
  101. Content.Init(this, xianTuDatas.Count);
  102. }
  103. private void XaiXuanMap(List<XianTuLogConfig> configs)
  104. {
  105. xianTuDatas.Clear();
  106. // List<XianTuLogConfig> showConfigs = new List<XianTuLogConfig>();
  107. Map<int, List<XianTuLogConfig>> xiantuMap = new Map<int, List<XianTuLogConfig>>();
  108. //全部 不筛选
  109. if (bigMaoXaiXuan == 0)
  110. {
  111. if (type == 1)
  112. {
  113. foreach (var xianTuLogConfig in configs)
  114. {
  115. XianTuData xianTuData2 = new XianTuData();
  116. xianTuData2.type = 2;
  117. xianTuData2.xianTuLogConfig = xianTuLogConfig;
  118. xianTuDatas.Add(xianTuData2);
  119. }
  120. return;
  121. }
  122. else
  123. {
  124. foreach (var xianTuLogConfig in configs)
  125. {
  126. if (xianTuMapConfigd.ContainsKey(xianTuLogConfig.ID))
  127. {
  128. foreach (var i in xianTuMapConfigd[xianTuLogConfig.ID])
  129. {
  130. if (!xiantuMap.ContainsKey(i))
  131. {
  132. xiantuMap.Add(i, new List<XianTuLogConfig>());
  133. }
  134. xiantuMap[i].Add(xianTuLogConfig);
  135. }
  136. }
  137. }
  138. }
  139. }
  140. else
  141. {
  142. List<EventConfig> eventConfigs;
  143. foreach (var xianTuLogConfig in configs)
  144. {
  145. if (EventSystemManager.Instance.eventConfigsMap.ContainsKey(xianTuLogConfig.ID))
  146. {
  147. eventConfigs = EventSystemManager.Instance.eventConfigsMap[xianTuLogConfig.ID];
  148. foreach (var eventConfig in eventConfigs)
  149. {
  150. if (places.Contains(eventConfig.placeID))
  151. {
  152. PlacesConfig placesConfig = ConfigComponent.Instance.Get<PlacesConfig>(eventConfig.placeID);
  153. if (!xiantuMap.ContainsKey(placesConfig.bigMapID))
  154. {
  155. xiantuMap.Add(placesConfig.bigMapID, new List<XianTuLogConfig>());
  156. }
  157. xiantuMap[placesConfig.bigMapID].Add(xianTuLogConfig);
  158. break;
  159. }
  160. }
  161. }
  162. }
  163. }
  164. foreach (var keyValuePair in xiantuMap)
  165. {
  166. XianTuData xianTuData = new XianTuData();
  167. xianTuData.type = 1;
  168. BigMapConfig bigMapConfig = ConfigComponent.Instance.Get<BigMapConfig>(keyValuePair.Key);
  169. int count = 0;
  170. int allCount = 0;
  171. xianTuDatas.Add(xianTuData);
  172. foreach (var xianTuLogConfig in keyValuePair.Value)
  173. {
  174. if (EventSystemManager.Instance.eventConfigsMap.ContainsKey(xianTuLogConfig.ID))
  175. {
  176. var eventConfigs1 = EventSystemManager.Instance.eventConfigsMap[xianTuLogConfig.ID];
  177. foreach (var eventConfig in eventConfigs1)
  178. {
  179. if (places.Contains(eventConfig.placeID) || places.Count <= 0)
  180. {
  181. AccountFileInfo.EventList eventList = AccountFileInfo.Instance.playerData.completeEvents.FirstOrDefault(cl => cl.eventID == eventConfig.ID);
  182. if (eventList != null)
  183. {
  184. count++;
  185. }
  186. allCount++;
  187. }
  188. }
  189. }
  190. XianTuData xianTuData2 = new XianTuData();
  191. xianTuData2.type = 2;
  192. xianTuData2.xianTuLogConfig = xianTuLogConfig;
  193. xianTuDatas.Add(xianTuData2);
  194. }
  195. xianTuData.name = LanguageManager.Instance.Text(bigMapConfig.mapName) + " (" + count + "/" + allCount + ")";
  196. }
  197. }
  198. public async override CTask<bool> AsyncInit(object[] uiData)
  199. {
  200. xianTuLogConfigs = ConfigComponent.Instance.GetAll<XianTuLogConfig>().ToList();
  201. List<EventConfig> eventConfigs = ConfigComponent.Instance.GetAll<EventConfig>().ToList();
  202. foreach (var xianTuLogConfig in xianTuLogConfigs)
  203. {
  204. List<EventConfig> configs = eventConfigs.Where(ec => ec.XiantuID == xianTuLogConfig.ID).ToList();
  205. foreach (var eventConfig in configs)
  206. {
  207. PlacesConfig placesConfig = ConfigComponent.Instance.Get<PlacesConfig>(eventConfig.placeID);
  208. if (!xianTuMapConfigd.ContainsKey(xianTuLogConfig.ID))
  209. {
  210. xianTuMapConfigd.Add(xianTuLogConfig.ID, new List<int>());
  211. }
  212. if (!xianTuMapConfigd[xianTuLogConfig.ID].Contains(placesConfig.bigMapID))
  213. {
  214. xianTuMapConfigd[xianTuLogConfig.ID].Add(placesConfig.bigMapID);
  215. }
  216. }
  217. }
  218. XianTuSaiXuanWidget xianTuSaiXuanWidget1 = await UIManager.Instance.CreateGComponentForObject<XianTuSaiXuanWidget>(XianTuSaiXuanWidget1, null);
  219. xianTuSaiXuanWidget1.CustomInit(1, 0);
  220. xianTuSaiXuanWidget1.OnClick = OnClick;
  221. xianTuSaiXuanWidget1 = await UIManager.Instance.CreateGComponentForObject<XianTuSaiXuanWidget>(XianTuSaiXuanWidget2, null);
  222. xianTuSaiXuanWidget1.CustomInit(2, 0);
  223. xianTuSaiXuanWidget1.OnClick = OnClick;
  224. BigMapConfig[] bigMapConfigs = ConfigComponent.Instance.GetAll<BigMapConfig>();
  225. foreach (var bigMapConfig in bigMapConfigs)
  226. {
  227. XianTuSaiXuanWidget xianTuSaiXuanWidget = await UIManager.Instance.CreateGComponent<XianTuSaiXuanWidget>(null, BigMapConnect);
  228. xianTuSaiXuanWidget.CustomInit(1, bigMapConfig.ID);
  229. xianTuSaiXuanWidget.OnClick = OnClick;
  230. bigMapXianTuSaiWidgets.Add(xianTuSaiXuanWidget);
  231. }
  232. eventLogTitleWidget = await UIManager.Instance.CreateGComponentForObject<EventLogTitleWidget>(EventLogTitleWidgetGam, null);
  233. BigMapList.GetChildObj();
  234. BigMapList.ShowTargetIndex(0);
  235. Btn_Main_OnClick();
  236. return await base.AsyncInit(uiData);
  237. }
  238. private async void OnClick(ItemWidgetBasic obj)
  239. {
  240. XianTuSaiXuanWidget xianTuSaiXuanWidge = obj as XianTuSaiXuanWidget;
  241. if (xianTuSaiXuanWidge.type == 1)
  242. {
  243. bigMaoXaiXuan = xianTuSaiXuanWidge._bigMapConfig.ID;
  244. placesXaiXuan = 0;
  245. foreach (var placesXianTuSaiWidget in placesXianTuSaiWidgets)
  246. {
  247. UIManager.Instance.DormancyGComponent(placesXianTuSaiWidget);
  248. }
  249. placesXianTuSaiWidgets.Clear();
  250. if (bigMaoXaiXuan == 0)
  251. {
  252. PlacesRoot.gameObject.SetActive(false);
  253. BigMapList.ShowTargetIndex(0);
  254. }
  255. else
  256. {
  257. PlacesRoot.gameObject.SetActive(true);
  258. foreach (var place in xianTuSaiXuanWidge._bigMapConfig.places)
  259. {
  260. XianTuSaiXuanWidget xianTuSaiXuanWidget = await UIManager.Instance.CreateGComponent<XianTuSaiXuanWidget>(null, PlacesConnect);
  261. xianTuSaiXuanWidget.CustomInit(2, place);
  262. xianTuSaiXuanWidget.OnClick = OnClick;
  263. placesXianTuSaiWidgets.Add(xianTuSaiXuanWidget);
  264. }
  265. BigMapList.ClickWidget(xianTuSaiXuanWidge.own.GetComponent<UIToggleWidgetBasic>());
  266. PlacesRootList.GetChildObj();
  267. PlacesRootList.ShowTargetIndex(0);
  268. }
  269. }
  270. else if (xianTuSaiXuanWidge.type == 2)
  271. {
  272. placesXaiXuan = xianTuSaiXuanWidge._placesConfig.ID;
  273. if (placesXaiXuan == 0)
  274. {
  275. PlacesRootList.ShowTargetIndex(0);
  276. }
  277. else
  278. {
  279. PlacesRootList.ClickWidget(xianTuSaiXuanWidge.own.GetComponent<UIToggleWidgetBasic>());
  280. }
  281. }
  282. BigMapConfig bigMapConfig = ConfigComponent.Instance.Get<BigMapConfig>(bigMaoXaiXuan);
  283. PlacesConfig placesConfig = ConfigComponent.Instance.Get<PlacesConfig>(placesXaiXuan);
  284. places.Clear();
  285. if (bigMaoXaiXuan == 0)
  286. {
  287. }
  288. else if (bigMaoXaiXuan != 0 && placesXaiXuan == 0)
  289. {
  290. places.AddRange(bigMapConfig.places);
  291. }
  292. else if (bigMaoXaiXuan != 0 && placesXaiXuan != 0)
  293. {
  294. places.Add(placesConfig.ID);
  295. }
  296. UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();
  297. UIManager.Instance.DormancyAllGComponent<EventLogWidget>();
  298. shoeXianTuLogConfigs = GetTypeXiantuLogConfigs(type);
  299. XaiXuanMap(shoeXianTuLogConfigs);
  300. if (xianTuDatas.Count > 0)
  301. {
  302. eventLogTitleWidget.own.SetActive(true);
  303. eventLogTitleWidget.CustomInit(xianTuDatas[0].name);
  304. }
  305. else
  306. {
  307. eventLogTitleWidget.own.SetActive(false);
  308. }
  309. Content.Init(this, xianTuDatas.Count);
  310. }
  311. private List<XianTuLogConfig> GetTypeXiantuLogConfigs(int type)
  312. {
  313. List<XianTuLogConfig> xiaNTYULogConfigs = new List<XianTuLogConfig>();
  314. foreach (var xianTuLogConfig in xianTuLogConfigs)
  315. {
  316. if (xianTuLogConfig.EventType == type)
  317. {
  318. xiaNTYULogConfigs.Add(xianTuLogConfig);
  319. }
  320. }
  321. return xiaNTYULogConfigs;
  322. }
  323. public async CTask<IScorllListWidget> GetIScorllListWidget(int index, RectTransform root)
  324. {
  325. if (index < 0 || index >= xianTuDatas.Count)
  326. {
  327. return null;
  328. }
  329. if (type == 1)
  330. {
  331. MainEventLogWidget mainEventLogWidget = await UIManager.Instance.CreateGComponent<MainEventLogWidget>(null, Content.GetComponent<RectTransform>());
  332. mainEventLogWidget.CustomInit(xianTuDatas[index].xianTuLogConfig);
  333. return mainEventLogWidget;
  334. }
  335. else
  336. {
  337. XianTuData xianTuData = xianTuDatas[index];
  338. if (xianTuData.type == 1)
  339. {
  340. EventLogTitleWidget eventLogTitleWidget = await UIManager.Instance.CreateGComponent<EventLogTitleWidget>(null, Content.GetComponent<RectTransform>());
  341. eventLogTitleWidget.CustomInit(xianTuData.name);
  342. xianTuTitleWidgets.Add(eventLogTitleWidget);
  343. return eventLogTitleWidget;
  344. }
  345. else
  346. {
  347. EventLogWidget EventLogWidget = await UIManager.Instance.CreateGComponent<EventLogWidget>(null, Content.GetComponent<RectTransform>());
  348. await EventLogWidget.CustomInit(xianTuData.xianTuLogConfig, places);
  349. return EventLogWidget;
  350. }
  351. }
  352. }
  353. public void HindIScorllListWidget(IScorllListWidget widget)
  354. {
  355. UIManager.Instance.DormancyGComponent(widget as UIComponent);
  356. if (xianTuTitleWidgets.Contains(widget as EventLogTitleWidget))
  357. {
  358. xianTuTitleWidgets.Remove(widget as EventLogTitleWidget);
  359. }
  360. }
  361. public async static CTask OpenPanel()
  362. {
  363. XianTuLogPanel xianTuLogPanel = await UIManager.Instance.LoadAndOpenPanel<XianTuLogPanel>(null);
  364. }
  365. [CustomMethod(CustomMethodType.Update)]
  366. public void Update()
  367. {
  368. if (type != 2)
  369. return;
  370. EventLogTitleWidget highestItem = null;
  371. float maxY = float.MinValue;
  372. foreach (var xianTuTitleWidget in xianTuTitleWidgets)
  373. {
  374. float itemY = xianTuTitleWidget.own.transform.position.y; // 使用世界坐标的 Y 值
  375. if (itemY > maxY)
  376. {
  377. maxY = itemY;
  378. highestItem = xianTuTitleWidget;
  379. }
  380. }
  381. if (highestItem != null)
  382. {
  383. float outsideY = eventLogTitleWidget.own.transform.position.y;
  384. if (maxY > outsideY - 5)
  385. {
  386. eventLogTitleWidget.CustomInit(highestItem.Text_Name.text);
  387. }
  388. }
  389. }
  390. public override void Close()
  391. {
  392. UIManager.Instance.DormancyAllGComponent<MainEventLogWidget>();
  393. UIManager.Instance.DormancyAllGComponent<EventLogWidget>();
  394. UIManager.Instance.DormancyAllGComponent<EventLogTitleWidget>();
  395. xianTuTitleWidgets.Clear();
  396. type = 0;
  397. foreach (var bigMapXianTuSaiWidget in bigMapXianTuSaiWidgets)
  398. {
  399. UIManager.Instance.DormancyGComponent(bigMapXianTuSaiWidget);
  400. }
  401. bigMapXianTuSaiWidgets.Clear();
  402. foreach (var placesXianTuSaiWidget in placesXianTuSaiWidgets)
  403. {
  404. UIManager.Instance.DormancyGComponent(placesXianTuSaiWidget);
  405. }
  406. placesXianTuSaiWidgets.Clear();
  407. Btn_XaiXuanClose.gameObject.SetActive(false);
  408. Btn_XaiXuan.gameObject.SetActive(false);
  409. bigMaoXaiXuan = 0;
  410. placesXaiXuan = 0;
  411. places.Clear();
  412. base.Close();
  413. }
  414. }
  415. }