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,
//}