示例#1
0
 public static void setSpriteSet(UIMultiStateButton.SpriteSet spriteSet, string baseName)
 {
     spriteSet.set_normal(baseName);
     spriteSet.set_disabled(baseName);
     spriteSet.set_hovered(baseName);
     spriteSet.set_pressed(baseName);
     spriteSet.set_focused(baseName);
 }
示例#2
0
        void InitControls()
        {
            LocaleManager.eventLocaleChanged += OnLocaleChanged;
            // 昼夜转换
            btnDayNightSwitch                  = this.AddUIComponent <UIButton>();
            btnDayNightSwitch.size             = new Vector2(18, 9);
            btnDayNightSwitch.relativePosition = new Vector3(4, 6);
            btnDayNightSwitch.normalBgSprite   = "IconSunMoon";
            btnDayNightSwitch.playAudioEvents  = true;
            //btnDayNightSwitch.tooltipLocaleID = "TIMECONTROL";
            btnDayNightSwitch.eventClick        += OnDayNightSwitchClicked;
            btnDayNightSwitch.eventMouseUp      += OnDayNightSwitchMouseUp;
            btnDayNightSwitch.opacity            = 0.5f;
            btnDayNightSwitch.isTooltipLocalized = true;
            btnDayNightSwitch.spritePadding      = new RectOffset();
            // 天气转换
            btnWeatherSwitch                  = this.AddUIComponent <UIButton>();
            btnWeatherSwitch.size             = new Vector2(13, 13);
            btnWeatherSwitch.relativePosition = new Vector3(25, 4);
            btnWeatherSwitch.normalBgSprite   = "IconPolicyOnlyElectricity";
            btnWeatherSwitch.playAudioEvents  = true;
            //btnWeatherSwitch.tooltipLocaleID = "THEME_WORLD_WEATHER";
            btnWeatherSwitch.eventClick        += OnWeatherSwitchClicked;
            btnWeatherSwitch.eventMouseUp      += OnWeatherSwitchMouseUp;
            btnWeatherSwitch.opacity            = 0.5f;
            btnWeatherSwitch.isTooltipLocalized = true;
            btnWeatherSwitch.spritePadding      = new RectOffset();
            // 啾啾显示
            btnChirperContainer                    = this.AddUIComponent <UIButton>();
            btnChirperContainer.size               = new Vector2(13, 13);
            btnChirperContainer.relativePosition   = new Vector3(42, 2);
            btnChirperContainer.normalBgSprite     = "ChirperIcon";
            btnChirperContainer.playAudioEvents    = true;
            btnChirperContainer.isTooltipLocalized = true;
            btnChirperContainer.spritePadding      = new RectOffset();
            btnChirperContainer.eventClick        += OnChirperTogglerClicked;
            btnChirperContainer.tooltipLocaleID    = "CHIRPER_NAME";
            if (ChirpPanel.instance != null)
            {
                btnChirperContainer.isVisible = true;
                btnChirperContainer.opacity   = ChirpPanel.instance.gameObject.activeSelf ? 0.5f : 0.1f;
            }
            else
            {
                btnChirperContainer.isVisible = false;
            }

            // 电台显示
            btnRadioIconContainer                    = this.AddUIComponent <UIButton>();
            btnRadioIconContainer.size               = new Vector2(13, 13);
            btnRadioIconContainer.relativePosition   = new Vector3(58, 2);
            btnRadioIconContainer.normalFgSprite     = "ADIcon";
            btnRadioIconContainer.playAudioEvents    = true;
            btnRadioIconContainer.isTooltipLocalized = true;
            btnRadioIconContainer.spritePadding      = new RectOffset();
            btnRadioIconContainer.eventClick        += OnRadioTogglerClicked;

            // 静音
            btnMuteAudioContainer                    = this.AddUIComponent <UIButton>();
            btnMuteAudioContainer.size               = new Vector2(13, 13);
            btnMuteAudioContainer.relativePosition   = new Vector3(74, 2);
            btnMuteAudioContainer.normalFgSprite     = "IconPolicyNoLoudNoisesHovered";
            btnMuteAudioContainer.playAudioEvents    = true;
            btnMuteAudioContainer.isTooltipLocalized = true;
            btnMuteAudioContainer.spritePadding      = new RectOffset();
            btnMuteAudioContainer.eventClick        += (UIComponent comp, UIMouseEventParameter p) =>
            {
                ExtendedInfoManager.AudioMuteAll           = !ExtendedInfoManager.AudioMuteAll;
                Singleton <AudioManager> .instance.MuteAll = ExtendedInfoManager.AudioMuteAll;
                btnMuteAudioContainer.opacity = Singleton <AudioManager> .instance.MuteAll ? 0.1f : 0.5f;
            };
            btnMuteAudioContainer.opacity = Singleton <AudioManager> .instance.MuteAll ? 0.1f : 0.5f;

            // 暂停按钮
            btnPlay                    = this.AddUIComponent <UIMultiStateButton>();
            btnPlay.size               = new Vector2(11, 12);
            btnPlay.relativePosition   = new Vector3(206, LINE2 + 2);
            btnPlay.isTooltipLocalized = true;
            btnPlay.tooltipLocaleID    = "MAIN_PLAYPAUSE";
            btnPlay.eventClick        += OnPlayClicked;
            btnPlay.playAudioEvents    = true;
            btnPlay.spritePadding      = new RectOffset();

            UIMultiStateButton.SpriteSet btnPlaySpriteSet0 = btnPlay.foregroundSprites[0];
            btnPlaySpriteSet0.normal  = "ButtonPause";
            btnPlaySpriteSet0.hovered = "ButtonPauseHovered";
            btnPlaySpriteSet0.pressed = "ButtonPausePressed";
            btnPlaySpriteSet0.focused = "ButtonPauseFocused";

            btnPlay.backgroundSprites.AddState();
            btnPlay.foregroundSprites.AddState();
            UIMultiStateButton.SpriteSet btnPlaySpriteSet1 = btnPlay.foregroundSprites[1];
            btnPlaySpriteSet1.normal  = "ButtonPlay";
            btnPlaySpriteSet1.hovered = "ButtonPlayHovered";
            btnPlaySpriteSet1.pressed = "ButtonPlayPressed";
            btnPlaySpriteSet1.focused = "ButtonPlayFocused";

            // 速度按钮
            btnSpeed                    = this.AddUIComponent <UIMultiStateButton>();
            btnSpeed.size               = new Vector2(28, 22);
            btnSpeed.relativePosition   = new Vector3(280, LINE2 - 4);
            btnSpeed.isTooltipLocalized = true;
            btnSpeed.tooltipLocaleID    = "MAIN_SPEED";
            btnSpeed.eventClick        += OnSpeedClicked;
            btnSpeed.playAudioEvents    = true;
            btnSpeed.spritePadding      = new RectOffset();
            UIMultiStateButton.SpriteSet btnSpeedSpriteSet0 = btnSpeed.foregroundSprites[0];
            btnSpeedSpriteSet0.normal  = "IconSpeed1Normal";
            btnSpeedSpriteSet0.hovered = "IconSpeed1Hover";
            btnSpeedSpriteSet0.pressed = "IconSpeed2Normal";

            btnSpeed.backgroundSprites.AddState();
            btnSpeed.foregroundSprites.AddState();
            UIMultiStateButton.SpriteSet btnSpeedSpriteSet1 = btnSpeed.foregroundSprites[1];
            btnSpeedSpriteSet1.normal  = "IconSpeed2Normal";
            btnSpeedSpriteSet1.hovered = "IconSpeed2Hover";
            btnSpeedSpriteSet1.pressed = "IconSpeed3Normal";

            btnSpeed.backgroundSprites.AddState();
            btnSpeed.foregroundSprites.AddState();
            UIMultiStateButton.SpriteSet btnSpeedSpriteSet2 = btnSpeed.foregroundSprites[2];
            btnSpeedSpriteSet2.normal  = "IconSpeed3Normal";
            btnSpeedSpriteSet2.hovered = "IconSpeed3Hover";
            btnSpeedSpriteSet2.pressed = "IconSpeed1Normal";

            // 时间条
            if (gameTimeSprite != null)
            {
                barTime                  = this.AddUIComponent <UISprite>();
                barTime.name             = "NewSprite";
                barTime.size             = new Vector2(140, 12);
                barTime.relativePosition = new Vector3(166, 4);
                barTime.atlas            = gameTimeSprite.atlas;
                barTime.spriteName       = gameTimeSprite.spriteName;
                barTime.fillAmount       = 0.5f;
                barTime.fillDirection    = UIFillDirection.Horizontal;
                barTime.color            = gameTimeSprite.color;
                barTime.fillAmount       = gameTimeSprite.fillAmount;
            }
            // 游戏日期标签
            lblGameTime                  = this.AddUIComponent <MUILabel>();
            lblGameTime.size             = new Vector2(120, LINEW);
            lblGameTime.relativePosition = new Vector3(170, LINE2 - 3);
            lblGameTime.textColor        = ExtendedPanel.COLOR_DARK_TEXT;
            lblGameTime.textAlignment    = UIHorizontalAlignment.Center;
            //lblGameTime.fontStyle = FontStyle.Bold;
            lblGameTime.fontSize = (int)MUISkin.UIToScreen(11f);

            // 游戏时间标签
            lblDayTimeA                  = this.AddUIComponent <UISprite>();
            lblDayTimeA.size             = new Vector2(14, 14);
            lblDayTimeA.relativePosition = new Vector3(107, 5);
            lblDayTimeA.spriteName       = "InfoIconEntertainmentFocused";
            lblDayTimeA.opacity          = 0.3f;
            lblDayTimeA.playAudioEvents  = (CityInfoDatas.TimeWarpMod_sunManager == null);
            lblDayTimeA.eventClick      += OnDayTimeClicked;

            lblDayTime                  = this.AddUIComponent <MUILabel>();
            lblDayTime.size             = new Vector2(40, LINEW);
            lblDayTime.relativePosition = new Vector3(115, LINE1);
            lblDayTime.textColor        = ExtendedPanel.COLOR_TEXT;
            lblDayTime.textAlignment    = UIHorizontalAlignment.Right;
            lblDayTime.fontStyle        = FontStyle.Bold;
            lblDayTime.fontSize         = (int)MUISkin.UIToScreen(11f);
            lblDayTime.playAudioEvents  = (CityInfoDatas.TimeWarpMod_sunManager == null);
            lblDayTime.eventClick      += OnDayTimeClicked;

            // 本地时间
            lblLocalTimeA                  = this.AddUIComponent <UISprite>();
            lblLocalTimeA.size             = new Vector2(7, 7);
            lblLocalTimeA.relativePosition = new Vector3(4, LINE2 + 5);
            lblLocalTimeA.spriteName       = "OptionBaseFocused";
            lblLocalTimeA.opacity          = 0.3f;

            lblLocalTime                  = this.AddUIComponent <MUILabel>();
            lblLocalTime.size             = new Vector2(45, LINEW);
            lblLocalTime.relativePosition = new Vector3(14, LINE2 - 2);
            lblLocalTime.textColor        = ExtendedPanel.COLOR_DARK_YELLOW;
            lblLocalTime.textAlignment    = UIHorizontalAlignment.Left;
            lblLocalTime.fontStyle        = FontStyle.Bold;
            lblLocalTime.fontSize         = (int)MUISkin.UIToScreen(11f);
            lblLocalTime.eventClick      += OnLocalTimeClick;
            lblLocalTime.playAudioEvents  = true;

            // 温度
            lblThermometerA                  = this.AddUIComponent <UISprite>();
            lblThermometerA.size             = new Vector2(16, 16);
            lblThermometerA.relativePosition = new Vector3(105, LINE2);
            lblThermometerA.spriteName       = "ThermometerIcon";
            lblThermometerA.opacity          = 0.3f;

            lblThermometer                  = this.AddUIComponent <MUILabel>();
            lblThermometer.size             = new Vector2(40, LINEW);
            lblThermometer.relativePosition = new Vector3(115, LINE2);
            lblThermometer.textColor        = ExtendedPanel.COLOR_DARK_TEXT;
            lblThermometer.textAlignment    = UIHorizontalAlignment.Right;
            //lblThermometer.fontStyle = FontStyle.Bold;
            lblThermometer.fontSize        = (int)MUISkin.UIToScreen(11f);
            lblThermometer.tooltipLocaleID = "MAIN_TEMPERATURE";

            setGameState();
        }
