public override void Release() { base.Release(); _WaitTroops.Clear(); _Troops.Clear(); _WaitForUseMapSoldierInfos = null; _CurrentUsedMapSoldierInfos = null; _WatiForUseMapSoldierInfoLast = null; }
private MapSoldierInfo GetMapSoldierInfo() { MapSoldierInfo mapSoldierInfo = null; if (_WaitForUseMapSoldierInfos == null) { mapSoldierInfo = new MapSoldierInfo(); } else { mapSoldierInfo = _WaitForUseMapSoldierInfos; _WaitForUseMapSoldierInfos = _WaitForUseMapSoldierInfos.nextNode; if (_WaitForUseMapSoldierInfos == null) { _WatiForUseMapSoldierInfoLast = null; } mapSoldierInfo.nextNode = null; } return(mapSoldierInfo); }
public override void Update() { if (_Troops.Count <= 0) { if (_IsNotClearSoldiers) { facade.SendNotification(GlobalSetting.Msg_MapUpdateSoldiersPositon, null); _IsNotClearSoldiers = false; } return; } _IsNotClearSoldiers = true; if (battleManager.isBattleOver) { return; } int total; AStarPathFindingAgent agent; System.Random random = new System.Random(); //出兵 for (int i = 0; i < _Troops.Count; i++) { Troop troop = _Troops[i]; if (troop.amount <= 0) { continue; } total = troop.start.soldierNum - _CreateCountPerFrame < 0 ? troop.start.soldierNum : _CreateCountPerFrame; total = troop.amount > total ? total : troop.amount; troop.start.soldierNum -= total; troop.amount -= total; _Troops[i] = troop; for (int j = 0; j < total; j++) { //创建指定数量的兵 GameObject soldier = PoolManager.Instance.GetObject("Soldier", LoadAssetType.Normal, _SoldierParent); soldier.transform.position = troop.start.postion + Vector3.left * random.Next(-100, 100) / 200f + Vector3.forward * random.Next(-100, 100) / 200f; agent = soldier.GetComponent <AStarPathFindingAgent>(); agent.SetTarget(troop.end.postion); agent.StopDistance = troop.end.radius + 0.5f; agent.AddCompleteListener(() => { //士兵到达处理 SoldierArrivedHandler(troop, soldier); //TODO 处理占领,失败,胜利 //if(troop.soldiers.Count <= 0 && troop.amount <= 0) _WaitTroops.Add(troop); }); troop.soldiers.Add(soldier); } } //移除 for (int i = _Troops.Count - 1; i >= 0; i--) { if (_Troops[i].amount <= 0 && _Troops[i].soldiers.Count <= 0) { _WaitTroops.Add(_Troops[i]); _Troops.RemoveAt(i); } } //回收士兵链表 if (_CurrentUsedMapSoldierInfos.nextNode != null) { if (_WatiForUseMapSoldierInfoLast == null) { _WatiForUseMapSoldierInfoLast = _CurrentUsedMapSoldierInfos.nextNode; } else { _WatiForUseMapSoldierInfoLast.nextNode = _CurrentUsedMapSoldierInfos.nextNode; } if (_WaitForUseMapSoldierInfos == null) { _WaitForUseMapSoldierInfos = _WatiForUseMapSoldierInfoLast; } if (_WatiForUseMapSoldierInfoLast.nextNode != null) { MapSoldierInfo mapSoldierInfo = _WatiForUseMapSoldierInfoLast; while (mapSoldierInfo.nextNode != null) { mapSoldierInfo = mapSoldierInfo.nextNode; } _WatiForUseMapSoldierInfoLast = mapSoldierInfo; } } _CurrentUsedMapSoldierInfos.nextNode = null; MapSoldierInfo nextNode = _CurrentUsedMapSoldierInfos; //发送小地图士兵位置信息 for (int i = 0; i < _Troops.Count; i++) { for (int j = 0; j < _Troops[i].soldiers.Count; j++) { nextNode.nextNode = GetMapSoldierInfo(); nextNode = nextNode.nextNode; nextNode.coloerIndex = _Troops[i].starter.colorIndex; nextNode.position = _Troops[i].soldiers[j].transform.localPosition; } } if (_CurrentUsedMapSoldierInfos.nextNode != null) { facade.SendNotification(GlobalSetting.Msg_MapUpdateSoldiersPositon, _CurrentUsedMapSoldierInfos.nextNode); } }
public override void Initialize() { _SoldierParent = GameObject.FindGameObjectWithTag(GlobalSetting.TAG_SOLDIERS_PARENT_NAME).transform; _BuildingProxy = facade.RetrieveProxy(BuildingVOProxy.NAME) as BuildingVOProxy; _CurrentUsedMapSoldierInfos = new MapSoldierInfo(); }