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