示例#3
0
        private bool CreateButton(UIComponent districtOptionPanel)
        {
            String[] iconNames =
            {
                "RoadArrowIcon",
                "Base",
                "BaseFocused",
                "BaseHovered",
                "BasePressed",
                "BaseDisabled",
            };

            // Create Hierarchy
            view   = UIView.GetAView();
            panel  = (UIPanel)view.AddUIComponent(typeof(UIPanel));
            newGO  = new GameObject(BUTTON_NAME);
            button = newGO.AddComponent <UIMultiStateButton>();
            panel.AttachUIComponent(newGO);

            // Panel attributes
            panel.relativePosition = panelPos;
            panel.width            = panelWidth;
            panel.name             = PANEL_NAME;
            panel.isVisible        = false;

            // Button attributes
            button.relativePosition   = buttonPos;
            button.size               = buttonSize;
            button.playAudioEvents    = true;
            button.name               = BUTTON_NAME;
            button.tooltip            = "Display Zones";
            button.isTooltipLocalized = false;
            button.spritePadding      = new RectOffset();
            button.activeStateIndex   = 1;

            button.atlas = CreateTextureAtlas("icons.png", BUTTON_NAME + "Atlas", panel.atlas.material, 36, 36, iconNames);

            UIMultiStateButton.SpriteSet backgroundSpriteSet0 = button.backgroundSprites[0];
            backgroundSpriteSet0.normal   = "Base";
            backgroundSpriteSet0.disabled = "Base";
            backgroundSpriteSet0.hovered  = "BaseHovered";
            backgroundSpriteSet0.pressed  = "Base";
            backgroundSpriteSet0.focused  = "Base";

            button.backgroundSprites.AddState();
            UIMultiStateButton.SpriteSet backgroundSpriteSet1 = button.backgroundSprites[1];
            backgroundSpriteSet1.normal   = "BaseFocused";
            backgroundSpriteSet1.disabled = "BaseFocused";
            backgroundSpriteSet1.hovered  = "BaseFocused";
            backgroundSpriteSet1.pressed  = "BaseFocused";
            backgroundSpriteSet1.focused  = "BaseFocused";

            UIMultiStateButton.SpriteSet foregroundSpriteSet0 = button.foregroundSprites[0];
            foregroundSpriteSet0.normal   = "RoadArrowIcon";
            foregroundSpriteSet0.disabled = "RoadArrowIcon";
            foregroundSpriteSet0.hovered  = "RoadArrowIcon";
            foregroundSpriteSet0.pressed  = "RoadArrowIcon";
            foregroundSpriteSet0.focused  = "RoadArrowIcon";

            button.foregroundSprites.AddState();
            UIMultiStateButton.SpriteSet foregroundSpriteSet1 = button.foregroundSprites[1];
            foregroundSpriteSet1.normal   = "RoadArrowIcon";
            foregroundSpriteSet1.disabled = "RoadArrowIcon";
            foregroundSpriteSet1.hovered  = "RoadArrowIcon";
            foregroundSpriteSet1.pressed  = "RoadArrowIcon";
            foregroundSpriteSet1.focused  = "RoadArrowIcon";

            // Districts Panel Listener
            districtOptionPanel.eventVisibilityChanged += districtOptionPanel_eventVisibilityChanged;

            // Button Listener
            button.eventActiveStateIndexChanged += button_eventActiveStateIndexChanged;

            return(true);
        }
