Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 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);
        }