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