From cbc808130160c05551c1acc83cd7507bcfebcba0 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 21 十月 2025 14:42:48 +0800
Subject: [PATCH] 143 演武场-客户端 战斗支持切出界面,如果战斗没结束,还能通过入口回到战斗

---
 Main/System/Battle/BattleManager.cs         |   20 ++++++++++
 Main/System/Main/MainWin.cs                 |   56 ++++++++++++++++++++++++++-
 Main/System/ChallengeTab/ChallengeTabWin.cs |   15 +++++++
 Main/System/Battle/ArenaBattleWin.cs        |   11 +++++
 4 files changed, 97 insertions(+), 5 deletions(-)

diff --git a/Main/System/Battle/ArenaBattleWin.cs b/Main/System/Battle/ArenaBattleWin.cs
index 27d7779..c990c92 100644
--- a/Main/System/Battle/ArenaBattleWin.cs
+++ b/Main/System/Battle/ArenaBattleWin.cs
@@ -1,4 +1,5 @@
-锘縰sing System.Collections.Generic;
+锘縰sing System;
+using System.Collections.Generic;
 using LitJson;
 using UnityEngine;
 using UnityEngine.UI;
@@ -71,6 +72,7 @@
     {
         base.OnPreOpen();
         // SetBattleField(BattleManager.Instance.storyBattleField);
+        MainWin.TabChangeEvent += OnTabChangeEvent;
         BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
         EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
         EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd);
@@ -81,11 +83,18 @@
     {
         base.OnPreClose();
         UIManager.Instance.CloseWindow<BattleHUDWin>();
+        MainWin.TabChangeEvent -= OnTabChangeEvent;
         BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
         EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
         EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd);
         //UIManager.Instance.OpenWindow<MainWin>(0);
     }
+
+    private void OnTabChangeEvent()
+    {
+        UIManager.Instance.CloseWindow<ArenaBattleWin>(true);
+    }
+
     private void OnBattleEnd(string guid, JsonData endData)
     {
         if (battleField != null && guid == battleField.guid)
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index 58a9b27..766ccb8 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -576,4 +576,24 @@
 
         return null;
     }
+
+    /// <summary>
+    /// 妫�鏌ユ槸鍚︽湁闈炰富绾挎垬鏂楋紙濡傜珵鎶�鍦恒�佺櫧楠ㄧ瓑锛夋鍦ㄨ繘琛�
+    /// </summary>
+    /// <returns>濡傛灉鏈変换浣曢潪涓荤嚎鎴樻枟涓旀湭缁撴潫锛屽垯杩斿洖true</returns>
+    public bool IsOtherBattleInProgress()
+    {
+        foreach (var kvp in battleFields)
+        {
+            BattleField battleField = kvp.Value;
+            // 妫�鏌ユ垬鍦烘槸鍚︽湁鏁堜笖灏氭湭缁撴潫
+            if (battleField == null || battleField.IsBattleFinish)
+                continue;
+            // MapID 1 (StoryBattleField) 鍜� 2 (StoryBossBattleField) 閮芥槸涓荤嚎
+            if (battleField.MapID == 1 || battleField.MapID == 2)
+                continue;
+            return true;
+        }
+        return false;
+    }
 }
\ No newline at end of file
diff --git a/Main/System/ChallengeTab/ChallengeTabWin.cs b/Main/System/ChallengeTab/ChallengeTabWin.cs
index 60f67da..968824d 100644
--- a/Main/System/ChallengeTab/ChallengeTabWin.cs
+++ b/Main/System/ChallengeTab/ChallengeTabWin.cs
@@ -90,7 +90,20 @@
             UIManager.Instance.CloseWindow<ChallengeTabWin>();
             if (!FuncOpen.Instance.IsFuncOpen(funcId, true))
                 return;
-            UIManager.Instance.OpenWindow<ArenaWin>();
+            BattleField arenaBattle = BattleManager.Instance.GetBattleFieldByMapID(3);
+            if (arenaBattle != null)
+            {
+                ArenaBattleWin fsBattleWin = UIManager.Instance.GetUI<ArenaBattleWin>();
+                if (null == fsBattleWin)
+                {
+                    fsBattleWin = UIManager.Instance.OpenWindow<ArenaBattleWin>();
+                }
+                fsBattleWin.SetBattleField(arenaBattle);
+            }
+            else
+            {
+                UIManager.Instance.OpenWindow<ArenaWin>();
+            }
         });
     }
 
