From eb2fcb2536a8cce0b971f827c9232a138262b219 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 17 九月 2025 17:34:57 +0800
Subject: [PATCH] 125 【战斗】战斗系统 boss战&战斗开始 倍速 跳过 暂停

---
 Main/System/Battle/BattleConst.cs                                                         |   12 ++
 Main/System/Battle/BattleField/BattleRootNode.cs                                          |    2 
 Main/System/Battle/BattleManager.cs                                                       |   18 ++
 Main/System/Battle/BattleField/StoryBossBattleField.cs                                    |   45 +++++++
 Main/System/Battle/BattleField/BattleField.cs                                             |   21 +++
 Main/System/Battle/RecordPlayer/RecordPlayer.cs                                           |    5 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs |   23 +++
 Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs                           |    6 
 Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs                         |   12 +
 Main/System/Main/HomeWin.cs                                                               |   19 ++
 Main/System/Battle/FullScreenBattleWin.cs                                                 |  169 ++++++++++++++++++++++++++++
 Main/System/Battle/FullScreenBattleWin.cs.meta                                            |   11 +
 Main/System/Team/TeamHero.cs                                                              |   13 --
 13 files changed, 326 insertions(+), 30 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
index 42d74c0..7a819b7 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB424_tagSCTurnFightInit.cs
@@ -66,10 +66,25 @@
 
 		BattleDebug.LogError("鍒涘缓鎴樺満 guid:" + guid + " MapID:" + vNetData.MapID + " FuncLineID:" + vNetData.FuncLineID + "  " + battleField.GetType().ToString());
 
-		BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>();
-		if (null != battleWin)
+
+		if (vNetData.MapID == 1)
 		{
-			battleWin.SetBattleField(battleField);
+			BattleWin battleWin = UIManager.Instance.GetUI<BattleWin>();
+			if (null != battleWin)
+			{
+				battleWin.SetBattleField(battleField);
+			}
 		}
-    }
+		else
+		{
+			
+
+			FullScreenBattleWin fsBattleWin = UIManager.Instance.GetUI<FullScreenBattleWin>();
+			if (null == fsBattleWin)
+			{
+				fsBattleWin = UIManager.Instance.OpenWindow<FullScreenBattleWin>();
+			}
+			fsBattleWin.SetBattleField(battleField);
+		}
+	}
 }
diff --git a/Main/System/Battle/BattleConst.cs b/Main/System/Battle/BattleConst.cs
index 0f46bc4..07c2e1c 100644
--- a/Main/System/Battle/BattleConst.cs
+++ b/Main/System/Battle/BattleConst.cs
@@ -25,6 +25,13 @@
 
     // 婵�娲昏嫳闆勫悗鐗规晥|婵�娲昏嫳闆剕婵�娲昏嫳闆勫墠鐗规晥
 
+
+    // 搴旇濡備綍绠$悊灞傜骇?
+
+    // RendererAdjuster濡備綍鏇挎崲EffectPenetrationBlocker?
+    // RendererAdjuster搴旇涓嶅弬涓庣鐞嗗瓙RendererAdjuster
+    // RendererAdjuster鎬庝箞鑱旂郴璧锋潵
+
     public const int BattleBlackTransparentMaskOffset = 100;
 
 
@@ -38,6 +45,11 @@
             {
                 return battleWin.GetSortingOrder();
             }
+            FullScreenBattleWin fsBattleWin = UIManager.Instance.GetUI<FullScreenBattleWin>();
+            if (fsBattleWin != null)
+            {
+                return fsBattleWin.GetSortingOrder();
+            }
             return 0;
         }
     }
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 4ec0e1b..da5622d 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -3,6 +3,7 @@
 using System;
 using LitJson;
 using DG.Tweening;
+using Codice.Client.BaseCommands;
 
 public class BattleField
 {
@@ -121,6 +122,7 @@
 
         SetBattleStartState();
         SetSpeedRatio(speedRatio);
+        SetRootNodePosition();
     }
 
     public void SetSpeedRatio(float ratio)
@@ -326,6 +328,7 @@
 
     public virtual void Destroy()
     {
+        ForceFinish();
         //  閿�姣佸叏閮ㄥ唴瀹�
         BattleManager.Instance.DestroyBattleField(this);
     }
@@ -571,4 +574,22 @@
             Debug.LogError($"BattleObject with ID {vNetData.ObjID} not found for buff refresh.");
         }
     }
