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); }
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); }
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); }