From 30ba2ef747ced774bef177d5273cb5a3429cff49 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 01 七月 2025 17:38:55 +0800
Subject: [PATCH] 130 子 【战斗】战斗系统 / 【战斗】战斗系统-客户端 部分战斗逻辑

---
 Main/System/Battle/BattleField/BattleField.cs |  136 ++++++++++++++++++++++++++++++++++++---------
 1 files changed, 109 insertions(+), 27 deletions(-)

diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 35b1bd5..f6ff0a6 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -1,22 +1,82 @@
 using System.Collections.Generic;
+using UnityEngine;
 
 public class BattleField
 {
-    public BattleMode battleMode;
-
     public BattleObjMgr battleObjMgr;
 
     public RecordPlayer recordPlayer;
 
+    public IOperationAgent operationAgent;
+
     public int round = 0;
+
+    public bool IsActive
+    {
+        get;
+        protected set;
+    }
+
+    public bool IsBattleFinish
+    {
+        get;
+        protected set;
+    }
+
+    public virtual bool IsPvp
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+    private bool m_IsPause = false;
+
+    public bool IsPause
+    {
+        get
+        {
+            return m_IsPause;
+        }
+        protected set
+        {
+            m_IsPause = value;
+
+            if (m_IsPause)
+            {
+                PauseGame();
+            }
+            else
+            {
+                ResumeGame();
+            }
+        }
+    }
+
+    public BattleRootNode battleRootNode;
+
+    private BattleMode battleMode;
 
     public virtual void Init(TeamBase _redTeam, TeamBase _blueTeam)
     {
+        GameObject go = ResManager.Instance.LoadAsset<GameObject>("Battle/Prefabs", "BattleRootNode");
+        GameObject battleRootNodeGO = GameObject.Instantiate(go);
+        battleRootNode = battleRootNodeGO.GetComponent<BattleRootNode>();
+        battleRootNodeGO.name = this.GetType().Name;
+
         battleObjMgr = new BattleObjMgr();
-        battleObjMgr.Init(_redTeam, _blueTeam);
+        battleObjMgr.Init(this, _redTeam, _blueTeam);
 
         recordPlayer = new RecordPlayer();
         recordPlayer.Init(this);
+    }
+
+    //  鍦≧un涔嬪墠瑕佽缃畬姣� 瑕佸垱寤篈gent
+    public void SetBattleMode(BattleMode _battleMode)
+    {
+        battleMode = _battleMode;
+        CreateAgent();
     }
 
     public virtual void Release()
@@ -26,13 +86,47 @@
 
     public virtual void Run()
     {
+        if (IsPause)
+            return;
+
+        if (IsRoundReachLimit())
+        {
+            return;
+        }
+
         recordPlayer.Run();
         battleObjMgr.Run();
+
+        if (operationAgent == null)
+        {
+            Debug.LogError("you should SetBattleMode before Run");
+            return;
+        }
+
+        operationAgent.Run();
     }
 
-    public void SetBattleMode(BattleMode _battleMode)
+
+    protected virtual void CreateAgent()
     {
-        battleMode = _battleMode;
+        // Hand,//鎵嬪姩鎴樻枟
+        // Auto,//鑷姩鎴樻枟
+        // Record,//鎴樻姤
+        switch (battleMode)
+        {
+            case BattleMode.Hand:
+                operationAgent = new HandModeOperationAgent(this);
+                break;
+            case BattleMode.Auto:
+                operationAgent = new AutoModeOperationAgent(this);
+                break;
+            case BattleMode.Record:
+                operationAgent = new RecordModeOperationAgent(this);
+                break;
+            default:
+                operationAgent = new HandModeOperationAgent(this);
+                break;
+        }
     }
 
     public virtual void PlayRecord(RecordAction recordAction)
@@ -45,33 +139,21 @@
         recordPlayer.PlayRecord(recordList);
     }
 
-    public virtual void OnActionOver(int attackId)
-    {
-        //
-// 鎵嬪姩鎺ㄧ偣涓�涓嬪彂涓�涓寘 鏀朵竴涓寘 鎾斁涓�娆℃姤鏂� 涔嬪悗灏卞仠浣� 鐩村埌鎴樻枟缁撴潫鐨勫寘鏂�
-// 鑷姩鐨勮瘽 鑷姩鍙戝寘 鎾斁鎶ユ枃 鍚� 璇锋眰涓嬩竴涓寘 寰幆 鐩村埌鎴樻枟缁撴潫鐨勫寘鏂�
-// 鎴樻姤鎾斁灏辨槸涓�鐩存挱鏀炬垬鎶� 鐭ラ亾鎴樻枟缁撴潫鐨勫寘鏂�
-        if (battleMode == BattleMode.Auto)
-        {
-            // Request next action
-        }
-        else if (battleMode == BattleMode.Record)
-        {
-            // Play next record
-        }
-        else
-        {
-            // Wait for user input
-        }
-    }
-
-    public virtual void ResumeGame()
+    protected virtual void ResumeGame()
     {
         battleObjMgr.ResumeGame();
+        recordPlayer.ResumeGame();
     }
 
-    public virtual void PauseGame()
+    protected virtual void PauseGame()
     {
         battleObjMgr.PauseGame();
+        recordPlayer.PauseGame();
+    }
+
+    public bool IsRoundReachLimit()
+    {
+        // return round > xxx;
+        return false;
     }
 }
\ No newline at end of file

--
Gitblit v1.8.0