public bool RegisterToggle(string modName, string buttonText, string hoverText, Action <string, int> callback, SpriteData state0Sprites, SpriteData state1Sprites) { Log.Message(string.Format("CorralRegistration.RegisterToggle()")); bool success = false; try { foreach (ModRegistrationInfo mri in RegisteredMods) { if (mri.ModName == modName && mri.ButtonText == buttonText) { // already registered Log.Warning(string.Format("CorralRegistration.RegisterToggle() - '{0}-{1}' already registered", modName, buttonText)); return(false); } } // register it ToggleModRegistrationInfo newMRI = new ToggleModRegistrationInfo { ModName = modName, ButtonText = buttonText, HoverText = hoverText, ToggleCallback = callback, SpriteInfo = state0Sprites, SpriteInfo_state2 = state1Sprites }; // create new button... if (ModCorral.mcPanel != null) { newMRI.ToggleButton = ModCorral.mcPanel.ScrollPanel.AddAToggleButton(newMRI); ModCorral.UpdateNewCount(); } RegisteredMods.Add(newMRI); success = true; Log.Message(string.Format("CorralRegistration.RegisterToggle() added mod: '{0}-{1}'", newMRI.ModName, newMRI.ButtonText)); } catch (Exception ex) { Log.Error(string.Format("CorralRegistration.RegisterToggle() Exception: {0}", ex.Message)); } return(success); }
public void OnLevelLoaded(LoadMode mode) { try { Log.Message("ModCorral.OnLevelLoaded() " + mode.ToString()); if (mode == LoadMode.LoadGame || mode == LoadMode.NewGame) { if (mcButton == null) // if not created yet { // add button to the end of the TSBar MainToolstrip (UITabStrip) UIView uiv = UIView.GetAView(); if (uiv != null) { UITabstrip ts = uiv.FindUIComponent <UITabstrip>("MainToolstrip"); if (ts != null) { UIButton policiesButton = ts.Find <UIButton>("Policies"); // we use this as a template to get 'most' of what we need set up mcButton = ts.AddTab("ModCorral", policiesButton, false); // find the panel added in the ts tabcontainer foreach (UIComponent c in ts.tabContainer.components) { if (c.name.Contains("ModCorral")) { TabPanel = c as UIPanel; c.clipChildren = false; c.opacity = 0; // otherwise our panel gets clicks obscured when it's in the same place... break; } } // initial position info StartingAbsPosY = ts.absolutePosition.y - 20; // get rid of hardcoded 20... ts.eventSelectedIndexChanged += ts_eventSelectedIndexChanged; if (mcButton != null) { StartingAbsPosX = mcButton.absolutePosition.x; mcButton.tooltip = "Open Mod Corral"; mcButton.eventTooltipShow += (component, param) => { param.tooltip.relativePosition = new Vector3(param.tooltip.relativePosition.x + 25, param.tooltip.relativePosition.y + 10, param.tooltip.relativePosition.z); }; mcButton.foregroundSpriteMode = UIForegroundSpriteMode.Scale; mcButton.scaleFactor = 0.6f; // to fit a little better when using options sprites mcButton.normalFgSprite = "Options"; mcButton.hoveredFgSprite = "OptionsHovered"; mcButton.focusedFgSprite = "OptionsFocused"; mcButton.pressedFgSprite = "OptionsPressed"; mcButton.disabledFgSprite = "OptionsDisabled"; mcButton.eventClick += mcButton_eventClick; mcButton.clipChildren = false; UIPanel fscont = uiv.FindUIComponent <UIPanel>("FullScreenContainer"); if (fscont != null) { // create our ui panel mcPanel = (ModCorralUI)fscont.AddUIComponent(typeof(ModCorralUI)); } else { Log.Message("no fullscreencontainer"); } if (mcPanel != null) { mcPanel.transform.parent = fscont.transform; mcPanel.initialize(); //mcPanel.anchor = UIAnchorStyle.All; mcPanel.isVisible = false; } ModCorralConfigDialog = (ConfigDialog)uiv.AddUIComponent(typeof(ConfigDialog)); ModCorralConfigDialog.ParentPanel = mcPanel; ModCorralConfigDialog.isVisible = false; } } else { Log.Message("failed to find maintoolstrip"); } } } // add any buttons that might have been registered before we got created if (CorralRegistration.RegisteredMods != null) { foreach (ModRegistrationInfo mri in CorralRegistration.RegisteredMods) { if (!mri.IsButtonInitialized()) { if (mri is ToggleModRegistrationInfo) { ToggleModRegistrationInfo tmri = mri as ToggleModRegistrationInfo; tmri.ToggleButton = mcPanel.ScrollPanel.AddAToggleButton(tmri); } else { mri.ModButton = mcPanel.ScrollPanel.AddAButton(mri); } } } UpdateNewCount(); } } } catch (Exception ex) { Log.Error("ModCorral.OnLevelLoaded() Exception: " + ex.Message); } }
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); }