using System.Collections; using System.Collections.Generic; using UnityEngine; public class BattleManager : MonoBehaviour { // 死亡时角色使用的材质 public Material DeathMaterial; // 角色贴图数组(用于不同状态或类型) public Texture[] CharacterTextures; // 玩家战士预制体 public GameObject PlayerWarriorPrefab; // 玩家弓箭手预制体 public GameObject PlayerArcherPrefab; // 敌人战士预制体 public GameObject EnemyWarriorPrefab; // 敌人弓箭手预制体 public GameObject EnemyArcherPrefab; // 死亡掉落金币的预制体 public GameObject GoldForDeadPrefab; // 战士升级等级数组 public UpgradeLevels[] WarriorUpgradeLevel; // 当前关卡的敌方战士列表 [HideInInspector] public List EnemyStageWarriors = new List(); // 当前关卡的玩家战士列表 [HideInInspector] public List PlayerStageWarriors = new List(); // 用于记录玩家移动到下一个点的计数器 private int _counter; // 标记当前关卡是否已经结束 private bool _isStageEnd; /// /// 开始战斗,初始化敌我双方单位,重置状态并开始寻敌 /// public void StartBattle() { // EnemyStageWarriors.Clear(); // 预留清空敌人列表 _isStageEnd = false; // 获取当前关卡的敌人和玩家单位 EnemyStageWarriors = ComponentsManager.StagesManager.GetCurrentStageItem.Enemys; PlayerStageWarriors = ComponentsManager.PlayerArmyManager.PlayerWarriors; // 初始化敌方单位,解除停止状态并开始寻敌 for (int i = 0; i < EnemyStageWarriors.Count; i++) { EnemyStageWarriors[i].IsStop = false; EnemyStageWarriors[i].SearchTarget(); } // 初始化玩家单位,解除停止状态并开始寻敌 for (int i = 0; i < PlayerStageWarriors.Count; i++) { PlayerStageWarriors[i].IsStop = false; PlayerStageWarriors[i].SearchTarget(); } } /// /// 检查当前战斗状态,判断胜负并处理关卡切换或结算 /// public void CheckStatus() { // 实时获取最新的敌我双方单位列表 EnemyStageWarriors = ComponentsManager.StagesManager.GetCurrentStageItem.Enemys; PlayerStageWarriors = ComponentsManager.PlayerArmyManager.PlayerWarriors; // 玩家胜利判定:敌人全部消灭 if (EnemyStageWarriors.Count <= 0) { if (!_isStageEnd) { _isStageEnd = true; // 还有下一关,进入下一关 if (ComponentsManager.StagesManager.NextStage()) { _counter = 0; // 玩家单位移动到下一关的起点 for (int i = 0; i < PlayerStageWarriors.Count; i++) { PlayerStageWarriors[i].IsStop = true; PlayerStageWarriors[i] .GoToNextPoint(ComponentsManager.StagesManager.GetCurrentStageItem.GetPlayerPoint(_counter).position); _counter++; } // 协程处理关卡胜利后的过渡 StartCoroutine(StageWin()); } else { // 没有下一关,玩家全体胜利 for (int i = 0; i < PlayerStageWarriors.Count; i++) PlayerStageWarriors[i].PlayerWinner(); ComponentsManager.GameUI.PlayerWinner(); } } } // 玩家失败判定:玩家单位全部消灭 if (PlayerStageWarriors.Count <= 0) { if (!_isStageEnd) { _isStageEnd = true; // 敌人单位播放胜利动画 for (int i = 0; i < EnemyStageWarriors.Count; i++) { EnemyStageWarriors[i].IsStop = true; EnemyStageWarriors[i].PlayerWinner(); } ComponentsManager.GameUI.PlayerLose(); } } } /// /// 关卡胜利后的过渡协程,切换镜头、重置玩家单位、返回菜单 /// IEnumerator StageWin() { yield return new WaitForSeconds(1.5f); // 等待1.5秒 ComponentsManager.CameraScript.SetCameraPosition(new Vector3(-3.75f, 13f, -16f + (ComponentsManager.StagesManager.StageLevel * 23))); yield return new WaitForSeconds(4f); // 再等待4秒 ComponentsManager.PlayerArmyManager.ResetPlayerWarriors(); // 重置玩家单位 ComponentsManager.MenuUI.ActivateMenu(true); // 返回菜单界面 } }