lcy
2025-10-28 b7bad9b52d93aec7fe16d2b086af927a44533dee
Main/System/ChallengeTab/ChallengeTabWin.cs
@@ -3,146 +3,42 @@
public class ChallengeTabWin : UIBase
{
    [SerializeField] ChallengeTabButton btnBoneField;
    [SerializeField] ChallengeTabButton btnArena;
    private BaseChallengeTabHandler[] tabHandlers;
    protected override void InitComponent()
    {
        base.InitComponent();
        // 自动查找所有子对象上的 Handler 组件
        tabHandlers = GetComponentsInChildren<BaseChallengeTabHandler>(true);
    }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        DungeonManager.Instance.UpdateFBInfoChangeEvent += OnUpdateFBInfoChangeEvent;
        AdsManager.Instance.OnAdsInfoListUpdateEvent += OnAdsInfoListUpdateEvent;
        TimeMgr.Instance.OnDayEvent += OnDayEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
        foreach (var handler in tabHandlers)
        {
            handler.SubscribeEvents();
        }
        Display();
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        DungeonManager.Instance.UpdateFBInfoChangeEvent -= OnUpdateFBInfoChangeEvent;
        AdsManager.Instance.OnAdsInfoListUpdateEvent -= OnAdsInfoListUpdateEvent;
        TimeMgr.Instance.OnDayEvent -= OnDayEvent;
        FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
        PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
        foreach (var handler in tabHandlers)
        {
            handler.UnsubscribeEvents();
        }
        UIManager.Instance.GetUI<MainWin>()?.RestoreFuncBtn();
    }
    private void OnDayEvent()
    {
        Display();
    }
    private void OnAdsInfoListUpdateEvent(int id, int mapId)
    {
        Display();
    }
    private void OnUpdateFBInfoChangeEvent(int arg1, bool arg2, bool arg3, bool arg4)
    {
        if (arg1 == BoneFieldManager.Instance.DataMapID)
        {
            DisplayBoneFieldButton();
        }
    }
    public void OnFuncStateChangeEvent(int funcId)
    {
        if (funcId == BoneFieldManager.Instance.funcId)
        {
            DisplayBoneFieldButton();
        }
        else if (funcId == ArenaManager.Instance.funcId)
        {
            DisplayArenaButton();
        }
    }
    private void PlayerDataRefresh(PlayerDataType type)
    {
        if (type == PlayerDataType.ChallengeVoucher)
        {
            DisplayArenaButton();
        }
    }
    public void Display()
    {
        DisplayBoneFieldButton();
        DisplayArenaButton();
    }
    public void DisplayArenaButton()
    {
        int index = 1;
        int funcId = ArenaManager.Instance.funcId;
        int redpointId = MainRedDot.ArenaRepoint;
        bool isLock = FuncOpen.Instance.IsFuncOpen(funcId);
        int type = ArenaManager.Instance.ChallengeMoneyType;
        long nowCount = UIHelper.GetMoneyCnt(type);
        string countInfo = UIHelper.AppendColor(nowCount > 0 ? TextColType.Green : TextColType.Red, Language.Get("Challenge03", nowCount));
        string lockInfo = !isLock ? Language.Get("Challenge02") : string.Empty;
        btnArena.Display(index, redpointId, isLock, countInfo, lockInfo, () =>
        {
            if (!FuncOpen.Instance.IsFuncOpen(funcId, true))
                return;
            BattleField arenaBattle = BattleManager.Instance.GetBattleFieldByMapID(3);
            if (arenaBattle != null)
            {
                ArenaBattleWin battleWin;
                if (!UIManager.Instance.IsOpened<ArenaBattleWin>())
                {
                    battleWin = UIManager.Instance.OpenWindow<ArenaBattleWin>();
                }
                else
                {
                    battleWin = UIManager.Instance.GetUI<ArenaBattleWin>();
                }
                battleWin.SetBattleField(arenaBattle);
            }
            else
            {
                UIManager.Instance.OpenWindow<ArenaWin>();
            }
        });
    }
    public void DisplayBoneFieldButton()
    {
        int index = 2;
        int funcId = BoneFieldManager.Instance.funcId;
        int redpointId = MainRedDot.BoneFieldRepoint;
        bool isLock = FuncOpen.Instance.IsFuncOpen(funcId);
        if (!BoneFieldManager.Instance.TryGetShowSweepCount(out int showSweepMaxCount, out int showrealRemainSweepCount))
        if (tabHandlers == null)
            return;
        string countInfo = UIHelper.AppendColor(showrealRemainSweepCount > 0 ? TextColType.Green : TextColType.Red, Language.Get("Challenge01", showrealRemainSweepCount));
        string lockInfo = !isLock ? Language.Get("Challenge02") : string.Empty;
        btnBoneField.Display(index, redpointId, isLock, countInfo, lockInfo, () =>
        foreach (var handler in tabHandlers)
        {
            if (!FuncOpen.Instance.IsFuncOpen(funcId, true))
                return;
            BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(30010);
            if (battleField != null)
            {
                BoneFieldBattleWin battleWin;
                if (!UIManager.Instance.IsOpened<BoneFieldBattleWin>())
                {
                    battleWin = UIManager.Instance.OpenWindow<BoneFieldBattleWin>();
                }
                else
                {
                    battleWin = UIManager.Instance.GetUI<BoneFieldBattleWin>();
                }
                battleWin.SetBattleField(battleField as BoneBattleField);
            }
            else
            {
                UIManager.Instance.OpenWindow<BoneFieldWin>();
            }
        });
            handler.Refresh();
        }
    }
}
}