Exemple #1
0
        public static void SetVanillaToggleSprites(this UIMultiStateButton multiButton, string bgPrefix, string fgPrefix)
        {
            if (!bgPrefix.IsNullOrWhiteSpace())
            {
                UIMultiStateButton.SpriteSetState _backgroundSprites = multiButton.backgroundSprites;

                if (_backgroundSprites.Count >= 2)
                {
                    _backgroundSprites[0].normal   = bgPrefix + "";
                    _backgroundSprites[0].hovered  = bgPrefix + "Hovered";
                    _backgroundSprites[0].pressed  = bgPrefix + "Pressed";
                    _backgroundSprites[0].disabled = bgPrefix + "Disabled";
                    _backgroundSprites[1].normal   = bgPrefix + "Focused";
                    _backgroundSprites[1].disabled = bgPrefix + "Disabled";
                }
            }
            if (!fgPrefix.IsNullOrWhiteSpace())
            {
                UIMultiStateButton.SpriteSetState _foregroundSprites = multiButton.foregroundSprites;

                if (_foregroundSprites.Count >= 2)
                {
                    _foregroundSprites[0].normal   = fgPrefix + "";
                    _foregroundSprites[0].hovered  = fgPrefix + "Hovered";
                    _foregroundSprites[0].pressed  = fgPrefix + "Pressed";
                    _foregroundSprites[0].disabled = fgPrefix + "Disabled";
                    _foregroundSprites[1].normal   = fgPrefix + "Focused";
                    _foregroundSprites[1].disabled = fgPrefix + "Disabled";
                }
            }
        }
Exemple #2
0
        private void ApplyUIMultiStateButtonSpriteStateProperty(XmlNode node, UIComponent component)
        {
            var index = XmlUtil.GetIntAttribute(node, "index");

            var type = XmlUtil.GetStringAttribute(node, "type");

            if (type != "background" && type != "foreground")
            {
                throw new ParseException(String.Format
                                             ("Invalid value for SpriteState attribute \"type\" (only \"foreground\" and \"background\" are allowed - \"{0}\"",
                                             index), node);
            }

            var button = component as UIMultiStateButton;

            UIMultiStateButton.SpriteSetState sprites = null;

            if (button != null)
            {
                sprites = type == "background" ? button.backgroundSprites : button.foregroundSprites;
            }

            if (sprites != null && index >= sprites.Count)
            {
                throw new ParseException(String.Format
                                             ("Invalid value for SpriteState attribute \"index\", object has only \"{1}\" states - \"{0}\"",
                                             index, sprites.Count), node);
            }

            foreach (XmlNode stateNode in node.ChildNodes)
            {
                try
                {
                    if (sprites != null)
                    {
                        var property = ReflectionCache.GetPropertyForType(sprites[index].GetType(), stateNode.Name);
                        if (property == null)
                        {
                            throw new ParseException(String.Format
                                                         ("Invalid property \"{0}\" for SpriteState, allowed are \"normal\", \"hovered\", \"focused\", \"pressed\", \"disabled\"",
                                                         stateNode.InnerText), node);
                        }

                        SetPropertyValueWithRollback(sprites[index], property, stateNode.InnerText);
                    }
                }
                catch (Exception ex)
                {
                    throw new ParseException(String.Format
                                                 ("Exception while processing SpriteState node - {0}",
                                                 ex), node);
                }
            }
        }
Exemple #3
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);
        }