IEnumerator CreateUnits() { while (true) { List <Transform> receivers = new List <Transform>(); List <CommandButton> buttons = new List <CommandButton>(); int receiverCount = 0; //поиск кнопок определенного типа в объектах игрока foreach (Transform obj in _player.ObjectList) { ObjectInfo objInfo = obj.GetComponent <ObjectInfo>(); if (objInfo != null) { List <Type> buttonTypeList = CommandButtonTypeGetter.GetCommandButtonTypes(objInfo.CommandButtonInfoArray); if (buttonTypeList.Count == 0) { continue; } bool hasButtons = false; foreach (Type buttonType in buttonTypeList) { CommandButton cb = FindButtonOfType(_player.AvailableCommandButtons, buttonType, typeof(CreateSkeleton_Button)); if (cb != null) { buttons.Add(cb); hasButtons = true; break; //Для упрощения, пока-что берется только первая кнопка } } //если у объекта есть нужная кнопка, то добавляем его в список получателей команды if (hasButtons) { receivers.Add(obj); receiverCount++; if (receiverCount == MaxCreatedUnitsPerCreatingInterval) { break; } } } } //выполнение действия для каждой кнопки в списке foreach (CommandButton cb in buttons) { cb.OnCompPlayerClick(receivers); } yield return(new WaitForSeconds(UnitsCreatingInterval)); } }
public void SetCommandButtonList() { ClearCommandButtonList(); if (_player.ObjectSelector.SelectedObjectsIsBelongsThePlayer()) { //здесь надо предварительно убрать все повтор¤ющиес¤ CommandButtonKitId из _player.ObjectSelector.SelectedObjectList //получение всех типов кнопок в выделенных объектах var allCommandButtonTypes = new List <Type>(); foreach (SelectedObject obj in _player.ObjectSelector.SelectedObjectList) { if (obj.Info != null) { List <Type> buttonTypeList = CommandButtonTypeGetter.GetCommandButtonTypes(obj.Info.CommandButtonInfoArray); foreach (Type type in buttonTypeList) { if (!allCommandButtonTypes.Contains(type)) { allCommandButtonTypes.Add(type); } } } } foreach (CommandButton button in _player.AvailableCommandButtons) { if (allCommandButtonTypes.Contains(button.GetType())) { CommandButtonList.Add(button); } } //здесь должно быть определение окончательного набора отображаемых кнопок //если какие-то кнопки имеют одинаковую позицию, то надо оставить только одну из кнопок, имеющих одинаковую позицию } }
IEnumerator SendToAttack() { while (true) { Transform commandCenter = null; foreach (Transform obj in _player.ObjectList) { if (obj.IsBuilding() && obj.name == "CommandCenter") { commandCenter = obj; break; } } if (commandCenter != null) { Transform target = TargetFindingMethods.FindNearestTargetForCompPlayerAI(commandCenter.transform.position, 1000, _player.EnemyMask); if (target != null) { List <Transform> receivers = new List <Transform>(); List <CommandButton> buttons = new List <CommandButton>(); int attackerCount = 0; //поиск кнопок определенного типа в объектах игрока foreach (Transform obj in _player.ObjectList) { if (obj.IsUnit()) { ObjectInfo objInfo = obj.GetComponent <ObjectInfo>(); if (objInfo != null && objInfo.ObjectAI != null) { var battleUnitAI = objInfo.ObjectAI as BattleUnitAI; if (battleUnitAI != null && battleUnitAI.State == UnitState.Free) { List <Type> buttonTypeList = CommandButtonTypeGetter.GetCommandButtonTypes(objInfo.CommandButtonInfoArray); if (buttonTypeList.Count == 0) { continue; } bool hasButtons = false; foreach (Type buttonType in buttonTypeList) { CommandButton cb = FindButtonOfType(_player.AvailableCommandButtons, buttonType, typeof(AttackTarget_Button)); if (cb != null) { buttons.Add(cb); hasButtons = true; break; } } //если у объекта есть нужная кнопка, то добавляем его в список получателей команды if (hasButtons) { receivers.Add(obj); attackerCount++; if (attackerCount == MaxAttackersPerWave) { break; } } } } } } //выполнения действия для каждой кнопки в списке foreach (CommandButton cb in buttons) { (cb as AttackTarget_Button).SetTarget(target); cb.OnCompPlayerClick(receivers); } } } yield return(new WaitForSeconds(AttackWaveInterval)); } }