public void CreateMenu(MenuManager helper, MenuConfig menuConfig) { if (helper == null) { Debug.LogError("MenuManager passed in CreateMenu is null. Menu generation will not proceed."); return; } if (menuConfig == null) { Debug.LogError("MenuConfig passed in CreateMenu is null. Menu generation will not proceed."); return; } helper.MenuConfig = menuConfig; List <PanelManager> panels = new List <PanelManager>(); foreach (PanelConfig panel in menuConfig.PanelConfigs) { PanelManager manager = CreatePanel(helper, Parent, panel, menuConfig); panels.Add(manager); } helper.Panels = panels.ToArray(); }
public PanelManager CreatePanel(MenuManager menuManager, GameObject parent, PanelConfig config, MenuConfig menuConfig) { GameObject prefab = config.PrefabOverride == null ? PanelPrefab : config.PrefabOverride; GameObject panel = Instantiate(prefab, parent.transform); panel.name = config.Key; PanelManager manager = panel.GetComponent <PanelManager>(); if (manager == null) { manager = panel.AddComponent <PanelManager>(); } manager.Key = config.Key; manager.Manager = menuManager; manager.Config = config; PanelDictionary.Add(config.Key, panel); if (config.SupplementalObjects != null) { List <GameObject> supplementalObjects = new List <GameObject>(); foreach (GameObject supPrefab in config.SupplementalObjects) { GameObject supObj = Instantiate(supPrefab, parent.transform); supplementalObjects.Add(supObj); } manager.OtherObjects = supplementalObjects.ToArray(); } Dictionary <string, GameObject> dict = new Dictionary <string, GameObject>(); List <Selectable> selectableObjects = new List <Selectable>(); List <UIElementManager> panelElements = new List <UIElementManager>(); foreach (PanelObjectConfig objConfig in config.PanelObjects) { GameObject go = objConfig.Create(manager.Parent == null ? panel : manager.Parent); UIElementManager elementManager = go.GetComponentInChildren <UIElementManager>(); // UIElementManager can be null, for instance for an element with no interaction // (e.g. just text). if (elementManager != null) { panelElements.Add(elementManager); elementManager.PanelObjectConfig = objConfig; elementManager.SetColors(objConfig.PaletteConfig ? objConfig.PaletteConfig : menuConfig.PaletteConfig); if (elementManager.SelectableObject != null && elementManager.SelectableObject.GetComponent <Selectable>() != null) { selectableObjects.Add(elementManager.SelectableObject.GetComponent <Selectable>()); } } objConfig.CreationCallback?.Invoke(go); dict[objConfig.Key] = go; if (objConfig.Key == config.DefaultSelectableKey) { if (elementManager != null) { manager.DefaultInput = elementManager.SelectableObject; } else { Debug.LogWarningFormat("Attempting to set the default selectable to non-selectable object {0}. Either add a UIElementManager subclass to the object, or change the default object.", go); } } } manager.ElementManagers = panelElements.ToArray(); // Set the default selectable to the callback value, if it exists and // returns a valid object. GameObject callbackSelectable = config.DefaultSelectableCallback?.Invoke(manager, new List <Selectable>(selectableObjects)); if (callbackSelectable != null) { manager.DefaultInput = callbackSelectable; } // Hook up navigation with elements with selectable objects. if (config.Navigation == PanelConfig.NavigationType.Custom) { // Create new lists here just in case I end up wanting to use them later or // they declare two navigation callbacks and stomp all over the list with // the first. config.NavigationCallback?.Invoke(new List <Selectable>(selectableObjects)); config.PanelNavigationCallback?.Invoke(manager, new List <Selectable>(selectableObjects)); } else if (config.Navigation == PanelConfig.NavigationType.AutomaticUnity) { foreach (Selectable selectable in selectableObjects) { Navigation navigation = new Navigation(); navigation.mode = config.NavigationMode; selectable.navigation = navigation; } } else if (config.Navigation == PanelConfig.NavigationType.Horizontal) { MenuGenerator.SetHorizontalNavigation(selectableObjects); } else { MenuGenerator.SetVerticalNavigation(selectableObjects); } PanelObjectDictionary[config.Key] = dict; config.CreationCallback?.Invoke(panel, manager); return(manager); }
protected virtual void ActivatePanel(PanelManager oldPanel, PanelManager newPanel, bool fromPush) { EnablePanel(newPanel); DisableOtherPanels(newPanel); }