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