Ejemplo n.º 1
0
        public bool DeRegister(string modName, string buttonText)
        {
            Log.Message(string.Format("CorralRegistration.DeRegister()"));

            bool success = false;

            try
            {
                ModRegistrationInfo foundMRI = null;

                foreach (ModRegistrationInfo mri in RegisteredMods)
                {
                    if (mri.ModName == modName && mri.ButtonText == buttonText)
                    {
                        foundMRI = mri; // don't modify list while iterating, just to be safe
                        break;
                    }
                }

                if (foundMRI != null)
                {
                    // registered, so remove it and destroy UIButton
                    success = RegisteredMods.Remove(foundMRI);

                    if (success && !foundMRI.IsButtonInitialized())
                    {
                        if (ModCorral.mcPanel != null)
                        {
                            ModCorral.mcPanel.ScrollPanel.RemoveAButton(foundMRI.GetButtonText());
                            foundMRI.ClearButton();
                        }
                    }

                    if (success)
                    {
                        Log.Message(string.Format("CorralRegistration.Deregister() removed mod: '{0}-{1}'", foundMRI.ModName, foundMRI.ButtonText));
                    }
                }
                else
                {
                    Log.Warning(string.Format("CorralRegisration.Deregister() - failed to find mod '{0}-{1}' to de-register", modName, buttonText));
                }
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("CorralRegistration.Deregister() Exception: {0}", ex.Message));
            }

            return(success);
        }
Ejemplo n.º 2
0
        public bool Register(string modName, string buttonText, string hoverText, Action <string> callback,
                             string normalFgSpritename, Texture2D normalFgTexture,
                             string normalBgSpritename, Texture2D normalBgTexture,
                             string hoveredFgSpritename, Texture2D hoveredFgTexture,
                             string hoveredBgSpritename, Texture2D hoveredBgTexture,
                             string pressedFgSpritename, Texture2D pressedFgTexture,
                             string pressedBgSpritename, Texture2D pressedBgTexture
                             )
        {
            Log.Message(string.Format("CorralRegistration.Register()"));

            bool success = false;

            try
            {
                foreach (ModRegistrationInfo mri in RegisteredMods)
                {
                    if (mri.ModName == modName && mri.ButtonText == buttonText)
                    {
                        // already registered
                        Log.Warning(string.Format("CorralRegistration.Register() - '{0}-{1}' already registered", modName, buttonText));

                        return(false);
                    }
                }

                // register it
                ModRegistrationInfo newMRI = new ModRegistrationInfo
                {
                    ModName       = modName,
                    ButtonText    = buttonText,
                    HoverText     = hoverText,
                    ClickCallback = callback,
                    SpriteInfo    = new SpriteData()
                    {
                        NormalFgSpritename  = normalFgSpritename,
                        NormalFgTexture     = normalFgTexture,
                        NormalBgSpritename  = normalBgSpritename,
                        NormalBgTexture     = normalBgTexture,
                        HoveredFgSpritename = hoveredFgSpritename,
                        HoveredFgTexture    = hoveredFgTexture,
                        HoveredBgSpritename = hoveredBgSpritename,
                        HoveredBgTexture    = hoveredBgTexture,
                        PressedFgSpritename = pressedFgSpritename,
                        PressedFgTexture    = pressedFgTexture,
                        PressedBgSpritename = pressedBgSpritename,
                        PressedBgTexture    = pressedBgTexture
                    }
                };

                // create new button...
                if (ModCorral.mcPanel != null)
                {
                    newMRI.ModButton = ModCorral.mcPanel.ScrollPanel.AddAButton(newMRI);
                    ModCorral.UpdateNewCount();
                }

                RegisteredMods.Add(newMRI);
                success = true;

                Log.Message(string.Format("CorralRegistration.Register() added mod: '{0}-{1}'", newMRI.ModName, newMRI.ButtonText));
            }
            catch (Exception ex)
            {
                Log.Error(string.Format("CorralRegistration.Register() Exception: {0}", ex.Message));
            }

            return(success);
        }
