protected void onFetch(string error, JSONObject result) { if (!string.IsNullOrEmpty(error)) { DebugManager.Log(error); } else { _pages = new Dictionary <int, MagicUIPage>(); _pagesByName = new Dictionary <string, int>(); _pageStack = new Stack <int>(); JSONObject pages = result["pages"]; string firstPage = result["firstPage"].str; for (int i = 0; i < pages.list.Count; i++) { MagicUIPage page = MagicUIPage.CreateFromMarkup(pages.keys[i], pages.list[i]); if (page != null) { _pages.Add(page.ID, page); _pagesByName.Add(page.name, page.ID); if (page.name == firstPage) { _homePage = page.ID; page.IsVisible = true; _pageStack.Push(_homePage); } else { page.IsVisible = false; } } } setupBackground(); } }
public void ShowPage(int pageID) { if (_pages == null) { return; } int dest = pageID; if (dest < 0) { while (dest < 0) { ++dest; _pageStack.Pop(); } if (_pageStack.Count <= 0) { _pageStack.Push(_homePage); } } else if (_pages.ContainsKey(dest)) { MagicUIPage page = _pages[dest]; if (!page.IsDialog) { _pageStack.Pop(); } _pageStack.Push(dest); } foreach (int key in _pages.Keys) { _pages[key].IsVisible = _pageStack.Contains(key); } }
public static MagicUIPage CreateFromMarkup(string pageName, JSONObject markup) { DebugManager.Log("Creating {0}...", pageName); GameObject go = new GameObject(); go.name = pageName; go.transform.parent = MagicUIManager.Instance.transform; go.transform.localPosition = Vector3.zero; go.transform.localScale = Vector3.one; go.layer = MagicUIManager.Instance.gameObject.layer; UIPanel panel = go.AddComponent <UIPanel>(); panel.depth = _nextPanelDepth; ++_nextPanelDepth; MagicUIPage page = go.AddComponent <MagicUIPage>(); Vector2 pageSize = MagicUIManager.Instance.ScreenSize; float aspect = markup["aspect"].n; page.ID = Mathf.RoundToInt(markup["id"].n); page._expectedSize = pageSize; page._extraSize = Vector2.zero; if (!Mathf.Approximately(MagicUIManager.Instance.Aspect, aspect)) { if (MagicUIManager.Instance.Aspect > aspect) { // Screen is more rectangular than expected // Keep our short dimension fixed and add to the long dimension if (MagicUIManager.Instance.IsPortrait) { // Long dimension is y page._expectedSize.y = page._expectedSize.x * aspect; } else { // Long dimension is x page._expectedSize.x = page._expectedSize.y * aspect; } } else { // Screen is squarer than expected // Keep our long dimension fixed and add to the short dimension if (MagicUIManager.Instance.IsPortrait) { // Short dimension is x page._expectedSize.x = page._expectedSize.y / aspect; } else { // Short dimension is y page._expectedSize.y = page._expectedSize.x / aspect; } } page._extraSize = pageSize - page._expectedSize; } panel.clipping = UIDrawCall.Clipping.SoftClip; panel.clipSoftness = Vector2.one; panel.baseClipRegion = new Vector4(0, 0, pageSize.x, pageSize.y); page.Populate(markup["children"].list); return(page); }