示例#4
0
    public override void OnLevelLoaded(LoadMode p_mode)
    {
        if (p_mode == LoadMode.LoadAsset || p_mode == LoadMode.NewAsset)
        {
            return;
        }

        // Get the UIView object. This seems to be the top-level object for most
        // of the UI.
        var l_uiView = UIView.GetAView();

        // Add a new button to the view.
        m_button = (UIMultiStateButton)l_uiView.AddUIComponent(typeof(UIMultiStateButton));

        // Attach a sprite to the button
        m_lockImage = (UISprite)m_button.AddUIComponent(typeof(UISprite));

        // Set the text to show on the button tooltip.
        m_button.tooltip            = "OverLayer Switch - Right Click to lock layer movement (Ctrl+Shift+L).";
        m_button.isTooltipLocalized = false;
        m_button.RefreshTooltip();
        m_button.spritePadding = new RectOffset();

        // Set the button dimensions.
        m_button.width  = 36;
        m_button.height = 36;

        // Set the lock image
        m_lockImage.spriteName = "LockIcon";
        m_lockImage.position   = new Vector3(18, -18);
        m_lockImage.width      = 24;
        m_lockImage.height     = 24;
        m_lockImage.Hide();

        if (m_lockImage.atlas == null || m_lockImage.atlas.material == null)
        {
            DebugLog("Could not get reference material!!!");
            return;
        }

        // The sprite for the button can't be added to the InGame atlas, since the sprite data
        // seems to come from the atlas's texture, instead of the texture supplied by the SpriteData.
        // So a whole new atlas with the toggle button base images duplicated is needed.
        // Thanks to https://github.com/onewaycitystreets/StreetDirectionViewer/blob/master/ui/StreetDirectionViewerUI.cs

        String[] iconNames =
        {
            "RoadArrowIcon",
            "Base",
            "BaseFocused",
            "BaseHovered",
            "BasePressed",
            "BaseDisabled",
        };

        m_button.atlas = CreateTextureAtlas("OverLayer.OverlayIcon.png", "OverLayer Atlas", m_lockImage.atlas.material, 36, 36, iconNames);

        // Background sprites

        // Disabled state
        UIMultiStateButton.SpriteSet backgroundSpriteSet0 = m_button.backgroundSprites[0];
        backgroundSpriteSet0.normal   = "Base";
        backgroundSpriteSet0.disabled = "Base";
        backgroundSpriteSet0.hovered  = "BaseHovered";
        backgroundSpriteSet0.pressed  = "Base";
        backgroundSpriteSet0.focused  = "Base";

        // Enabled state
        m_button.backgroundSprites.AddState();
        UIMultiStateButton.SpriteSet backgroundSpriteSet1 = m_button.backgroundSprites[1];
        backgroundSpriteSet1.normal   = "BaseFocused";
        backgroundSpriteSet1.disabled = "BaseFocused";
        backgroundSpriteSet1.hovered  = "BaseFocused";
        backgroundSpriteSet1.pressed  = "BaseFocused";
        backgroundSpriteSet1.focused  = "BaseFocused";

        // Forground sprites

        // Disabled state
        UIMultiStateButton.SpriteSet foregroundSpriteSet0 = m_button.foregroundSprites[0];
        foregroundSpriteSet0.normal   = "RoadArrowIcon";
        foregroundSpriteSet0.disabled = "RoadArrowIcon";
        foregroundSpriteSet0.hovered  = "RoadArrowIcon";
        foregroundSpriteSet0.pressed  = "RoadArrowIcon";
        foregroundSpriteSet0.focused  = "RoadArrowIcon";

        // Enabled state
        m_button.foregroundSprites.AddState();
        UIMultiStateButton.SpriteSet foregroundSpriteSet1 = m_button.foregroundSprites[1];
        foregroundSpriteSet1.normal   = "RoadArrowIcon";
        foregroundSpriteSet1.disabled = "RoadArrowIcon";
        foregroundSpriteSet1.hovered  = "RoadArrowIcon";
        foregroundSpriteSet1.pressed  = "RoadArrowIcon";
        foregroundSpriteSet1.focused  = "RoadArrowIcon";

        // Enable button sounds.
        m_button.playAudioEvents = true;

        // Place the button.
        m_button.transformPosition = new Vector3(-1.11f, 0.98f);

        // Respond to button click.
        m_button.eventMouseUp += ButtonMouseUp;

        try
        {
            OverLayerTool.OnLevelLoaded();
            OverLayerTool.SetDelegate(this);
        }
        catch (Exception e)
        {
            DebugLog("Error loading tool: " + e.ToString());
        }

        DebugLog("Loaded");
    }
