/// <summary>
    /// Функция, описывающая процесс инициализации элемента пула
    /// </summary>
    /// <param name="_createParameter">Параметры создания</param>
    public new void InstantiateObject(PoolObjectParameters _createParameter)
    {
        //Если пул выключенных объектов пуст
        if (_poolOfDisabled.Count == 0)
        {
            //Создаем новый элемент
            GameObject newItem = Instantiate(_poolObjectPrefab, transform);
            RectConnectionController rectConnectionController = newItem.GetComponent <RectConnectionController>();

            //Добавляем созданный прямоугольник в пул активных элементов
            _poolOfEnabled.Add(rectConnectionController);

            //Подписываемся на событие отключение только что созданного объекта
            rectConnectionController.ObjectDisabledEvent.AddListener(OnDisabledObj);
        }
        //Если в пуле выключенных объектов есть элементы
        else
        {
            //Переносим выключенный объект из пула неактивных элементов в пул активных
            _poolOfEnabled.Add(_poolOfDisabled[_poolOfDisabled.Count - 1]);
            _poolOfDisabled.RemoveAt(_poolOfDisabled.Count - 1);
        }
        //Включить созданный элемент
        _poolOfEnabled[_poolOfEnabled.Count - 1].Enable(_createParameter);
    }
Example #2
0
    /// <summary>
    /// Функция, описывающая процесс инициализации объекта
    /// </summary>
    /// <param name="_createParameter">Параметры создания</param>
    public new void InstantiateObject(PoolObjectParameters _createParameter)
    {
        //Создаем переменную под контроллер объекта
        ExplosionController explosionController = null;

        //Если пул выключенных объектов пуст
        if (_poolOfDisabled.Count == 0)
        {
            //Создаем новую пулю
            GameObject newItem = Instantiate(PoolObjectPrefab, transform);
            explosionController = newItem.GetComponent <ExplosionController>();

            //Добавляем созданный объект в пул активных элементов
            _poolOfEnabled.Add(explosionController);

            //Подписываемся на событие отключение только что созданного объекта
            explosionController.ObjectDisabledEvent.AddListener(OnDisabledObj);
        }
        //Если в пуле выключенных объектов есть элементы
        else
        {
            //Переносим выключенный объект из пула неактивных элементов в пул активных
            _poolOfEnabled.Add(_poolOfDisabled[_poolOfDisabled.Count - 1]);
            _poolOfDisabled.RemoveAt(_poolOfDisabled.Count - 1);
            explosionController = (ExplosionController)_poolOfEnabled[_poolOfEnabled.Count - 1];
        }
        //Включить объект
        _poolOfEnabled[_poolOfEnabled.Count - 1].Enable(_createParameter);
    }
Example #3
0
    /// <summary>
    /// Функция для включения и инициализации объекта
    /// </summary>
    /// <param name="_parameters">Параметры, необходимые для инициализации (необязательно)</param>
    /// <returns>Успешность инициализации</returns>
    public bool Enable(PoolObjectParameters _parameters = null)
    {
        RocketPoolObjectParameters initializeParameters = (RocketPoolObjectParameters)_parameters;

        //Устанавливаем параметры инициализации
        _damage            = initializeParameters.damage;
        _spawnPoint        = initializeParameters.spawnTransform;
        _poolOfExplosions  = initializeParameters.poolOfExplosions;
        transform.position = _spawnPoint.position;
        transform.rotation = _spawnPoint.rotation;

        //Сбросить ускорения rigidbody
        _rb.velocity        = Vector2.zero;
        _rb.angularVelocity = 0;

        //Выключаем хвост огня
        _fireSprite.SetActive(false);

        //Переключаем режим RigidBody, чтобы не просчитывались импульсы столкновений
        _rb.bodyType = RigidbodyType2D.Kinematic;

        //Устанавливаем состояние активации
        _activated = false;

        //Включаем объект
        gameObject.SetActive(true);

        //Возвращаем успешный результат
        return(true);
    }
