Ejemplo n.º 1
0
        /// <summary>
        /// Load UI runtime instances.
        /// </summary>
        /// <param name="data">UI GameData</param>
        protected override void LoadData(UIData data)
        {
            // Create the manager for opening and closing windows
            WindowManager = UIFactory.GenerateEmptyUI("Window Manager", transform).AddComponent <WindowManager>();
            WindowManager.LoadData(data);

            // Create the status bar on the top
            StatusBar = UIFactory.LoadStatusBar(gameObject, data.Config.HorizontalMargins, data.Config.MainMenuBackgroundColor);

            // Create the Main Menu Bar on the bottom
            MainMenu    = UIFactory.LoadToolbar(gameObject, "Main Toolbar", 0.0f, data.Config.MainMenuBackgroundColor);
            MainMenuPip = UIFactory.LoadPip(MainMenu, data.Config.SubMenuBackgroundColor);

            // Create the second layer menu
            float mainMenuHeight = MainMenu.GetComponent <RectTransform>().sizeDelta.y;

            SubMenu = UIFactory.LoadToolbar(gameObject, "Sub Toolbar", mainMenuHeight, data.Config.SubMenuBackgroundColor);
            SubMenu.SetActive(false);

            // Link the main and sub menus
            var mainMenuToolbar = MainMenu.AddComponent <Toolbar>();

            mainMenuToolbar.SubMenu = SubMenu;
            mainMenuToolbar.Pip     = MainMenuPip;

            // Load the Button Groups
            foreach (var buttonGroup in data.ButtonGroups)
            {
                _buttonGroups[buttonGroup.Name] = CreateButtonGroup(buttonGroup, data.Config);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Link actions that reference other GameObjects.
        /// All other GameObjects in dependent stores must already be Instantiated.
        /// </summary>
        /// <param name="data">UI GameData</param>
        protected override void LinkData(UIData data)
        {
            var toolbar = MainMenu.GetComponent <Toolbar>();

            // Link button children and actions
            foreach (var buttonGroupData in data.ButtonGroups)
            {
                var buttonGroup = _buttonGroups[buttonGroupData.Name];

                for (int i = 0; i < buttonGroupData.Buttons.Count; ++i)
                {
                    var buttonData = buttonGroupData.Buttons[i];
                    var button     = buttonGroup.Buttons[i];

                    // Link OnSelect Action -----------------------
                    if (buttonData.OnSelect is OpenSubMenuAction)
                    {
                        var openSubMenuAction  = buttonData.OnSelect as OpenSubMenuAction;
                        var openSubMenuButtons = GameDataStore.Get <ButtonGroup>(GameDataType.ButtonGroup, openSubMenuAction.ButtonGroupName);
                        if (openSubMenuButtons == null)
                        {
                            GameLogger.FatalError("OpenSubMenuAction could not link to non-existant button group '{0}'", openSubMenuAction.ButtonGroupName);
                        }
                        button.OnSelect = () => toolbar.OpenSubMenu(openSubMenuButtons);
                    }
                    else if (buttonData.OnSelect is OpenWindowAction)
                    {
                        var openWindowAction = buttonData.OnSelect as OpenWindowAction;
                        if (!WindowManager.TryGetWindow(openWindowAction.WindowName, out Window _))
                        {
                            GameLogger.FatalError("OpenWindowAction could not link to non-existant window '{0}'", openWindowAction.WindowName);
                        }

                        button.OnSelect = () => WindowManager.OpenWindow(openWindowAction.WindowName, null);
                    }
                    else if (buttonData.OnSelect is OpenWindowWithDataAction)
                    {
                        var openWindowAction = buttonData.OnSelect as OpenWindowWithDataAction;
                        if (!WindowManager.TryGetWindow(openWindowAction.WindowName, out Window _))
                        {
                            GameLogger.FatalError("OpenWindowWithDataAction could not link to non-existant window '{0}'", openWindowAction.WindowName);
                        }

                        button.OnSelect = () => WindowManager.OpenWindow(openWindowAction.WindowName, openWindowAction.DataType, openWindowAction.DataName);
                    }

                    // Link OnDeselect Action -----------------------
                    if (buttonData.OnDeselect is CloseSubMenuAction)
                    {
                        button.OnDeselect = () => toolbar.CloseSubMenu();
                    }
                    else if (buttonData.OnDeselect is CloseWindowAction)
                    {
                        button.OnDeselect = () => WindowManager.CloseWindow();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Convert ButtonGroup GameData into a GameObject in the store.
        /// Uses the Factory methods to load the button group.
        /// </summary>
        private ButtonGroup CreateButtonGroup(ButtonGroupData buttonGroup, UIConfig config)
        {
            Transform menuTransform = null;
            Color     background    = Color.white;
            Color     selected      = Color.white;
            Color     accent        = Color.white;
            bool      active        = true;

            if (buttonGroup is MainButtonGroupData)
            {
                menuTransform = MainMenu.transform;
                background    = config.MainMenuBackgroundColor;
                selected      = config.MainMenuSelectedColor;
                accent        = config.MainMenuAccentColor;
                active        = true;
            }
            else if (buttonGroup is SubButtonGroupData)
            {
                menuTransform = SubMenu.transform;
                background    = config.SubMenuBackgroundColor;
                selected      = config.SubMenuSelectedColor;
                accent        = config.SubMenuAccentColor;
                active        = false;
            }

            var buttonGroupObject = UIFactory.GenerateButtonGroup(
                menuTransform,
                new ButtonGroupArgs()
            {
                Name                  = buttonGroup.Name,
                ArrowLeft             = config.ArrowLeftSprite,
                ArrowRight            = config.ArrowRightSprite,
                Height                = MainMenu.GetComponent <RectTransform>().rect.height,
                PosY                  = 0,
                Left                  = config.HorizontalMargins,
                Right                 = config.HorizontalMargins,
                ButtonSize            = new Vector2(config.ButtonWidth, config.ButtonHeight),
                ButtonsDefaultColor   = background,
                ButtonsMouseOverColor = accent,
                ButtonsSelectedColor  = selected,
                Buttons               = CreateButtonArgs(buttonGroup.Buttons, config)
            });

            buttonGroupObject.SetActive(active);

            return(buttonGroupObject.GetComponent <ButtonGroup>());
        }