示例#5
0
        public UIMultiStateButton AddAToggleButton(ToggleModRegistrationInfo mri)
        {
            if (mri == null || mri.SpriteInfo == null || mri.SpriteInfo_state2 == null)
            {
                Log.Error("AddaToggleButton() - invalid parameters.");
                return(null);
            }

            UIMultiStateButton retval = ScrollPanel.AddUIComponent <UIMultiStateButton>();

            string uniquename = string.Format("{0}_{1}", mri.ModName, mri.ButtonText);

            retval.name       = uniquename;
            retval.cachedName = uniquename;

            if (mri.SpriteInfo.NormalFgTexture != null) // this triggers use of all textures
            {
                string[] spritenames =
                {
                    mri.SpriteInfo.NormalFgSpritename,        mri.SpriteInfo.NormalBgSpritename,        mri.SpriteInfo.HoveredFgSpritename,        mri.SpriteInfo.HoveredBgSpritename,        mri.SpriteInfo.PressedFgSpritename,        mri.SpriteInfo.PressedBgSpritename,
                    mri.SpriteInfo_state2.NormalFgSpritename, mri.SpriteInfo_state2.NormalBgSpritename, mri.SpriteInfo_state2.HoveredFgSpritename, mri.SpriteInfo_state2.HoveredBgSpritename, mri.SpriteInfo_state2.PressedFgSpritename, mri.SpriteInfo_state2.PressedBgSpritename
                };
                Texture2D[] textures =
                {
                    mri.SpriteInfo.NormalFgTexture,        mri.SpriteInfo.NormalBgTexture,        mri.SpriteInfo.HoveredFgTexture,        mri.SpriteInfo.HoveredBgTexture,        mri.SpriteInfo.PressedFgTexture,        mri.SpriteInfo.PressedBgTexture,
                    mri.SpriteInfo_state2.NormalFgTexture, mri.SpriteInfo_state2.NormalBgTexture, mri.SpriteInfo_state2.HoveredFgTexture, mri.SpriteInfo_state2.HoveredBgTexture, mri.SpriteInfo_state2.PressedFgTexture, mri.SpriteInfo_state2.PressedBgTexture
                };

                retval.atlas = CreateAtlas(uniquename, spritenames, textures);
            }

            // we only support sprite image or texture buttons, no text-only (doesn't work properly for some reason)
            UIMultiStateButton.SpriteSetState fgSpriteSetState = retval.foregroundSprites;
            UIMultiStateButton.SpriteSetState bgSpriteSetState = retval.backgroundSprites;

            // these should never be null, and should start with one (empty) sprite set each, we'll need to add one more
            if (fgSpriteSetState == null || bgSpriteSetState == null)
            {
                Log.Error("AddaToggleButton() - UIMultiStateButton missing SpriteSetState.");
                RemoveAButton(retval.name);

                return(null);
            }

            UIMultiStateButton.SpriteSet fgSpriteSet = fgSpriteSetState[0];
            UIMultiStateButton.SpriteSet bgSpriteSet = bgSpriteSetState[0];

            if (fgSpriteSet == null)
            {
                fgSpriteSetState.AddState();
                fgSpriteSet = fgSpriteSetState[0];
            }

            if (bgSpriteSet == null)
            {
                bgSpriteSetState.AddState();
                bgSpriteSet = bgSpriteSetState[0];
            }

            // add state '0'
            fgSpriteSet.normal  = mri.SpriteInfo.NormalFgSpritename;
            fgSpriteSet.hovered = mri.SpriteInfo.HoveredFgSpritename;
            fgSpriteSet.pressed = mri.SpriteInfo.PressedFgSpritename;

            bgSpriteSet.normal  = mri.SpriteInfo.NormalBgSpritename;
            bgSpriteSet.hovered = mri.SpriteInfo.HoveredBgSpritename;
            bgSpriteSet.pressed = mri.SpriteInfo.PressedBgSpritename;

            // now add state '1'
            fgSpriteSetState.AddState();
            bgSpriteSetState.AddState();

            UIMultiStateButton.SpriteSet fgSpriteSet1 = fgSpriteSetState[1];
            UIMultiStateButton.SpriteSet bgSpriteSet1 = bgSpriteSetState[1];

            fgSpriteSet1.normal  = mri.SpriteInfo_state2.NormalFgSpritename;
            fgSpriteSet1.hovered = mri.SpriteInfo_state2.HoveredFgSpritename;
            fgSpriteSet1.pressed = mri.SpriteInfo_state2.PressedFgSpritename;

            bgSpriteSet1.normal  = mri.SpriteInfo_state2.NormalBgSpritename;
            bgSpriteSet1.hovered = mri.SpriteInfo_state2.HoveredBgSpritename;
            bgSpriteSet1.pressed = mri.SpriteInfo_state2.PressedBgSpritename;

            retval.state                = UIMultiStateButton.ButtonState.Normal; // initial value
            retval.activeStateIndex     = 0;
            retval.foregroundSpriteMode = UIForegroundSpriteMode.Scale;
            retval.spritePadding        = new RectOffset(2, 2, 2, 2);

            retval.tooltip           = mri.HoverText;
            retval.tooltipAnchor     = UITooltipAnchor.Floating;
            retval.eventTooltipShow += (component, param) => { param.tooltip.relativePosition = new Vector3(param.tooltip.relativePosition.x + 25, param.tooltip.relativePosition.y, param.tooltip.relativePosition.z); };

            retval.autoSize = false;
            retval.height   = 50;
            retval.width    = 50;

            retval.canFocus      = false;
            retval.enabled       = true;
            retval.isInteractive = true;
            retval.isVisible     = true;

            retval.eventClick +=
                (component, param) =>
            {
                try
                {
                    UIMultiStateButton compbutt = component as UIMultiStateButton;

                    if (compbutt == null)
                    {
                        Log.Error(string.Format("Problem in callback handler for Mod: {0}", component.name));

                        return;
                    }

                    if (mri.ToggleCallback != null)
                    {
                        mri.ToggleCallback(component.name, compbutt.activeStateIndex);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(string.Format("Exception in callback to Mod: {0}. Exception: {1}", component.name, ex.Message));
                }
            };

            return(retval);
        }
        /// <summary>
        /// Creates a toggle button (multi-state button) with THREE states: State 0, State 1, and State 2.
        /// </summary>
        /// <param name="bgPrefix0">State 0: background sprite prefix</param>
        /// <param name="bgPrefix1">State 1: background sprite prefix</param>
        /// <param name="bgPrefix2">State 2: background sprite prefix</param>
        /// <param name="fgPrefix0">State 0: foreground sprite prefix</param>
        /// <param name="fgPrefix1">State 1: foreground sprite prefix</param>
        /// <param name="fgPrefix2">State 2: foreground sprite prefix</param>
        /// <returns></returns>
        public static UIMultiStateButton AddAThreeStateButton(UIComponent parent, string name, UITextureAtlas atlas, string bgPrefix0, string bgPrefix1, string bgPrefix2, string fgPrefix0, string fgPrefix1, string fgPrefix2)
        {
            UIMultiStateButton _toggleButton = parent.AddUIComponent <UIMultiStateButton>();

            _toggleButton.name       = name;
            _toggleButton.cachedName = name;

            _toggleButton.atlas = atlas;

            UIMultiStateButton.SpriteSetState fgSpriteSetState = _toggleButton.foregroundSprites;
            UIMultiStateButton.SpriteSetState bgSpriteSetState = _toggleButton.backgroundSprites;

            if (fgSpriteSetState == null || bgSpriteSetState == null)
            {
                Debug.LogError("[PLT]: UIMultiStateButton missing SpriteSetState");
            }

            UIMultiStateButton.SpriteSet fgSpriteSet0 = fgSpriteSetState[0];
            UIMultiStateButton.SpriteSet bgSpriteSet0 = bgSpriteSetState[0];

            if (fgSpriteSet0 == null)
            {
                fgSpriteSetState.AddState();
                fgSpriteSet0 = fgSpriteSetState[0];
            }
            if (bgSpriteSet0 == null)
            {
                bgSpriteSetState.AddState();
                bgSpriteSet0 = bgSpriteSetState[0];
            }

            //add state '0'
            if (fgPrefix0 != "")
            {
                fgSpriteSet0.normal   = (fgPrefix0 + "");
                fgSpriteSet0.focused  = (fgPrefix0 + "Focused");
                fgSpriteSet0.hovered  = (fgPrefix0 + "Hovered");
                fgSpriteSet0.pressed  = (fgPrefix0 + "Pressed");
                fgSpriteSet0.disabled = (fgPrefix0 + "Disabled");
            }
            if (bgPrefix0 != "")
            {
                bgSpriteSet0.normal   = (bgPrefix0 + "");
                bgSpriteSet0.focused  = (bgPrefix0 + "Focused");
                bgSpriteSet0.hovered  = (bgPrefix0 + "Hovered");
                bgSpriteSet0.pressed  = (bgPrefix0 + "Pressed");
                bgSpriteSet0.disabled = (bgPrefix0 + "Disabled");
            }

            //add state '1'
            fgSpriteSetState.AddState();
            bgSpriteSetState.AddState();
            UIMultiStateButton.SpriteSet fgSpriteSet1 = fgSpriteSetState[1];
            UIMultiStateButton.SpriteSet bgSpriteSet1 = bgSpriteSetState[1];
            if (fgPrefix1 != "")
            {
                fgSpriteSet1.normal   = (fgPrefix1 + "");
                fgSpriteSet1.focused  = (fgPrefix1 + "Focused");
                fgSpriteSet1.hovered  = (fgPrefix1 + "Hovered");
                fgSpriteSet1.pressed  = (fgPrefix1 + "Pressed");
                fgSpriteSet1.disabled = (fgPrefix1 + "Disabled");
            }
            if (bgPrefix1 != "")
            {
                bgSpriteSet1.normal   = (bgPrefix1 + "");
                bgSpriteSet1.focused  = (bgPrefix1 + "Focused");
                bgSpriteSet1.hovered  = (bgPrefix1 + "Hovered");
                bgSpriteSet1.pressed  = (bgPrefix1 + "Pressed");
                bgSpriteSet1.disabled = (bgPrefix1 + "Disabled");
            }

            //add state '2'
            fgSpriteSetState.AddState();
            bgSpriteSetState.AddState();
            UIMultiStateButton.SpriteSet fgSpriteSet2 = fgSpriteSetState[2];
            UIMultiStateButton.SpriteSet bgSpriteSet2 = bgSpriteSetState[2];
            if (fgPrefix2 != "")
            {
                fgSpriteSet2.normal   = (fgPrefix2 + "");
                fgSpriteSet2.focused  = (fgPrefix2 + "Focused");
                fgSpriteSet2.hovered  = (fgPrefix2 + "Hovered");
                fgSpriteSet2.pressed  = (fgPrefix2 + "Pressed");
                fgSpriteSet2.disabled = (fgPrefix2 + "Disabled");
            }
            if (bgPrefix2 != "")
            {
                bgSpriteSet2.normal   = (bgPrefix2 + "");
                bgSpriteSet2.focused  = (bgPrefix2 + "Focused");
                bgSpriteSet2.hovered  = (bgPrefix2 + "Hovered");
                bgSpriteSet2.pressed  = (bgPrefix2 + "Pressed");
                bgSpriteSet2.disabled = (bgPrefix2 + "Disabled");
            }

            //initial value
            _toggleButton.state                = UIMultiStateButton.ButtonState.Normal;
            _toggleButton.activeStateIndex     = 0;
            _toggleButton.foregroundSpriteMode = UIForegroundSpriteMode.Scale;
            _toggleButton.spritePadding        = new RectOffset(0, 0, 0, 0);
            _toggleButton.autoSize             = false;
            _toggleButton.canFocus             = false;
            _toggleButton.enabled              = true;
            _toggleButton.isInteractive        = true;
            _toggleButton.isVisible            = true;

            return(_toggleButton);
        }