Example #4
0
 /// <summary>
 /// Функция, описывающая процесс отключения объекта и перемещение его в резерв
 /// </summary>
 /// <param name="_objParameter">Параметры объекта, которого необходимо отключить</param>
 public virtual void DisableObj(PoolObjectParameters _objParameter)
 {
     //Ищем указанный объект в пуле активных элементов
     for (int i = 0; i < _poolOfEnabled.Count; i++)
     {
         //Если нашли искомый объект
         if (_poolOfEnabled[i].GetPoolObjectParameters() == _objParameter)
         {
             //Отключить объект
             _poolOfEnabled[i].DisableObj();
             return;
         }
     }
 }
Example #5
0
 /// <summary>
 /// Фунция проверяющая наличие элемента в пуле
 /// </summary>
 /// <param name="_searchParameters">Параметры поиска</param>
 /// <returns>Наличие или отсутствие в пуле</returns>
 public virtual bool IsPoolObjectExist(PoolObjectParameters _searchParameters)
 {
     //Перебираем пул активных элементов
     for (int i = 0; i < _poolOfEnabled.Count; i++)
     {
         if (_poolOfEnabled[i].GetPoolObjectParameters() == _searchParameters)
         {
             //Возвратить, что поиск окончился успешно
             return(true);
         }
     }
     //Возвратить, что поиск окончился неуспешно
     return(false);
 }
    /// <summary>
    /// Функция для включения и инициализации объекта
    /// </summary>
    /// <param name="_parameters">Параметры, необходимые для инициализации (необязательно)</param>
    /// <returns>Успешность инициализации</returns>
    public bool Enable(PoolObjectParameters _parameters = null)
    {
        //Фиксируем время создания
        _bornTime = Time.time;
        timeOfCreateLastRectangle = _bornTime;

        //Устанавливаем случайный цвет прямоугольника
        _image.color = new Color32((byte)Random.Range(0, 256), (byte)Random.Range(0, 256), (byte)Random.Range(0, 256), 255);

        //включаем объект
        gameObject.SetActive(true);

        //Возвращаем успешный результат
        return(true);
    }
    /// <summary>
    /// Фунция проверяющая наличие элемента в пуле
    /// </summary>
    /// <param name="_searchParameters">Параметры поиска</param>
    /// <returns>Наличие или отсутствие в пуле</returns>
    public new bool IsPoolObjectExist(PoolObjectParameters _searchParameters)
    {
        //Конвертируем полученные параметры в нужный формат
        PoolOfConnectionObjectParameters searchParameters = (PoolOfConnectionObjectParameters)_searchParameters;

        //Перебираем пул активных элементов
        for (int i = 0; i < _poolOfEnabled.Count; i++)
        {
            if ((PoolOfConnectionObjectParameters)_poolOfEnabled[i].GetPoolObjectParameters() == searchParameters)
            {
                //Возвратить, что поиск окончился успешно
                return(true);
            }
        }
        //Возвратить, что поиск окончился неуспешно
        return(false);
    }
Example #8
0
    /// <summary>
    /// Функция для включения и инициализации объекта
    /// </summary>
    /// <param name="_parameters">Параметры, необходимые для инициализации (необязательно)</param>
    /// <returns>Успешность инициализации</returns>
    public bool Enable(PoolObjectParameters _parameters = null)
    {
        _healthController.CurrHP = _healthController.MaxHP;

        //включаем объект
        gameObject.SetActive(true);

        //Проставляем цель для преследования, если преследуем игрока при активации противника
        if (_playerIsTargetOnStart && PlayerController.Instance != null)
        {
            _target     = PlayerController.Instance.transform;
            _phC.Target = _target;
        }

        //Возвращаем успешный результат
        return(true);
    }
Example #9
0
    /// <summary>
    /// Функция, возвращающая элемент пула
    /// </summary>
    /// <param name="_searchParameters">Параметры поиска</param>
    /// <param name="_resultObject">Возращаемый элемент</param>
    /// <returns>Успешность поиска</returns>
    public virtual bool TryGetPoolObject(PoolObjectParameters _searchParameters, ref IPoolObject _resultObject)
    {
        //Перебираем пул активных элементов
        for (int i = 0; i < _poolOfEnabled.Count; i++)
        {
            //Если мы нашли нужный элемент
            if (_poolOfEnabled[i].GetPoolObjectParameters() == _searchParameters)
            {
                //Заполнить возвращаемый элемент
                _resultObject = _poolOfEnabled[i];

                //Возвратить, что поиск окончился успешно
                return(true);
            }
        }
        //Возвратить, что поиск окончился неуспешно
        return(false);
    }
