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