private void ShowMenuEditor() { BlockMenuDataManager bm = BlockMenuDataManager.Instance; if (bm.menu == null) { return; } GUI.changed = false; bm.menu.name = EditorGUILayout.TextField("Menu Name", bm.menu.name); if (GUI.changed) { dirty = true; } int level = 1; if (bm.menu.rootPanel == null) { if (GUILayout.Button("Create Root Panel")) { BlockPanelData panel = new BlockPanelData(); bm.menu.rootPanel = panel; dirty = true; } } else { DrawBlockPanel(bm.menu.rootPanel, level); } }
/// <summary> /// 创建一级菜单 /// </summary> /// <param name="panelData">菜单所使用的数据</param> /// <param name="parentButton">打开菜单的按钮,如果为null表示根菜单</param> /// <returns></returns> private BlockPanel CreatePanel(BlockPanelData panelData, BlockButton parentButton) { //GameObject panelObj = PrefabUtils.CreateGameObjectToParent(MenuBase.gameObject, panelPrefab); GameObject panelObj = new GameObject("Panel"); panelObj.transform.parent = MenuBase.transform; panelObj.transform.localPosition = Vector3.zero; panelObj.transform.localScale = Vector3.one; BlockPanel panel = panelObj.AddComponent <BlockPanel>(); panel.menu = this; if (parentButton != null) { parentButton.AddNextPanel(panel); } for (int i = 0; i < panelData.buttons.Count; i++) { BlockButtonData buttonData = panelData.buttons[i]; if (buttonData != null) { BlockButton button = CreateButton(panel, (QUADRANT)i, buttonData); if (buttonData.subPanel != null) { BlockPanel subPanel = CreatePanel(buttonData.subPanel, button); } } } return(panel); }
public void DrawBlockPanel(BlockPanelData panel, int level, int fromQuadrant = -1) { for (int j = panel.buttons.Count; j < order.Length; j++) { panel.buttons.Add(null); } string panelTitle = level == 1 ? "Root Panel" : "Level " + level + " Panel"; if (EditorTools.DrawHeader(panelTitle)) { EditorTools.BeginContents(); for (int i = 0; i < order.Length; i++) { int quadrant = order[i]; string name = names[i]; if (EditorTools.DrawHeader(panelTitle + " -- " + names[quadrant] + " Button")) { EditorTools.BeginContents(); if (IsOppositeQuadrant(quadrant, fromQuadrant)) { EditorGUILayout.LabelField("Can not use"); } else { BlockButtonData button = panel.buttons[quadrant]; if (button == null) { if (GUILayout.Button("Create Button")) { button = new BlockButtonData(); panel.buttons[quadrant] = button; dirty = true; } } else { DrawBlockButton(button, quadrant, level); if (GUILayout.Button("Delete Button")) { panel.buttons[quadrant] = null; dirty = true; } } } EditorTools.EndContents(); } } if (GUI.changed) { dirty = true; } EditorTools.EndContents(); } }