Example #10
0
 /// <summary>
 /// Функция, описывающая процесс инициализации элемента пула
 /// </summary>
 /// <param name="_createParameter">Параметры создания</param>
 public virtual void InstantiateObject(PoolObjectParameters _createParameter)
 {
     //Если пул выключенных объектов пуст
     if (_poolOfDisabled.Count == 0)
     {
         //Создаем новый элемент
         GameObject newItem = Instantiate(_poolObjectPrefab, transform);
         _poolOfEnabled.Add(newItem.GetComponent <IPoolObject>());
     }
     //Если в пуле выключенных объектов есть элементы
     else
     {
         //Переносим выключенный объект из пула неактивных элементов в пул активных
         _poolOfEnabled.Add(_poolOfDisabled[_poolOfDisabled.Count - 1]);
         _poolOfDisabled.RemoveAt(_poolOfDisabled.Count - 1);
     }
     //Включить элемент
     _poolOfEnabled[_poolOfEnabled.Count - 1].Enable(_createParameter);
 }
    /// <summary>
    /// Функция, возвращающая элемент пула
    /// </summary>
    /// <param name="_searchParameters">Параметры поиска</param>
    /// <param name="_resultObject">Возращаемый элемент</param>
    /// <returns>Успешность поиска</returns>
    public new bool TryGetPoolObject(PoolObjectParameters _searchParameters, ref IPoolObject _resultObject)
    {
        //Конвертируем полученные параметры в нужный формат
        PoolOfConnectionObjectParameters searchParameters = (PoolOfConnectionObjectParameters)_searchParameters;

        //Перебираем пул активных элементов
        for (int i = 0; i < _poolOfEnabled.Count; i++)
        {
            //Если мы нашли нужный элемент
            if ((PoolOfConnectionObjectParameters)_poolOfEnabled[i].GetPoolObjectParameters() == searchParameters)
            {
                //Заполнить возвращаемый элемент
                _resultObject = _poolOfEnabled[i];

                //Возвратить, что поиск окончился успешно
                return(true);
            }
        }
        //Возвратить, что поиск окончился неуспешно
        return(false);
    }
    /// <summary>
    /// Функция для включения и инициализации объекта
    /// </summary>
    /// <param name="_parameters">Параметры, необходимые для инициализации (необязательно)</param>
    /// <returns>Успешность инициализации</returns>
    public bool Enable(PoolObjectParameters _parameters = null)
    {
        ExplosionPoolObjectParameters initializeParameters = (ExplosionPoolObjectParameters)_parameters;

        //Устанавливаем параметры инициализации
        _damage            = initializeParameters.damage;
        transform.position = initializeParameters.spawnTransform.position;
        transform.rotation = initializeParameters.spawnTransform.rotation;

        //Сбросить ускорения rigidbody
        _rb.velocity        = Vector2.zero;
        _rb.angularVelocity = 0;

        //Включаем объект
        gameObject.SetActive(true);

        //Включаем корутину для отключения по таймеру
        StartCoroutine(Activate_Couroutine(initializeParameters.timeToLive));

        //Возвращаем успешный результат
        return(true);
    }
    /// <summary>
    /// Функция для включения и инициализации объекта
    /// </summary>
    /// <param name="_parameters">Параметры, необходимые для инициализации (необязательно)</param>
    /// <returns>Успешность инициализации</returns>
    public bool Enable(PoolObjectParameters _parameters = null)
    {
        BulletPoolObjectParameters initializeParameters = (BulletPoolObjectParameters)_parameters;

        //Устанавливаем параметры инициализации
        _damage            = initializeParameters.damage;
        transform.position = initializeParameters.spawnTransform.position;
        transform.rotation = initializeParameters.spawnTransform.rotation;

        //Включаем объект
        gameObject.SetActive(true);

        //Сбросить ускорения rigidbody
        _rb.velocity        = Vector2.zero;
        _rb.angularVelocity = 0;

        //Задаем импульс для полета
        _rb.AddRelativeForce(Vector2.up * _speed * _rb.mass);

        //Возвращаем успешный результат
        return(true);
    }
    /// <summary>
    /// Функция для включения и инициализации объекта
    /// </summary>
    /// <param name="_parameters">Параметры, необходимые для инициализации (необязательно)</param>
    /// <returns>Успешность инициализации</returns>
    public bool Enable(PoolObjectParameters _parameters)
    {
        //Сохраняем локально параметры индексирования элемента, конвертируя в нужный формат
        _rects = (PoolOfConnectionObjectParameters)_parameters;

        //Если произошла ошибочная ситуация - возвратить неудачный результат
        if (_rects.rect1 == null || _rects.rect2 == null || _rects.rect1 == _rects.rect2)
        {
            return(false);
        }

        //Сбрасываем флаг режима отслеживания
        _moving = false;

        //Подписываемся на события изменения состояний связанных прямоугольников
        _rects.rect1.ObjectDisabledEvent.AddListener(DisableObj);
        _rects.rect2.ObjectDisabledEvent.AddListener(DisableObj);

        _rects.rect1.RectStartMoving.AddListener(EnableMoving);
        _rects.rect2.RectStartMoving.AddListener(EnableMoving);

        _rects.rect1.RectEndMoving.AddListener(DisableMoving);
        _rects.rect2.RectEndMoving.AddListener(DisableMoving);

        //Обновляем позиции для отрисовки линии связи
        UpdatePositions();

        //Включаем объект
        gameObject.SetActive(true);

        //Вызываем событие включения объекта
        ObjectEnabledEvent.Invoke(this);

        //Возвращаем успешный результат выполнения функции
        return(true);
    }
