using UnityEngine; using System.Collections; using System.Collections.Generic; namespace YLBattle { /// /// /// public partial class GameBattleManager { /// /// 单键实例 /// protected static GameBattleManager instance = null; /// /// 战斗管理器 /// protected BattleManager mBattleManager = new BattleManager(); /// /// 战斗环境 /// public BattleParam mBattleParam = new BattleParam(); /// /// 战斗模式 /// public BattleDefine.EBattleSceneType battleType = BattleDefine.EBattleSceneType.EBattleType_Default; #region 数据适配器 /// /// 显示适配器 /// protected IShowAdapter mShowAdapter = new ShowAdapter(); /// /// 战场模板数据适配器 /// protected IFieldAdapter mFieldAdapter = new FieldAdapter(); /// /// 技能模板数据适配器 /// protected ISkillAdapter mSkillAdapter = new SkillAdapter(); /// /// 时间辅助类 /// protected TimeHelper mTimeHelper = new TimeHelper(); /// /// 随机数生成辅助类 /// protected RandomHelper mRandomHelper = new RandomHelper(); /// /// 调试输出适配 /// protected IDebug debugAdapter = new UnityDebug(); public Light battleMapLight = null; #endregion #region 关卡数据 /// /// 执行场景进度 /// protected int mLevelStatus = 0; /// /// 普通关卡信息 /// protected sm_gate_combat mGateInfo = null; /// /// 无穷尽关卡信息 /// protected sm_gate_combat mFroeverInfo = null; #endregion /// /// 战场调度状态 /// protected EBattleUpdateStatus mBattleStatus = EBattleUpdateStatus.Stop; /// /// 战场上一个状态 /// protected EBattleUpdateStatus mPreBattleStatus = EBattleUpdateStatus.Stop; /// /// 获取单键实例 /// /// 单键实例 public static GameBattleManager Instance() { if (instance == null) { instance = new GameBattleManager(); } return instance; } /// /// /// 构造 /// protected GameBattleManager() { #region 初始化常用适配器 this.mBattleParam.mShowAdapter = this.mShowAdapter; this.mBattleParam.mFieldAdapter = this.mFieldAdapter; this.mBattleParam.mTimeHelper = this.mTimeHelper; this.mBattleParam.mRandom = this.mRandomHelper; this.mBattleParam.mDebugHelper = this.debugAdapter; this.mBattleParam.mSkillAdapter = this.mSkillAdapter; #endregion #region 外部常量数据初始化 ///战斗常量配置 this.mBattleParam.BattleShowTime = GlobalParameter.Instance.BattleShowTime; this.mBattleParam.BattleTeamMaxFighter = GlobalParameter.Instance.BattleTeamMaxFighter; this.mBattleParam.BlueTeamMaxPower = GlobalParameter.Instance.BlueTeamMaxPower; this.mBattleParam.BlueTeamMaxSkillPower = GlobalParameter.Instance.BlueTeamMaxSkillPower; this.mBattleParam.RedTeamMaxSkillPower = GlobalParameter.Instance.RedTeamMaxSkillPower; this.mBattleParam.BlueCriticalTime = GlobalParameter.Instance.BlueCriticalTime; this.mBattleParam.BattleLianJiDamageRate = GlobalParameter.Instance.BattleLianJiDamageRate; this.mBattleParam.IncreasePowerByCastSkill = GlobalParameter.Instance.BattleIncreasePowerByCastSkill; LogHelper.Log("###暂时定制战斗时间=" + this.mBattleParam.BattleShowTime / 1000); LogHelper.Log("###己方最大人数=" + this.mBattleParam.BattleTeamMaxFighter); LogHelper.Log("###己方最高能量值=" + this.mBattleParam.BlueTeamMaxPower); LogHelper.Log("###己方释放技能团队power增长值=" + this.mBattleParam.IncreasePowerByCastSkill); #endregion } /// /// 更改调度状态 /// /// 目标状态 public void ChangeStatus(EBattleUpdateStatus status) { this.mPreBattleStatus = this.mBattleStatus; this.mBattleStatus = status; } /// /// 获取上一次调度状态 /// /// 状态 public EBattleUpdateStatus PreStatus() { return this.mPreBattleStatus; } /// /// 【UI=>战斗】状态驱动 /// public void Update() { switch (this.mBattleStatus) { case EBattleUpdateStatus.Continue: this.mBattleStatus = this.mBattleManager.Update(); break; case EBattleUpdateStatus.Complete: if (true == this.mBattleParam.BattleInnerOper().IsBattleFinish()) { this.ChangeStatus(EBattleUpdateStatus.Stop); return; } // 继续下一个关卡 this.ChangeStatus(EBattleUpdateStatus.Waiting); break; case EBattleUpdateStatus.Waiting: { this.ChangeStatus(EBattleUpdateStatus.DoNothing); this.PrepareForBattle(); } break; case EBattleUpdateStatus.Stop: { } break; case EBattleUpdateStatus.DoNothing: break; } } /// /// 开始本次战斗 /// public void Go(BattleDefine.EBattleSceneType _battleType = BattleDefine.EBattleSceneType.EBattleType_Default) { LogHelper.Log("进入场景,开始本次战斗"); battleType = _battleType; AudioManager.Instance.ChangeGameBackMusic(AudioManager.BattleBackMusic, 0.1f); this.ChangeStatus(EBattleUpdateStatus.Continue); // 重制战斗中介者 为 星2战斗提供 战斗上下文 //BattleMediator.Instance.DataReset(this.mBattleParam); this.mBattleManager.BattleStart(this.mBattleParam); switch (battleType) { case BattleDefine.EBattleSceneType.EBattleType_Default: RoleManager.Instance.InitHeros(); ////AIManager.Instance.Init(); break; case BattleDefine.EBattleSceneType.EBattleType_Arena: RoleManager.Instance.InitChallengeHeros(); break; case BattleDefine.EBattleSceneType.EBattleType_Guide: ////RoleManager.Instance.InitHeros(true); break; } PrepareForBattle(); FightingManager.Instance.SetUpdateState(true); RPGEffectManager.Instance.Init(); X2Battle.X2BattleManager.Instance.mBulletModel.AddBattleEvent(); // 获取场景灯光 GameObject btMap = GameObject.Find("AdonBG"); if(btMap) { battleMapLight = btMap.transform.Find("Demo_Scene/Directional light").GetComponent(); } } /// /// 设置 当前关卡是否 进入过 0 未进入 1以进入 /// /// public void SetLevelStatusValue(int levelStatus) { this.mLevelStatus = levelStatus; } /// /// 准备战斗信息 /// public void PrepareForBattle() { LogHelper.Log("准备战斗数据 关卡ID:" + this.mBattleParam.levelID); this.mBattleParam.levelStatus = this.mLevelStatus; LogHelper.Log("波次信息"); // 重制战斗中介者 为 星2战斗提供 战斗上下文 BattleMediator.Instance.DataReset(this.mBattleParam, 456); this.mLevelStatus++; } } } /// /// 战斗类型 /// //public enum E_BattleType //{ // /// // /// 默认 普通闯关战斗 // /// // Default = 0, // /// // /// 挑战 // /// // Challenge = 1, // /// // /// 竞技场 // /// // Arena = 2, // /// // /// 引导 // /// // Guid = 3, //}