Ejemplo n.º 1
0
        /// <summary>
        /// Refreshes and updates the view presenter instance.
        /// </summary>
        public static void UpdateInstance()
        {
#if !UNITY_4_6 && !UNITY_5_0 && !UNITY_5_1 && !UNITY_5_2 && !UNITY_5_3_1 && !UNITY_5_3_2 && !UNITY_5_3_3
            var sceneName = SceneManager.GetActiveScene().name;
#else
            var sceneName = Application.loadedLevelName;
#endif
            if (_instance == null || sceneName != _currentScene)
            {
                _instance     = UnityEngine.Object.FindObjectOfType(typeof(ViewPresenter)) as ViewPresenter;
                _currentScene = sceneName;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Goes through XUML and creates/updates the scene objects.
        /// </summary>
        public static void GenerateViews()
        {
            ViewPresenter.UpdateInstance();
            var viewPresenter = ViewPresenter.Instance;

            viewPresenter.Views.Clear();
            viewPresenter.Views.AddRange(viewPresenter.ViewTypeDataList.Where(y => !y.HideInPresenter).Select(x => x.ViewName).OrderBy(x => x));

            viewPresenter.Themes.Clear();
            viewPresenter.Themes.AddRange(viewPresenter.ThemeData.Select(x => x.ThemeName).OrderBy(x => x));

            // validate views and check for cyclical dependencies
            foreach (var viewType in viewPresenter.ViewTypeDataList)
            {
                viewType.Dependencies.Clear();
                foreach (var dependencyName in viewType.DependencyNames)
                {
                    var dependency = viewPresenter.ViewTypeDataList.Where(x => String.Equals(x.ViewName, dependencyName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();
                    if (dependency == null)
                    {
                        Utils.LogError("[MarkLight] {0}: View contains the child view \"{1}\" that could not be found.", viewType.ViewName, dependencyName);
                        continue;
                    }

                    viewType.Dependencies.Add(dependency);
                }
            }

            // sort view type data by dependencies
            try
            {
                viewPresenter.ViewTypeDataList = SortByDependency(viewPresenter.ViewTypeDataList);
            }
            catch (Exception e)
            {
                Utils.LogError("[MarkLight] Unable to generate views. {0}", e.Message);
                return;
            }

            // destroy layout root
            if (viewPresenter.RootView != null)
            {
                GameObject.DestroyImmediate(viewPresenter.RootView);
            }

            // destroy any remaining objects under the view-presenter that should not be there
            if (viewPresenter.transform.childCount > 0)
            {
                for (int i = viewPresenter.transform.childCount - 1; i >= 0; --i)
                {
                    var go = viewPresenter.transform.GetChild(i).gameObject;
                    Utils.LogWarning("[MarkLight] Removed GameObject \"{0}\" under the view-presenter. View-presenter content is reserved for objects generated by the framework.", go.name);
                    GameObject.DestroyImmediate(go);
                }
            }

            // create main view
            if (!String.IsNullOrEmpty(viewPresenter.MainView))
            {
                var mainView = CreateView(viewPresenter.MainView, viewPresenter, viewPresenter);
                if (mainView != null)
                {
                    viewPresenter.RootView = mainView.gameObject;
                }
            }

            // initialize views
            viewPresenter.Initialize();
        }