using UnityEngine; using System.Collections; using System.Collections.Generic; using YLBattle; namespace YLBattle { /// /// 战斗管理 /// public partial class BattleManager : IBattleGlobalOper { /// /// 战斗上下文环境信息 /// protected BattleParam mBattleParam = null; /// /// 当前战场 /// protected BattleField mFieldModule = new BattleField(); /// /// 战斗对象管理器 /// protected LogicFighterManager mLogicFightersModel = new LogicFighterManager(); /// /// (技能)子弹管理器 /// protected X2Battle.BulletManager mBulletModel = new X2Battle.BulletManager(); /// /// buff管理器 /// protected BuffManager mBuffModel = new BuffManager(); /// /// 战斗事件处理器 /// protected FieldEventDispatcher mEventDisp = new FieldEventDispatcher(); /// /// 返回上下文环境信息 /// /// 上下文环境信息 public BattleParam Env() { return this.mBattleParam; } /// /// 开始一场战斗 /// /// 战斗参数 public void BattleStart(BattleParam param) { ///战场模块数据间的交互 this.mBattleParam = param; this.mBattleParam.mBattleGlobalOper = this; this.mBattleParam.mBattleInnerOper = this.mFieldModule; this.mBattleParam.mLogicFighterOper = this.mLogicFightersModel; this.mBattleParam.mBulletManagerOpr = this.mBulletModel; this.mBattleParam.mBuffManagerOpr = this.mBuffModel; this.mBattleParam.mEventDisp = this.mEventDisp; this.mBattleParam.ShowAdapter().Initialize(this, this.Env().BattleSceneBundle(), this.Env().BattleSceneBgBundle(), this.Env().levelMode); // 交互模块的初始化 this.mFieldModule.Initialize(this.mBattleParam); this.mLogicFightersModel.Initialize(this.mBattleParam); this.mBulletModel.Initialize(this.mBattleParam); this.mEventDisp.Initialize(this.mBattleParam); this.mBuffModel.Initialize(this.mBattleParam); this.mBattleParam.TimeCenter().Start(); if(GameDateManager.Instance.isMultiRoom) { // 网络回调 MultiBattleProxy.Instance.On_PeopleList = GetPeoplistSC; MultiBattleProxy.Instance.On_BroadCast = NetBattleBroadCastSC; MultiBattleProxy.Instance.On_UpdatePosition = NetBattlePostionSC; MultiBattleProxy.Instance.On_BTStatus = NetBattleStatusSC; // 刷新战斗成员列表 MultiBattleProxy.Instance.GetPeopleList(); } } public void GetPeoplistSC(MultiDup.SC_BT_PeopleList pList) { foreach(var p in pList.PlayerUids) { if(p == UserProxy.Instance.player.uid) { continue; } RoleManager.Instance.CreateFriendPlayers(p, () => { }); } } public void NetBattleBroadCastSC(MultiDup.SC_BT_BroadCast broadMsg) { } public void NetBattlePostionSC(MultiDup.SC_BT_Position positionMsg) { RoleManager.Instance.SetFriendPosition(positionMsg.SenderUid, positionMsg.X, positionMsg.Y, positionMsg.Z); } public void NetBattleStatusSC(MultiDup.SC_BT_Status statusMsg) { RoleManager.Instance.SetFiendStatus(statusMsg.SenderUid, statusMsg.PropertyName, statusMsg.Value); } /// /// 帧调度 /// /// 调度结果 public EBattleUpdateStatus Update() { if (this.Env().IsPause == true) { return EBattleUpdateStatus.Continue; } ///// 计时器调度 //this.mBattleParam.TimeCenter().Update(); ///// 时间 //long now = this.Env().TimeCenter().Now(); ///// 事件调度 //this.mEventDisp.OnUpdateFieldEvent(now); ///// 对象调度 //this.mLogicFightersModel.OnUpdate(now); ///// 技能调度 //this.mBulletModel.OnUpdateBullet(now); ///// buff调度 //this.mBuffModel.OnUpdateBuffs(now); ///// 战场策略调度 //if (this.mFieldModule.CurrentPoilcy().IsComplete()) //{ // if (this.mFieldModule.CurrentPoilcy().Type() == EBattleStaus.EBATTLE_STATUS_FIGHTING) // { // LogHelper.Log(" 清空战场残留,比如Buff"); // mBuffModel.ClearAllBuff(); // } // this.mFieldModule.ChangeFieldPolicy(this.mFieldModule.CurrentPoilcy().Next(), this.mFieldModule.CurrentPoilcy().Result()); //} return this.mFieldModule.OnUpdate(0); } } }