Ejemplo n.º 3
0
        public UIButton AddAButton(ModRegistrationInfo mri)
        {
            UIButton retval = ScrollPanel.AddUIComponent <UIButton>();

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

            retval.name       = uniquename;
            retval.cachedName = uniquename;
            retval.autoSize   = false;
            retval.height     = 50;
            retval.width      = 50;

            if (mri.SpriteInfo.NormalFgSpritename == null) // no images, use a button with text in it
            {
                retval.text                    = mri.ButtonText;
                retval.textPadding             = new RectOffset(2, 2, 2, 2);
                retval.textHorizontalAlignment = UIHorizontalAlignment.Center;
                retval.textScaleMode           = UITextScaleMode.None;
                retval.textScale               = 2f;
                retval.wordWrap                = true;

                UIFontRenderer uifr = retval.font.ObtainRenderer();

                float original_uifr_scale = 2f;// uifr.textScale; // always starts at 1
                float lastuifrscale       = uifr.textScale;

                if (uifr != null)
                {
                    while (uifr != null)
                    {
                        Vector2 svec = uifr.MeasureString(retval.text);
                        //Log.Message("svec: " + svec.ToString());

                        if (Math.Max(svec.x, svec.y) > retval.height)
                        {
                            lastuifrscale -= 0.05f;
                        }
                        else
                        {
                            break;
                        }

                        if (lastuifrscale <= 0.2f)
                        {
                            break; // sanity
                        }

                        uifr.Release();

                        retval.UpdateFontInfo();
                        uifr           = retval.font.ObtainRenderer();
                        uifr.textScale = lastuifrscale;
                    }

                    uifr.textScale = original_uifr_scale;
                    uifr.Release();

                    retval.UpdateFontInfo();

                    retval.textScale = Math.Max(0.65f, retval.textScale * (lastuifrscale / original_uifr_scale)); // .65 min is at limit of readability
                    retval.Invalidate();

                    Log.Message("Resizing text scale based on string length.  textScale = " + retval.textScale.ToString());
                }

                retval.normalBgSprite  = "ButtonMenu";
                retval.hoveredBgSprite = "ButtonMenuHovered";
                retval.pressedBgSprite = "ButtonMenuPressed";
            }
            else
            {
                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 };
                    Texture2D[] textures    = { mri.SpriteInfo.NormalFgTexture, mri.SpriteInfo.NormalBgTexture, mri.SpriteInfo.HoveredFgTexture, mri.SpriteInfo.HoveredBgTexture, mri.SpriteInfo.PressedFgTexture, mri.SpriteInfo.PressedBgTexture };

                    retval.atlas = CreateAtlas(uniquename, spritenames, textures);
                }
                else
                {
                    // built-in sprite names
                    // - try to synthesize hover/focus/etc sprite names
                    // - hover = name + "hovered"
                    // - pressed = name + "pressed"
                    string basename = mri.SpriteInfo.NormalFgSpritename;

                    string hoversprite   = basename + "Hovered";
                    string pressedsprite = basename + "Pressed";

                    if (string.IsNullOrEmpty(mri.SpriteInfo.HoveredFgSpritename))
                    {
                        mri.SpriteInfo.HoveredFgSpritename = hoversprite;
                    }
                    if (string.IsNullOrEmpty(mri.SpriteInfo.PressedFgSpritename))
                    {
                        mri.SpriteInfo.PressedFgSpritename = pressedsprite;
                    }
                }

                if (string.IsNullOrEmpty(mri.SpriteInfo.HoveredBgSpritename))
                {
                    mri.SpriteInfo.HoveredBgSpritename = "OptionBaseHovered"; // so that everybody has some hover feedback, even if they don't specify it
                }
                retval.foregroundSpriteMode = UIForegroundSpriteMode.Scale;
                retval.normalFgSprite       = mri.SpriteInfo.NormalFgSpritename;
                retval.normalBgSprite       = mri.SpriteInfo.NormalBgSpritename;
                retval.hoveredFgSprite      = mri.SpriteInfo.HoveredFgSpritename;
                retval.hoveredBgSprite      = mri.SpriteInfo.HoveredBgSpritename;
                retval.pressedFgSprite      = mri.SpriteInfo.PressedFgSpritename;
                retval.pressedBgSprite      = mri.SpriteInfo.PressedBgSpritename;

                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.canFocus      = false;
            retval.enabled       = true;
            retval.isInteractive = true;
            retval.isVisible     = true;

            retval.eventClick += (component, param) =>
            {
                try
                {
                    if (mri.ClickCallback != null)
                    {
                        mri.ClickCallback(component.name);
                    }
                }
                catch (Exception ex)
                {
                    Log.Error(string.Format("Exception in callback to Mod: {0}. Exception: {1}", component.name, ex.Message));
                }

                ModCorral.mcButton.SimulateClick();
            };

            return(retval);
        }