diff --git a/Main/System/Main/MainWin.cs b/Main/System/Main/MainWin.cs
index 6c3c56d..a629719 100644
--- a/Main/System/Main/MainWin.cs
+++ b/Main/System/Main/MainWin.cs
@@ -27,10 +27,12 @@
     [SerializeField] UIEffectPlayer fightEffect;
     [SerializeField] UIEffectPlayer openCloseAnim;
     [SerializeField] FillTween cdTween;
+    int index = 0;
 
     public bool isFirstOpen = true; //棣栨鎵撳紑
     public Text hammerText;
 
+    public static event Action TabChangeEvent;
     protected override void InitComponent()
     {
         base.InitComponent();
@@ -43,6 +45,7 @@
         UpdateCurrency();
         UpdatePlayerInfo();
         RefreshFightBtn();
+        DisplayTopBar(index);
     }
 
     protected override void OnPreOpen()
@@ -50,6 +53,8 @@
         PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefresh;
         AutoFightModel.Instance.OnFightEvent += OnSkillCast;
         ChallengeTabWin.OnCloseChallengeTabWin += OnCloseChallengeTabWin;
+        BattleManager.Instance.onBattleFieldCreate += OnBattleFieldCreate;
+        BattleManager.Instance.onBattleFieldDestroy += OnBattleFieldDestroy;
         base.OnPreOpen();
 
         // 鍒锋柊UI
@@ -61,7 +66,19 @@
         PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefresh;
         AutoFightModel.Instance.OnFightEvent -= OnSkillCast;
         ChallengeTabWin.OnCloseChallengeTabWin -= OnCloseChallengeTabWin;
+        BattleManager.Instance.onBattleFieldCreate -= OnBattleFieldCreate;
+        BattleManager.Instance.onBattleFieldDestroy -= OnBattleFieldDestroy;
         base.OnPreClose();
+    }
+
+    private void OnBattleFieldCreate(string guid, BattleField battleField)
+    {
+        Refresh();
+    }
+
+    private void OnBattleFieldDestroy(string guid, BattleField battleField)
+    {
+        Refresh();
     }
 
     private void OnCloseChallengeTabWin()
@@ -82,8 +99,37 @@
         tabButtons[functionOrder].SelectBtn();
     }
 
+    public void DisplayTopBar(int index)
+    {
+        bool isOtherBattleInProgress = BattleManager.Instance.IsOtherBattleInProgress();
+        switch (index)
+        {
+            case 0:
+            case 2:
+                topBar.SetActive(true);
+                break;
+            case 1:
+            case 4:
+                topBar.SetActive(false);
+                break;
+            case 3:
+                topBar.SetActive(!isOtherBattleInProgress);
+                break;
+            default:
+                topBar.SetActive(true);
+                break;
+        }
+    }
+
     protected override void SelectBottomTab(int index)
     {
+        bool isOtherBattleInProgress = BattleManager.Instance.IsOtherBattleInProgress();
+        if (isOtherBattleInProgress)
+        {
+            // 濡傛灉姝e湪闈炰富绾挎垬鏂椾腑锛屾病婊¤冻瑙i攣鏉′欢鍒欎笉鍏佽鍒囨崲
+        }
+        DisplayTopBar(index);
+
         if (index == 3)
         {
             //鎸戞垬鐗规畩鏄剧ず閫昏緫
@@ -91,7 +137,8 @@
             return;
         }
 
-        topBar.SetActive(index == 0 || index == 2);
+
+
         // 濡傛灉鐐瑰嚮褰撳墠宸查�変腑鐨勬爣绛撅紝涓嶅仛澶勭悊
         if (functionOrder == index && currentSubUI != null)
         {
@@ -107,6 +154,8 @@
 
         // 鏍规嵁閫変腑鐨勬爣绛炬墦寮�瀵瑰簲鐨勭晫闈�
         OpenSubUIByTabIndex();
+
+        TabChangeEvent?.Invoke();
     }
 
     //鎴樻枟鎸夐挳鍔ㄧ敾
@@ -187,6 +236,9 @@
     /// </summary>
     protected override void OnTabButtonClicked(int index)
     {
+        this.index = index;
+
+
         if (index == 0)
         {
             if (currentSubUI != null && currentSubUI.name == "HomeWin")
@@ -201,8 +253,6 @@
             UIManager.Instance.OpenWindow<GuildJoinWin>();
             return;
         }
-
-
         SelectBottomTab(index);
     }
 

--
Gitblit v1.8.0