| | |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | |
| | | using LitJson; |
| | | |
| | | |
| | | public class BattleManager : GameSystemManager<BattleManager> |
| | | { |
| | | public StoryBattleField storyBattleField = null; |
| | | |
| | | protected Dictionary<int, BattleField> battleFields = new Dictionary<int, BattleField>(); |
| | | // 同时只能有一场战斗在进行 guid, battlefield |
| | | protected Dictionary<string, BattleField> battleFields = new Dictionary<string, BattleField>(); |
| | | |
| | | protected LogicUpdate logicUpdate = new LogicUpdate(); |
| | | |
| | | public override void Init() |
| | | { |
| | | base.Init(); |
| | | StartStoryBattle(); |
| | | // StartStoryBattle(); |
| | | logicUpdate.Start(Run); |
| | | } |
| | | |
| | | public override void Release() |
| | | { |
| | | Debug.LogError("who release this one"); |
| | | base.Release(); |
| | | logicUpdate.Destroy(); |
| | | } |
| | | |
| | | public void StartStoryBattle() |
| | | public void CreateStoryBattle(int MapID, int FuncLineID, JsonData extendData, List<TeamBase> redTeamList, List<TeamBase> blueTeamList) |
| | | { |
| | | if (null == storyBattleField) |
| | | { |
| | | storyBattleField = new StoryBattleField(); |
| | | } |
| | | |
| | | TeamBase redTeam = GetStoryTeam();//TeamManager.Instance.GetTeam(TeamType.Story); |
| | | TeamBase blueTeam = GetStoryTeam(); |
| | | storyBattleField.Init(/*这里要加个创建背景的*/redTeam, blueTeam); |
| | | // storyBattleField.Start(); |
| | | storyBattleField.battleRootNode.transform.SetParent(Launch.Instance.transform); |
| | | storyBattleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList); |
| | | } |
| | | |
| | | |
| | | |
| | | public void OnBattleClose(BattleField _battleField) |
| | | { |
| | | |
| | | } |
| | | |
| | | |
| | | #region 截断网络派发包 只收入当前包的后续 |
| | | private bool allow = true; |
| | | |
| | | private Queue<GameNetPackBasic> packQueue = new Queue<GameNetPackBasic>(); |
| | | |
| | | public bool IsCanDistributePackage(GameNetPackBasic _package) |
| | | { |
| | | if (_package is HB425_tagSCTurnFightReportSign) |
| | | { |
| | | HB425_tagSCTurnFightReportSign pkg = _package as HB425_tagSCTurnFightReportSign; |
| | | |
| | | // 0-战报片段开始;1-战报片段结束; |
| | | if (pkg.Sign == 0) |
| | | { |
| | | allow = false; |
| | | } |
| | | else |
| | | { |
| | | allow = true; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (!allow) |
| | | { |
| | | packQueue.Enqueue(_package); |
| | | } |
| | | } |
| | | |
| | | return allow; |
| | | } |
| | | |
| | | public bool DistributeNextPackage() |
| | | { |
| | | if (packQueue.Count > 0) |
| | | { |
| | | GameNetPackBasic pack = packQueue.Dequeue(); |
| | | PackageRegedit.Distribute(pack); |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | private TeamBase GetStoryTeam() |
| | | public void OnConnected() |
| | | { |
| | | TeamBase teamBase = new TeamBase(); |
| | | #if UNITY_EDITOR |
| | | teamBase.FillWithFakeData(); |
| | | #else |
| | | // YYL TODO |
| | | // 根据配表塞英雄 后面可能还要塞其他东西 先放在这里反正 做主线了再转移 |
| | | #endif |
| | | if (!allow) |
| | | { |
| | | allow = true; |
| | | packQueue.Clear(); |
| | | |
| | | return teamBase; |
| | | // 重新发送要上一组战斗包的请求 |
| | | // TODO YYL |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 战报部分 |
| | | |
| | | protected Dictionary<string, Queue<GameNetPackBasic>> battleReportDict = new Dictionary<string, Queue<GameNetPackBasic>>(); |
| | | |
| | | protected Dictionary<string, List<ulong>> battlePackRelationList = new Dictionary<string, List<ulong>>(); |
| | | |
| | | public void PushPackage(string guid, GameNetPackBasic vNetPack) |
| | | { |
| | | Queue<GameNetPackBasic> queue = null; |
| | | |
| | | if (!battleReportDict.TryGetValue(guid, out queue)) |
| | | { |
| | | queue = new Queue<GameNetPackBasic>(); |
| | | } |
| | | |
| | | queue.Enqueue(vNetPack); |
| | | |
| | | List<ulong> uidList = null; |
| | | |
| | | if (!battlePackRelationList.TryGetValue(guid, out uidList)) |
| | | { |
| | | uidList = new List<ulong>(); |
| | | } |
| | | |
| | | uidList.Add(vNetPack.packUID); |
| | | } |
| | | |
| | | public BattleField GetBattleField(ulong packUID) |
| | | { |
| | | return GetBattleField(GetGUID(packUID)); |
| | | } |
| | | |
| | | public BattleField GetBattleField(string guid) |
| | | { |
| | | BattleField battleField = null; |
| | | battleFields.TryGetValue(guid, out battleField); |
| | | if (battleField == null) |
| | | { |
| | | battleField = storyBattleField; |
| | | } |
| | | return battleField; |
| | | } |
| | | |
| | | |
| | | |
| | | public string GetGUID(ulong packUID) |
| | | { |
| | | foreach (var kv in battlePackRelationList) |
| | | { |
| | | if (kv.Value.Contains(packUID)) |
| | | { |
| | | return kv.Key; |
| | | } |
| | | } |
| | | return string.Empty; |
| | | } |
| | | |
| | | |
| | | public void DistributeNextReportPackage(string guid) |
| | | { |
| | | Queue<GameNetPackBasic> queue = null; |
| | | |
| | | if (!battleReportDict.TryGetValue(guid, out queue)) |
| | | { |
| | | Debug.LogError("DistributeNextReportPackage could not find queue for guid : " + guid); |
| | | return; |
| | | } |
| | | |
| | | PackageRegedit.Distribute(queue.Dequeue()); |
| | | |
| | | if (queue.Count <= 0) |
| | | { |
| | | battleReportDict.Remove(guid); |
| | | battlePackRelationList.Remove(guid); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | public BattleField CreateBattleField(string guid, int MapID, int FuncLineID, JsonData extendData, List<TeamBase> redTeamList, List<TeamBase> blueTeamList) |
| | | { |
| | | BattleField battleField = null; |
| | | |
| | | if (battleFields.TryGetValue(guid, out battleField)) |
| | | { |
| | | Debug.LogError("战场已存在 先进行销毁"); |
| | | battleField.Destroy(); |
| | | } |
| | | |
| | | |
| | | battleField = BattleFieldFactory.CreateBattleField(guid, MapID, FuncLineID, extendData, redTeamList, blueTeamList); |
| | | |
| | | battleFields.Add(guid, battleField); |
| | | |
| | | if (string.Empty == guid) |
| | | { |
| | | storyBattleField = battleField as StoryBattleField; |
| | | } |
| | | |
| | | return battleField; |
| | | } |
| | | |
| | | |
| | | // public void OnTurnFightObjAction(battleType, vNetData.TurnNum, (int)vNetData.ObjID) |
| | | |
| | | |
| | | public void Run() |
| | | { |
| | | if (null != storyBattleField) |