+
+    public void SetRootNodePosition()
+    {
+        if (1 == MapID)
+        {
+            battleRootNode.imgBackground.rectTransform.anchoredPosition = new Vector2(0, -335f);
+        }
+        else
+        {
+            battleRootNode.imgBackground.rectTransform.anchoredPosition = new Vector2(0, -750f);
+            // (battleRootNode.transform as RectTransform).anchoredPosition = new Vector2(100, 100);
+        }
+    }
+
+    public void ForceFinish()
+    {
+        recordPlayer.HaveRest();
+    }
 }
diff --git a/Main/System/Battle/BattleField/BattleRootNode.cs b/Main/System/Battle/BattleField/BattleRootNode.cs
index 128b941..848d704 100644
--- a/Main/System/Battle/BattleField/BattleRootNode.cs
+++ b/Main/System/Battle/BattleField/BattleRootNode.cs
@@ -55,4 +55,6 @@
 	public Transform skillFrontNode;
 
 	public GameObject skillMaskNode;
+
+	public GameObject battleStartNode;
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs b/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
index 453baad..bb9bcea 100644
--- a/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/BattleEndAction.cs
@@ -23,14 +23,16 @@
         base.Run();
 
         Debug.Log("Battle Ended");
-        onComplete?.Invoke();
         isFinish = true;
+        onComplete?.Invoke();
     }
 
     public override void ForceFinish()
     {
-        onComplete?.Invoke();
+        if (isFinish)
+            return;
         base.ForceFinish();
+        onComplete?.Invoke();
     }
 
     public override bool IsFinished()
diff --git a/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs b/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
index 879d478..8ffa9d1 100644
--- a/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
@@ -29,11 +29,15 @@
 
 		battleField.StartBattle(() =>
 		{
-			isFinish = true;
-			// 瀹屾垚灏卞紑濮嬫樉绀篣I
-			EventBroadcast.Instance.Broadcast(EventName.DISPLAY_BATTLE_UI, battleField.guid, true);
+			battleField.battleRootNode.battleStartNode.SetActive(true);
 
-			battleField.DistributeNextPackage();
+			UniTaskExtension.DelayTime((GameObject)null, 1f, () =>
+			{
+				isFinish = true;
+				battleField.battleRootNode.battleStartNode.SetActive(false);
+				EventBroadcast.Instance.Broadcast(EventName.DISPLAY_BATTLE_UI, battleField.guid, true);
+				battleField.DistributeNextPackage();
+			});
 		});
 
 		isRun = true;
diff --git a/Main/System/Battle/BattleField/StoryBossBattleField.cs b/Main/System/Battle/BattleField/StoryBossBattleField.cs
index 386bdc1..4719ed4 100644
--- a/Main/System/Battle/BattleField/StoryBossBattleField.cs
+++ b/Main/System/Battle/BattleField/StoryBossBattleField.cs
@@ -77,9 +77,50 @@
     protected override void OnSettlement(JsonData turnFightStateData)
     {
         base.OnSettlement(turnFightStateData);
-        AutoFightModel.Instance.isPause = false;
+
+
     }
-    
+
+    private void WhaleFall()
+    {
+        //  YYL TODO 搴旇闇�瑕佷竴涓粨绠楃晫闈㈡潵鍋氳繖浜涘唴瀹�
+        UIManager.Instance.CloseWindow<FullScreenBattleWin>();
+        AutoFightModel.Instance.isPause = false;
+        Destroy();
+    }
+
+    public override void OnBattleEnd(JsonData turnFightStateData)
+    {
+        BattleEndAction battleEndAction = new BattleEndAction(this, turnFightStateData, () =>
+        {
+            BattleDebug.LogError(turnFightStateData.ToJson());
+            // 杩欓噷鍙互娣诲姞鎴樻枟缁撴潫鐨勫叿浣撻�昏緫
+            OnSettlement(turnFightStateData);
+
+            int winFaction = (int)turnFightStateData["winFaction"];
+            //鑾疯儨闃佃惀:   涓�鑸负1鎴栬��2锛屽綋鐜╁鍙戣捣鐨勬垬鏂楁椂锛屽鏋滆幏鑳滈樀钀ヤ笉绛変簬1浠h〃鐜╁澶辫触浜�
+
+            if (winFaction == 1)
+            {
+                Debug.LogError(guid + " : 鎴樻枟鑳滃埄");
+                //  鎴樻枟鑳滃埄
+            }
+            else
+            {
+                //  鎴樻枟澶辫触
+                Debug.LogError(guid + " : 鎴樻枟澶辫触");
+            }
+
+            IsBattleFinish = true;
+
+
+            //鎻愪緵澶栭儴 鑳滃埄绛夊鍔辨樉绀�
+            EventBroadcast.Instance.Broadcast<string, JsonData>(EventName.BATTLE_END, guid, turnFightStateData);
+            WhaleFall();
+
+        });
+        recordPlayer.PlayRecord(battleEndAction);
+    }
 
     public override void HaveRest()
     {
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index e801634..a21db8a 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -485,9 +485,11 @@
     {
         try
         {
-            foreach (var battleField in battleFields)
+            List<string> keys = new List<string>(battleFields.Keys);
+            for (int i = keys.Count - 1; i >= 0; i--)
             {
-                battleField.Value?.Run();
+                var battleField = battleFields[keys[i]];
+                battleField?.Run();
             }
         }
         catch (System.Exception ex)
@@ -496,4 +498,16 @@
         }
     }
 
