| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
|   | 
| /// <summary> | 
| /// 游戏主界面 | 
| /// </summary> | 
| public class MainWin : UIBase | 
| { | 
|     private GameObject windowBackground; | 
|   | 
|     // 底部按钮组 | 
|     private Button[] bottomTabButtons; | 
|      | 
|     // 当前选中的底部标签索引 | 
|     private int currentTabIndex = 0; | 
|      | 
|     // 当前打开的子界面 | 
|     private UIBase currentSubUI; | 
|      | 
|     /// <summary> | 
|     /// 初始化组件 | 
|     /// </summary> | 
|     protected override void InitComponent() | 
|     { | 
|         base.InitComponent(); | 
|   | 
|         windowBackground = transform.Find("RawImgBackground").gameObject; | 
|   | 
|         bottomTabButtons = new Button[5]; | 
|   | 
|         for (int i = 1; i <= 5; i++) | 
|         { | 
|             string buttonName = "Buttons/Button" + i; | 
|             bottomTabButtons[i-1] = transform.Find(buttonName).GetComponent<Button>(); | 
|         } | 
|   | 
|         // 初始化UI组件事件 | 
|         InitButtonEvents(); | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 初始化UI组件事件 | 
|     /// </summary> | 
|     private void InitButtonEvents() | 
|     { | 
|         // 初始化底部按钮 | 
|         for (int i = 0; i < bottomTabButtons.Length; i++) | 
|         { | 
|             int index = i; // 捕获索引 | 
|             bottomTabButtons[i].onClick.AddListener(() => { | 
|                 OnBottomTabButtonClicked(index); | 
|             }); | 
|         } | 
|     } | 
|      | 
|     protected override void OnOpen() | 
|     { | 
|         base.OnOpen(); | 
|          | 
|         // 默认选中第一个标签 | 
|         SelectBottomTab(0); | 
|   | 
|         // 刷新UI | 
|         Refresh(); | 
|     } | 
|      | 
|     public override void Refresh() | 
|     { | 
|         UpdatePlayerInfo(); | 
|         UpdateCurrency(); | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 更新玩家信息 | 
|     /// </summary> | 
|     private void UpdatePlayerInfo() | 
|     { | 
|         // 从玩家数据中获取信息并更新UI | 
|         // 例如: | 
|         // playerNameText.text = PlayerData.Instance.Name; | 
|         // playerLevelText.text = "Lv." + PlayerData.Instance.Level; | 
|         // powerText.text = PlayerData.Instance.Power.ToString(); | 
|         // expSlider.value = PlayerData.Instance.ExpRatio; | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 更新货币信息 | 
|     /// </summary> | 
|     private void UpdateCurrency() | 
|     { | 
|         // 从玩家数据中获取货币信息并更新UI | 
|         // 例如: | 
|         // goldText.text = PlayerData.Instance.Gold.ToString(); | 
|         // diamondText.text = PlayerData.Instance.Diamond.ToString(); | 
|         // energyText.text = PlayerData.Instance.Energy + "/" + PlayerData.Instance.MaxEnergy; | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 底部标签按钮点击 | 
|     /// </summary> | 
|     private void OnBottomTabButtonClicked(int index) | 
|     { | 
|         SelectBottomTab(index); | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 选择底部标签 | 
|     /// </summary> | 
|     private void SelectBottomTab(int index) | 
|     { | 
|         // 如果点击当前已选中的标签,不做处理 | 
|         if (currentTabIndex == index && currentSubUI != null) | 
|         { | 
|             return; | 
|         } | 
|          | 
|         // 更新当前选中的标签索引 | 
|         currentTabIndex = index; | 
|          | 
|         // 更新按钮状态 | 
|         UpdateButtonsState(); | 
|          | 
|         // 关闭当前打开的子界面 | 
|         CloseCurrentSubUI(); | 
|          | 
|         // 根据选中的标签打开对应的界面 | 
|         OpenSubUIByTabIndex(index); | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 更新按钮状态 | 
|     /// </summary> | 
|     private void UpdateButtonsState() | 
|     { | 
|         // 遍历所有按钮,设置选中状态 | 
|         for (int i = 0; i < bottomTabButtons.Length; i++) | 
|         { | 
|             // 这里可以根据是否选中设置按钮的视觉效果 | 
|             // 例如:改变图片、颜色等 | 
|             // bottomTabButtons[i].GetComponent<Image>().color = (i == currentTabIndex) ? Color.blue : Color.white; | 
|   | 
|             // 或者激活/禁用选中图标 | 
|             bottomTabButtons[i].image.color = (i == currentTabIndex) ?  Color.white : Color.gray; | 
|         } | 
|     } | 
|      | 
|     /// <summary> | 
|     /// 关闭当前打开的子界面 | 
|     /// </summary> | 
|     private void CloseCurrentSubUI() | 
|     { | 
|         if (currentSubUI != null) | 
|         { | 
|             // 关闭当前界面 | 
|             currentSubUI.CloseWindow(); | 
|             currentSubUI = null; | 
|         } | 
|     } | 
|   | 
|     /// <summary> | 
|     /// 根据标签索引打开对应的子界面 | 
|     /// </summary> | 
|     private void OpenSubUIByTabIndex(int index) | 
|     { | 
|   | 
|         Debug.Log("打开子界面 : " + index); | 
|         // 主城 阵容 同盟 福利 冒险 | 
|         windowBackground.SetActive(index != 4); | 
|         //根据索引打开不同的界面 | 
|          switch (index) | 
|         { | 
|             case 0: | 
|                 // 例如:打开主页界面 | 
|                 // currentSubUI = UIManager.Instance.OpenUI<HomeUI>(); | 
|                 Debug.Log("打开主城界面"); | 
|                 break; | 
|             case 1: | 
|                 // 例如:打开角色界面 | 
|                 // currentSubUI = UIManager.Instance.OpenUI<CharacterUI>(); | 
|                 Debug.Log("打开阵容界面"); | 
|                 break; | 
|             case 2: | 
|                 // 例如:打开背包界面 | 
|                 // currentSubUI = UIManager.Instance.OpenUI<BagUI>(); | 
|                 Debug.Log("打开同盟界面"); | 
|                 break; | 
|             case 3: | 
|                 // 例如:打开任务界面 | 
|                 // currentSubUI = UIManager.Instance.OpenUI<QuestUI>(); | 
|                 Debug.Log("打开福利界面"); | 
|                 break; | 
|             case 4: | 
|                 // 例如:打开设置界面 | 
|                 currentSubUI = UIManager.Instance.OpenWindow<PlaceWin>(); | 
|                 Debug.Log("打开冒险界面"); | 
|                 break; | 
|             default: | 
|                 Debug.LogWarning("未知的标签索引: " + index); | 
|                 break; | 
|         } | 
|     } | 
| } |