Beispiel #1
0
        /// <summary>
        /// Создать контроллер
        /// </summary>
        /// <param name="context">Контекст</param>
        /// <param name="viewPath">Путь к вью</param>
        /// <param name="projection">Проекция данных</param>
        /// <returns></returns>
        public ViewControllerComposite Create(Contexts context, string viewPath, IEntityProjection projection)
        {
            Queue <ViewControllerComposite> queue;

            if (_destroyed.TryGetValue(viewPath, out queue) == false)
            {
                queue = new Queue <ViewControllerComposite>();

                _destroyed.Add(viewPath, queue);
            }

            ViewControllerComposite viewController;

            if (queue.Count == 0)
            {
                var viewPrefab = _viewPrefabs.GetValue(viewPath);

                var viewObj = GameObject.Instantiate(viewPrefab);

                var viewControllers = viewObj.GetComponentsInChildren <IViewController>(true);

                viewController = new ViewControllerComposite(viewPath, viewObj, viewControllers);

                viewController.BeginController(context);
            }
            else
            {
                viewController = queue.Dequeue();
            }

            viewController.OpenController(projection);

            return(viewController);
        }
        /// <summary>
        /// Вызывается при открытии контроллера представления
        /// </summary>
        /// <param name="projection">Проекция данных</param>
        public void OpenController(IEntityProjection projection)
        {
            if (_viewObj.activeSelf == false)
            {
                _viewObj.SetActive(true);
            }

            // Присоединим сущность к объекту
            _viewObj.Link((IEntity)projection);

            for (int i = 0; i < _viewControllers.Length; i++)
            {
                _viewControllers[i].OpenController(projection);
            }
        }
Beispiel #3
0
 void IViewController.OpenController(IEntityProjection projection)
 {
     OnOpenController((TProjection)projection);
 }