Example #15
0
    /// <summary>
    /// Функция, создающая соединение между прямоугольниками (если это возможно).
    /// </summary>
    /// <param name="_rect">Прямоугольник для которого нужно создать связь</param>
    /// <returns>Успешность выполнения</returns>
    public bool TryToCreateConnection(RectangleController _rect)
    {
        //Если передан пустой параметр передать неуспешный результат
        if (_rect == null)
        {
            return(false);
        }

        //Если первый выделенный прямоугольник не пустой, но при этом он ссылается
        //на выключенный объект - очистить ссылку на первый выделенный прямоугольник
        if (_rect1ToCreateConnection != null && !_rect1ToCreateConnection.GetState())
        {
            _rect1ToCreateConnection = null;
        }

        //Если пытаемся создать связь с одним и тем же прямоугольником
        if (_rect1ToCreateConnection == _rect)
        {
            //Снимаем выделение
            _rect.UncheckRect();
            //Очищаем ссылку на первый выделенный прямоугольник
            _rect1ToCreateConnection = null;

            //Возвращаем неудачный результат
            return(false);
        }

        //Если ссылка на первый выделенный прямоугольник пуста
        if (_rect1ToCreateConnection == null)
        {
            //Сохраняем ссылку на первый выделенный прямоугольник
            _rect1ToCreateConnection = _rect;

            //Выделяем прямоугольник
            _rect1ToCreateConnection.CheckRect();
        }

        //Если ссылка на первый выделенный прямоугольник не пуста
        else
        {
            //Создаем параметры для создания связи прямоугольников
            PoolObjectParameters tmpParameters = (PoolObjectParameters) new PoolOfConnectionObjectParameters(_rect1ToCreateConnection, _rect);

            //Если в пуле связей не существует связи со идентичными параметрами
            if (!_poolOfConnections.IsPoolObjectExist(tmpParameters))
            {
                //Создадим объект связи
                _poolOfConnections.InstantiateObject(tmpParameters);

                //Снимаем выделение с прямоугольников, используемого для создания связи
                _rect1ToCreateConnection.UncheckRect();
                _rect.UncheckRect();

                //Очищаем ссылку на первый выделенный прямоугольник
                _rect1ToCreateConnection = null;
            }
        }

        //Возвратить успешный результат
        return(true);
    }