Example #1
0
        public void OnEnable()
        {
#if UNITY_EDITOR
            UnityEditor.Undo.undoRedoPerformed += OnUndoRedoPerformed;
#endif
            // Populate item states
            DebugMenuManager dmm = DebugMenuManager.instance;
            for (int panelIdx = 0; panelIdx < dmm.panelCount; ++panelIdx)
            {
                DebugPanel panel = dmm.GetDebugPanel(panelIdx);
                for (int itemIdx = 0; itemIdx < panel.itemCount; ++itemIdx)
                {
                    DebugItem      item           = panel.GetDebugItem(itemIdx);
                    DebugItemState debugItemState = FindDebugItemState(item);
                    if (debugItemState == null)
                    {
                        debugItemState           = item.handler.CreateDebugItemState();
                        debugItemState.hideFlags = HideFlags.DontSave;
                        debugItemState.Initialize(item);
                        debugItemState.SetValue(item.GetValue());
                        AddDebugItemState(debugItemState);
                    }
                }
            }

            DebugMenuManager.instance.SetDebugMenuState(this);
        }
        public void ReInitializeDebugItemStates()
        {
            CleanUp();
            // Populate item states
            DebugMenuManager dmm = DebugMenuManager.instance;

            for (int panelIdx = 0; panelIdx < dmm.panelCount; ++panelIdx)
            {
                DebugPanel panel = dmm.GetDebugPanel(panelIdx);
                for (int itemIdx = 0; itemIdx < panel.itemCount; ++itemIdx)
                {
                    DebugItem      item           = panel.GetDebugItem(itemIdx);
                    DebugItemState debugItemState = FindDebugItemState(item);
                    if (debugItemState == null)
                    {
                        debugItemState = item.handler.CreateDebugItemState();
                        if (debugItemState != null)
                        {
                            debugItemState.hideFlags = HideFlags.DontSave;
                            debugItemState.Initialize(item);
                            debugItemState.SetValue(item.GetValue());
                            AddDebugItemState(debugItemState);
                        }
                        else
                        {
                            Debug.LogWarning(String.Format("DebugItemState for item {0} of type {1} is not provided.\nDid you implement CreateDebugItemState in your custom Handler?", item.name, item.type));
                        }
                    }
                }
            }

            UpdateAllDebugItems();
        }
        void OnGUI()
        {
            if (m_DebugMenu == null)
            {
                return;
            }

            // Contrary to the menu in the player, here we always render the menu wether it's enabled or not. This is a separate window so user can manage it however they want.
            EditorGUI.BeginChangeCheck();
            DebugMenuUI debugMenuUI      = m_DebugMenu.menuUI;
            int         debugMenuCount   = m_DebugMenu.panelCount;
            int         activePanelIndex = debugMenuUI.activePanelIndex;

            using (new EditorGUILayout.HorizontalScope())
            {
                for (int i = 0; i < debugMenuCount; ++i)
                {
                    GUIStyle style = EditorStyles.miniButtonMid;
                    if (i == 0)
                    {
                        style = EditorStyles.miniButtonLeft;
                    }
                    if (i == debugMenuCount - 1)
                    {
                        style = EditorStyles.miniButtonRight;
                    }

                    string name = m_DebugMenu.GetDebugPanel(i).name;
                    if (GUILayout.Toggle(i == activePanelIndex, new GUIContent(name), style))
                    {
                        activePanelIndex = i;
                    }
                }
            }
            if (EditorGUI.EndChangeCheck())
            {
                debugMenuUI.activePanelIndex = activePanelIndex;
            }

            debugMenuUI.OnEditorGUI();
        }
        public void BuildGUI()
        {
            if (m_Root != null)
            {
                return;
            }

            float kBorderSize = 5.0f;

            m_Root = new GameObject("DebugMenu Root");
            Canvas canvas = m_Root.AddComponent <Canvas>();

            canvas.renderMode = RenderMode.ScreenSpaceOverlay;
            UI.CanvasScaler canvasScaler = m_Root.AddComponent <UI.CanvasScaler>();
            canvasScaler.uiScaleMode         = UI.CanvasScaler.ScaleMode.ScaleWithScreenSize;
            canvasScaler.referenceResolution = new Vector2(800.0f, 600.0f);

            // TODO: Move background an layout to the menu itself.
            m_MainMenuRoot = new GameObject("Background");
            m_MainMenuRoot.AddComponent <CanvasRenderer>();
            var image = m_MainMenuRoot.AddComponent <UI.Image>();

            m_MainMenuRoot.transform.SetParent(m_Root.transform, false);
            image.rectTransform.pivot            = new Vector2(0.0f, 0.0f);
            image.rectTransform.localPosition    = Vector3.zero;
            image.rectTransform.localScale       = Vector3.one;
            image.rectTransform.anchorMin        = new Vector2(0.0f, 0.0f);
            image.rectTransform.anchorMax        = new Vector2(0.5f, 1.0f);
            image.rectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
            image.rectTransform.sizeDelta        = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));
            image.color = kBackgroundColor;

            m_MainPanelLayout = DebugMenuUI.CreateVerticalLayoutGroup("DebugMenu VLayout", true, true, true, false, 5.0f, m_MainMenuRoot);
            RectTransform menuVLRectTransform = m_MainPanelLayout.GetComponent <RectTransform>();

            menuVLRectTransform.pivot            = new Vector2(0.0f, 0.0f);
            menuVLRectTransform.localPosition    = Vector3.zero;
            menuVLRectTransform.localScale       = Vector3.one;
            menuVLRectTransform.anchorMin        = new Vector2(0.0f, 0.0f);
            menuVLRectTransform.anchorMax        = new Vector2(1.0f, 1.0f);
            menuVLRectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
            menuVLRectTransform.sizeDelta        = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));

            // TODO: Move background an layout to the menu itself.
            m_PersistentPanelRoot = new GameObject("Background_Persistent");
            m_PersistentPanelRoot.AddComponent <CanvasRenderer>();
            image = m_PersistentPanelRoot.AddComponent <UI.Image>();
            m_PersistentPanelRoot.transform.SetParent(m_Root.transform, false);
            image.rectTransform.pivot            = new Vector2(0.0f, 0.0f);
            image.rectTransform.localPosition    = Vector3.zero;
            image.rectTransform.localScale       = Vector3.one;
            image.rectTransform.anchorMin        = new Vector2(0.7f, 0.8f);
            image.rectTransform.anchorMax        = new Vector2(1.0f, 1.0f);
            image.rectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
            image.rectTransform.sizeDelta        = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));
            image.color = kBackgroundColor;

            m_PersistentPanelLayout              = DebugMenuUI.CreateVerticalLayoutGroup("DebugMenu VLayout", true, true, true, false, 5.0f, m_PersistentPanelRoot);
            menuVLRectTransform                  = m_PersistentPanelLayout.GetComponent <RectTransform>();
            menuVLRectTransform.pivot            = new Vector2(0.0f, 0.0f);
            menuVLRectTransform.localPosition    = Vector3.zero;
            menuVLRectTransform.localScale       = Vector3.one;
            menuVLRectTransform.anchorMin        = new Vector2(0.0f, 0.0f);
            menuVLRectTransform.anchorMax        = new Vector2(1.0f, 1.0f);
            menuVLRectTransform.anchoredPosition = new Vector2(kBorderSize, kBorderSize);
            menuVLRectTransform.sizeDelta        = new Vector2(-(kBorderSize * 2.0f), -(kBorderSize * 2.0f));

            m_PersistentPanelRoot.SetActive(false);

            DebugMenuUI.CreateTextElement("DebugMenuTitle", "Debug Window", 14, TextAnchor.MiddleCenter, m_MainPanelLayout);

            m_DebugMenuManager.GetPersistentDebugPanel().panelUI.BuildGUI(m_PersistentPanelLayout);
            m_PersistentDebugPanelUI = m_DebugMenuManager.GetPersistentDebugPanel().panelUI;

            for (int i = 0; i < m_DebugMenuManager.panelCount; ++i)
            {
                m_DebugMenuManager.GetDebugPanel(i).panelUI.BuildGUI(m_MainPanelLayout);
                m_DebugPanelUIs[i].SetSelected(false);
            }
        }