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));
        }
    }