using System; using UnityEngine; using UnityEngine.UI; public class ChallengeTabButton : MonoBehaviour { [SerializeField] Button btnTab; [SerializeField] ImageEx imgIcon; [SerializeField] TextEx txtName; [SerializeField] TextEx txtCount; [SerializeField] TextEx txtLockInfo; [SerializeField] Transform transUnlock; [SerializeField] RedpointBehaviour redpointBehaviour; private Action _onClickAction; public struct DisplayData { public int Index; public int RedpointId; public int OpenState;//0 FuncID 1 活动 public int FuncId; public string CountInfo; public Action OnClickAction; // 按钮点击时触发的具体逻辑 } void Awake() { btnTab.SetListener(OnTabClicked); } /// /// 处理按钮点击事件 /// private void OnTabClicked() { // --- 通用点击逻辑 --- UIManager.Instance.CloseWindow(); string activeBattleName = BattleManager.Instance.GetActiveBattleName(); if (activeBattleName != "" && activeBattleName != "StoryBattleField") { UIManager.Instance.GetUI().ClickFunc(0); } // 执行传入的具体业务逻辑 _onClickAction?.Invoke(); } /// /// 使用 DisplayData 结构体来更新按钮显示 /// /// 包含所有显示和行为配置的数据 public void Display(DisplayData data) { redpointBehaviour.redpointId = data.RedpointId; bool isOpen; if (data.OpenState == 0) { isOpen = FuncOpen.Instance.IsFuncOpen(data.FuncId); } else { isOpen = false; } // 根据锁定状态设置显隐 transUnlock.SetActive(!isOpen); txtCount.SetActive(isOpen); txtLockInfo.SetActive(!isOpen); // 设置图标和名称 string spriteAndLangKey = StringUtility.Contact("ChallengeTab", data.Index); imgIcon.SetSprite(spriteAndLangKey); txtName.text = Language.Get(spriteAndLangKey); // 设置TIPS文本 txtCount.text = data.CountInfo; txtLockInfo.text = !isOpen ? Language.Get("Challenge02") : string.Empty; // 存储点击回调 this._onClickAction = data.OnClickAction; } }