using Assets.MyGame.Scripts.Net; using Assets.MyGame.Scripts.Net.WebResponses; using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; using static Assets.MyGame.Scripts.Net.WebResponses.ChineseChess.ChineseChessGameClassList; public class UIChineseChessDistrict : SubUIBase { public Button panel_RoomItemPrefab; public Transform panel_RoomItemParent; public ScrollRect scroll; public TextMeshProUGUI tmp_CurrGold; public Dictionary itemListDic = new Dictionary(); float horizontalNormalizedPosition; public Transform tra_DaQuParent; public Transform tra_FenQuItem; // child0=Toggle, child0.child0=TextMeshProUGUI(象棋n区) public int maxDistrict = 10; // 最大分区数 /// 当前选中的分区号(1 开始):退房/被踢回大厅时用它刷新,保证列表与 tab 一致 public int currDistrict = 1; private bool _tabsBuilt = false; public override void Awake() { base.Awake(); } private void Update() { scroll.horizontalNormalizedPosition = Mathf.Lerp(scroll.horizontalNormalizedPosition, horizontalNormalizedPosition, 0.5f); } public override void Hide() { base.Hide(); } protected override void OnShow(object args = null) { base.OnShow(args); tmp_CurrGold.text = GameManager.Instance.user.assets.gold.ToString(); if (!_tabsBuilt) { // 从后端 API 获取分区总数 APIRequestList.GetChessRoomPartitionCount(count => { maxDistrict = count > 0 ? count : 1; BuildChessFenQuTabs(); _tabsBuilt = true; }); } } public override void Show(object args = null) { base.Show(args); tmp_CurrGold.text = GameManager.Instance.user.assets.gold.ToString(); if (args != null) { // 4.4 全量覆盖:先清空旧列表,再用服务端返回的列表重建(防止多次刷新叠加/分区错乱) for (int c = panel_RoomItemParent.childCount - 1; c >= 0; c--) Destroy(panel_RoomItemParent.GetChild(c).gameObject); itemListDic.Clear(); int i = 0; var v = JsonConvert.DeserializeObject>>(args.ToString()); var basePanel = (ChineseChessMainPanel)uIManager.parentUIBase; foreach (var item in v.arguments[0]) { var tran = Instantiate(panel_RoomItemPrefab.gameObject, panel_RoomItemParent).transform; tran.GetComponent