Exemple #1
0
    /// <summary>
    /// Функция, описывающая процесс инициализации прямоугольника
    /// </summary>
    /// <param name="position">Позиция, в которой создается прямоугольник</param>
    public void InstantiateObject(Vector3 position)
    {
        //Создаем переменную под контроллер прямоугольника
        RectangleController rectangleController = null;

        //Если пул выключенных объектов пуст
        if (_poolOfDisabled.Count == 0)
        {
            //Создаем новый прямоугольник
            GameObject newItem = Instantiate(_poolObjectPrefab, transform);
            rectangleController = newItem.GetComponent <RectangleController>();

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

            //Подписываемся на событие отключение только что созданного объекта
            rectangleController.ObjectDisabledEvent.AddListener(OnDisabledObj);
        }
        //Если в пуле выключенных объектов есть элементы
        else
        {
            //Переносим выключенный объект из пула неактивных элементов в пул активных
            _poolOfEnabled.Add(_poolOfDisabled[_poolOfDisabled.Count - 1]);
            _poolOfDisabled.RemoveAt(_poolOfDisabled.Count - 1);
            rectangleController = (RectangleController)_poolOfEnabled[_poolOfEnabled.Count - 1];
        }

        //Устанавливаем позицию прямоугольника в указанную точку
        rectangleController.transform.position = new Vector3(position.x, position.y, 0);

        //Включить прямоугольник
        _poolOfEnabled[_poolOfEnabled.Count - 1].Enable();
    }
Exemple #2
0
 /// <summary>
 /// Функция, сбрасывающая выделение выделенного прямоугольника, если он соответсвует переданному
 /// </summary>
 /// <param name="_rect">Прямоугольник для проверки</param>
 public void TryToClearCheckedRect(RectangleController _rect)
 {
     if (_rect1ToCreateConnection != null && _rect == _rect1ToCreateConnection)
     {
         _rect1ToCreateConnection = null;
     }
 }
Exemple #3
0
        /// <summary>
        /// Initiates all common controllers and objects
        /// </summary>
        private void Awake()
        {
            // Singleton
            Instance = this;

            // Cache main camera reference
            if (Camera.main != null)
            {
                mainCamera = Camera.main;
            }
            else
            {
                Debug.LogWarning("Main camera not found");
            }

            // Create object pools with rectangles and lines
            var rectanglePrefab = Resources.Load <GameObject>("Rectangle");
            var linePrefab      = Resources.Load <GameObject>("Line");

            objectPooler = new ObjectPooler {
                Pools = new ObjectPooler.Pool[2]
            };
            objectPooler.Pools[0] = new ObjectPooler.Pool()
            {
                name = "Rectangles", prefab = rectanglePrefab, size = 50
            };
            objectPooler.Pools[1] = new ObjectPooler.Pool()
            {
                name = "Lines", prefab = linePrefab, size = 50
            };

            // Create all controllers
            inputController     = new InputController();
            rectangleController = new RectangleController();
            lineController      = new LineController();

            // Create arrays with controllers for Start() and Update() calls
            _controllersToInit   = new IInit[1];
            _controllersToUpdate = new IUpdate[1];

            _controllersToInit[0] = objectPooler;

            _controllersToUpdate[0] = inputController;
        }
Exemple #4
0
 /// <summary>
 /// Конструктор структуры
 /// </summary>
 /// <param name="_rect1">Первый прямоугольник</param>
 /// <param name="_rect2">Второй прямоугольник</param>
 public PoolOfConnectionObjectParameters(RectangleController _rect1, RectangleController _rect2)
 {
     rect1 = _rect1;
     rect2 = _rect2;
 }
Exemple #5
0
 IController IControllable.GetController()
 {
     return(_controller ?? (_controller = new RectangleController(this)));
 }
 public IController GetController()
 {
     return(_controller ?? (_controller = new RectangleController(this)));
 }
 /// <summary>
 /// Функция, выключающая объект
 /// </summary>
 /// <param name="_rect">Объект, который вызвал выключение связи</param>
 public void DisableObj(RectangleController _rect)
 {
     DisableObj();
 }
Exemple #8
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);
    }
Exemple #9
0
 IController IControllable.GetController()
 {
     return(_controller ?? (_controller = new CommentBoxController(this)));
 }