+    public BattleField GetBattleFieldByMapID(int v)
+    {
+        foreach (var battleField in battleFields)
+        {
+            if (battleField.Value.MapID == v)
+            {
+                return battleField.Value;
+            }
+        }
+
+        return null;
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/FullScreenBattleWin.cs b/Main/System/Battle/FullScreenBattleWin.cs
new file mode 100644
index 0000000..854af97
--- /dev/null
+++ b/Main/System/Battle/FullScreenBattleWin.cs
@@ -0,0 +1,169 @@
+锘縰sing System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class FullScreenBattleWin : UIBase
+{
+    float[] speedGear = { 1.1f, 1.3f, 1.5f };
+
+    // 缁勪欢寮曠敤
+    public Transform mountPoint;
+
+    private BattleRootNode battleRootNode = null;
+
+    public Button btnStop;
+
+    private BattleField battleField;
+
+    [SerializeField]
+    private Button btnSpeed;
+
+    [SerializeField]
+    private Text textSpeed;
+
+    [SerializeField]
+    private Button btnPass;
+
+    [SerializeField]
+    private Button btnPause;
+
+    // 鐢熷懡鍛ㄦ湡
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        // 鍒濆鍖栫粍浠跺紩鐢� 缁戝畾鎸夐挳绛塙I缁勪欢浜嬩欢
+
+        btnStop.AddListener(PauseGame);
+
+        btnSpeed.AddListener(ChangeSpeed);
+
+        btnPass.AddListener(OnClickPass);
+        
+        btnPause.AddListener(OnClickPause);
+    }
+
+    private void OnClickPause()
+    {
+        if (null == battleField)
+            return;
+
+        battleField.IsPause = !battleField.IsPause;
+    }
+
+    private void OnClickPass()
+    {
+        if (null == battleField)
+            return;
+
+        battleField.ForceFinish();
+    }
+
+    private void ChangeSpeed()
+    {
+        if (null == battleField)
+            return;
+
+        int index = Array.IndexOf(speedGear, battleField.speedRatio);
+        index = (index + 1) % speedGear.Length;
+        battleField.SetSpeedRatio(speedGear[index]);
+        textSpeed.text = (index + 1).ToString();
+    }
+
+    private void PauseGame()
+    {
+        // BattleDebug.LogError("PauseeGame");
+        if (null == battleField)
+            return;
+
+        battleField.IsPause = !battleField.IsPause;
+
+        BattleDebug.LogError(" is pause " + battleField.IsPause.ToString());
+
+        // if (battleField != null)
+        // {
+        //     battleField.operationAgent.DoNext();
+        // }
+    }
+
+    protected override void OnPreOpen()
+    {
+        base.OnPreOpen();
+        // SetBattleField(BattleManager.Instance.storyBattleField);
+        BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
+
+        UIManager.Instance.CloseWindow<MainWin>();
+    }
+
+    protected override void OnPreClose()
+    {
+        base.OnPreClose();
+        UIManager.Instance.CloseWindow<BattleHUDWin>();
+        BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
+
+        UIManager.Instance.OpenWindow<MainWin>(0);
+    }
+
+    private void OnCreateBattleField(string arg1, BattleField field)
+    {
+        if (field.GetType() == battleField.GetType())
+        {
+            SetBattleField(field);
+        }
+    }
+
+    protected override void OnOpen()
+    {
+        base.OnOpen();
+    }
+
+    protected override void OnClose()
+    {
+        base.OnClose();
+
+        if (battleRootNode != null)
+        {
+            battleRootNode.transform.SetParent(Launch.Instance.transform);
+            battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0);
+        }
+
+        battleField = null;
+    }
+
+    protected override void NextFrameAfterOpen()
+    {
+        base.NextFrameAfterOpen();
+    }
+
+    protected override void CompleteClose()
+    {
+        base.CompleteClose();
+    }
+
+    public void SetBattleField(BattleField _battleField)
+    {
+        battleField = _battleField;
+        if (battleRootNode != null)
+        {
+            battleRootNode.transform.localPosition = Vector3.zero;
+            battleRootNode.transform.SetParent(Launch.Instance.transform);
+        }
+
+        battleRootNode = battleField.battleRootNode;
+
+        battleRootNode.transform.SetParent(mountPoint);
+        battleRootNode.transform.localPosition = Vector3.zero;
+        battleRootNode.transform.localScale = Vector3.one;
+
+        BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>();
+
+        if (null == ui)
+        {
+            ui = UIManager.Instance.OpenWindow<BattleHUDWin>();
+        }
+
+        ui.SetBattleField(battleField);
+        battleField.UpdateCanvas(canvas);
+
+        textSpeed.text = (Array.IndexOf(speedGear, battleField.speedRatio) + 1).ToString();
+    }
+}
diff --git a/Main/System/Battle/FullScreenBattleWin.cs.meta b/Main/System/Battle/FullScreenBattleWin.cs.meta
new file mode 100644
index 0000000..d46b4fa
--- /dev/null
+++ b/Main/System/Battle/FullScreenBattleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b6123261c7e438e46a128ac22a8dbf9b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index aff4442..7523f2c 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -156,6 +156,11 @@
 
     public void HaveRest()
     {
+        ForceFinish();
+    }
+
+    public void ForceFinish()
+    {
         for (int i = 0; i < immediatelyActionList.Count; i++)
         {
             immediatelyActionList[i].ForceFinish();
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index 4b6d0cd..6572837 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -59,10 +59,7 @@
     protected override void InitComponent()
     {
         taskButton.AddListener(OnClickTaskButton);
-        bossBtn.AddListener(() =>
-        {
-            UIManager.Instance.OpenWindow<MainBossEnterWin>();
-        });
+        bossBtn.AddListener(OnClickEnterBoss);
 
         changeHeroPosBtn.AddListener(() =>
         {
@@ -146,6 +143,20 @@
         UIManager.Instance.CloseWindow<BattleWin>();
     }
 
+    private void OnClickEnterBoss()
+    {
+        BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(2); //BOSS鎴樻枟
+
+        if (null != battleField)
+        {
+            FullScreenBattleWin fsBattleWin = UIManager.Instance.OpenWindow<FullScreenBattleWin>();
+            fsBattleWin.SetBattleField(battleField);
+            return;
+        }
+
+        UIManager.Instance.OpenWindow<MainBossEnterWin>();
+    }
+
     void PlayerDataRefresh(PlayerDataType type)
     {
         switch (type)
diff --git a/Main/System/Team/TeamHero.cs b/Main/System/Team/TeamHero.cs
index 2c11b2a..5949d96 100644
--- a/Main/System/Team/TeamHero.cs
+++ b/Main/System/Team/TeamHero.cs
@@ -22,11 +22,10 @@
     public int positionNum; //娉ㄦ剰鏈嶅姟绔殑1鍙蜂綅鏄�1锛屽鎴风鍦ㄤ娇鐢ㄦ椂鏄�0锛岄�氫俊鍜岀瓥鍒掓矡閫氱敤1
 
 
-
     //  鎴樺満鏁版嵁
     public int ObjID = 0;// 鎴樻枟鍗曚綅鍞竴ID
 
-    public int NPCID = 0;// 鎴樻枟NPCID锛屼笉鍚岀殑瀹炰緥ID瀵瑰簲鐨凬PCID鍙兘涓�鏍�
+    public int NPCID = 0;// 鎴樻枟NPCID锛屼笉鍚岀殑瀹炰緥ID瀵瑰簲鐨凬PCID鍙兘涓�鏍� (鐩墠鍙敤鏉ュ尯鍒帺瀹惰窡NPC)
 
 
     //  鏈嶅姟鍣ㄦ潵鐨勬瀯閫�
@@ -57,16 +56,6 @@
             modelScale = 1f;
             name = heroConfig.Name;
 
-        }
-        else if (fightObj.NPCID > 0)
-        {
-            //璧癗PC鐨勯�昏緫
-            NPCConfig npcConfig = NPCConfig.Get((int)fightObj.NPCID);
-            Country = (HeroCountry)npcConfig.Country;
-            SkinID = npcConfig.SkinID;
-            modelScale = npcConfig.ModelScale;
-            name = npcConfig.NPCName;
-            
         }
         else
         {

--
Gitblit v1.8.0