Beispiel #1
0
        public SelectionManager()
        {
            // We used to have this set to 2, but now that we have dotted lines, I just do a value of 0
            mUiLayer      = Renderer.Self.AddLayer();
            mUiLayer.Name = "UI Layer";

            mGraphicalOutline = new GraphicalOutline(mUiLayer);

            mOverlaySolidRectangle         = new SolidRectangle();
            mOverlaySolidRectangle.Color   = Color.LightGreen;
            mOverlaySolidRectangle.Color.A = 100;
            mOverlaySolidRectangle.Visible = false;
            ShapeManager.Self.Add(mOverlaySolidRectangle, mUiLayer);

            mOverlaySprite            = new Sprite(null);
            mOverlaySprite.BlendState = BlendState.Additive;
            mOverlaySprite.Visible    = false;
            SpriteManager.Self.Add(mOverlaySprite, mUiLayer);

            mOverlayNineSlice            = new NineSlice();
            mOverlayNineSlice.BlendState = BlendState.Additive;
            mOverlayNineSlice.Visible    = false;
            SpriteManager.Self.Add(mOverlayNineSlice, mUiLayer);

            mResizeHandles            = new ResizeHandles(mUiLayer);
            mResizeHandles.ShowOrigin = true;
            mResizeHandles.Visible    = false;
        }
Beispiel #2
0
        public TextBox(IContentChest contentChest, IKeyboardDispatcher keyboardDispatcher, Vector2 position,
                       SpriteFont font, int width)
        {
            _keyboardDispatcher = keyboardDispatcher;
            _font = font;

            var(x, y) = position;
            Bounds    = new Rectangle((int)x, (int)y, width, 30);

            _keyboardDispatcher.SubscribeToAnyKeyPress(OnKeyPressed);


            _nineSlice = new NineSlice(contentChest.Get <Texture2D>("UI/title_menu_buttons"),
                                       new Dictionary <Segment, Rectangle>
            {
                { Segment.TopLeft, new Rectangle(233, 4, 1, 1) },
                { Segment.Top, new Rectangle(234, 4, 1, 1) },
                { Segment.TopRight, new Rectangle(235, 4, 1, 1) },
                { Segment.Right, new Rectangle(235, 5, 1, 1) },
                { Segment.BottomRight, new Rectangle(235, 6, 1, 1) },
                { Segment.Bottom, new Rectangle(234, 6, 1, 1) },
                { Segment.BottomLeft, new Rectangle(233, 6, 1, 1) },
                { Segment.Left, new Rectangle(233, 5, 1, 1) },
                { Segment.Center, new Rectangle(234, 5, 1, 1) },
            });
        }
Beispiel #3
0
        internal static bool TryHandleAsBaseType(string baseType, SystemManagers systemManagers, out IRenderable containedObject)
        {
            bool handledAsBaseType = true;

            containedObject = null;

            switch (baseType)
            {
            case "Container":

                LineRectangle lineRectangle = new LineRectangle(systemManagers);
                containedObject = lineRectangle;
                break;

            case "Rectangle":
                LineRectangle rectangle = new LineRectangle();
                rectangle.IsDotted = false;
                containedObject    = rectangle;
                break;

            case "Circle":
                LineCircle circle = new LineCircle();
                circle.CircleOrigin = CircleOrigin.TopLeft;
                containedObject     = circle;
                break;

            case "ColoredRectangle":
                SolidRectangle solidRectangle = new SolidRectangle();
                containedObject = solidRectangle;
                break;

            case "Sprite":
                Texture2D texture = null;

                Sprite sprite = new Sprite(texture);
                containedObject = sprite;

                break;

            case "NineSlice":
            {
                NineSlice nineSlice = new NineSlice();
                containedObject = nineSlice;
            }
            break;

            case "Text":
            {
                Text text = new Text(systemManagers, "");
                containedObject = text;
            }
            break;

            default:
                handledAsBaseType = false;
                break;
            }

            return(handledAsBaseType);
        }
Beispiel #4
0
        private static void Main(string[] args)
        {
            _frame       = new NineSlice(new Image("files/frame.png"), new IntRectangle(30, 30, 10, 30));
            _card        = new Image("files/cardHeartsQ.png");
            _card.Origin = (IntVector)_card.Size / 2;

            _cross      = new Image("files/grey_crossGrey.png");
            _crossHover = new Image("files/red_cross.png");

            Application.Run(() =>
            {
                _window = new Window("Fake Window", transparent: true);
                _window.MoveToCenter();
                _window.IsDecorated = false;

                //
                _window.MousePressed  += OnMouseClick;
                _window.MouseReleased += OnMouseClick;
                _window.MouseMoved    += OnMouseMove;

                // Initial card position
                _cardPos = (Vector)_window.Size / 2F;

                // Begin render loop
                var loop = GameLoop.Create(_window.Graphics, OnDraw);
                loop.Start();
            });
        }
Beispiel #5
0
        private void SetupUserInterface()
        {
            var mainMenuSpriteMap = _spriteMapLoader.GetContent("assets/UI/title_menu_buttons.json");

            var nineSlice = new NineSlice(_menuButtons, new Dictionary <Segment, Rectangle>
            {
                { Segment.TopLeft, new Rectangle(1, 189, 8, 9) },
                { Segment.Top, new Rectangle(10, 189, 1, 9) },
                { Segment.TopRight, new Rectangle(12, 189, 8, 9) },
                { Segment.Right, new Rectangle(12, 199, 8, 1) },
                { Segment.BottomRight, new Rectangle(12, 201, 8, 8) },
                { Segment.Bottom, new Rectangle(10, 201, 1, 8) },
                { Segment.BottomLeft, new Rectangle(1, 201, 8, 8) },
                { Segment.Left, new Rectangle(1, 199, 8, 1) },
                { Segment.Center, new Rectangle(10, 199, 1, 1) }
            });

            _panel = new Panel(nineSlice,
                               new Rectangle(
                                   (int)(_viewPortManager.ViewPort.Center().X - 250),
                                   (int)(_viewPortManager.ViewPort.Center().Y - 250), 500,
                                   500), _buttonScale);

            BackButton = new TexturedButton(
                mainMenuSpriteMap.CreateSpriteFromRegion("Back_Off"),
                mainMenuSpriteMap.CreateSpriteFromRegion("Back_On"),
                _panel.BottomLeft().Add(0, 10), _buttonScale);

            _panel.AddChild(BackButton);

            _userInterface.AddWidget(_panel);
        }
Beispiel #6
0
        public HighlightManager(Layer layer)
        {
            mOverlaySolidRectangle         = new SolidRectangle();
            mOverlaySolidRectangle.Name    = "Overlay SolidRectangle";
            mOverlaySolidRectangle.Color   = Color.LightGreen;
            mOverlaySolidRectangle.Color.A = 100;
            mOverlaySolidRectangle.Visible = false;
            ShapeManager.Self.Add(mOverlaySolidRectangle, layer);

            mOverlaySprite            = new Sprite(null);
            mOverlaySprite.Name       = "Overlay Sprite";
            mOverlaySprite.BlendState = BlendState.Additive;
            mOverlaySprite.Visible    = false;
            SpriteManager.Self.Add(mOverlaySprite, layer);

            mOverlayNineSlice            = new NineSlice();
            mOverlayNineSlice.Name       = "Overlay NineSlice";
            mOverlayNineSlice.BlendState = BlendState.Additive;
            mOverlayNineSlice.Visible    = false;
            SpriteManager.Self.Add(mOverlayNineSlice, layer);

            mOverlayLinePolygon      = new LinePolygon();
            mOverlayLinePolygon.Name = "Overly LinePolygon";
            // polys are white by default so let's make it dark
            mOverlayLinePolygon.Color    = Color.DarkGreen;
            mOverlayLinePolygon.IsDotted = true;
            mOverlayLinePolygon.Visible  = false;
            ShapeManager.Self.Add(mOverlayLinePolygon, layer);
        }
Beispiel #7
0
        public void FiveValueDecimalTest()
        {
            // Save the current culture.
            CultureInfo currentCulture = CultureInfo.CurrentCulture;

            // Set the culture to German, as it uses the ',' character for decimal places which should break parsing if not accounted for.
            CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");

            bool parsedCorrectly = NineSlice.TryParse("0.2, 0.8, 0.1, 0.9, 01011", out NineSlice nineSlice);

            // Set the culture back so that the error message displays correctly.
            CultureInfo.CurrentCulture = currentCulture;

            Assert.IsTrue(parsedCorrectly, $"Parse failed {nineSlice}.");

            Assert.AreEqual(0.2f, nineSlice.MinX, "MinX was invalid.");
            Assert.AreEqual(0.8f, nineSlice.MaxX, "MaxX was invalid.");
            Assert.AreEqual(0.1f, nineSlice.MinY, "MinY was invalid.");
            Assert.AreEqual(0.9f, nineSlice.MaxY, "MaxY was invalid.");

            Assert.IsFalse(nineSlice.IsPieceStretched(Piece.Left), "Left edge is stretched when it shouldn't be.");
            Assert.IsTrue(nineSlice.IsPieceStretched(Piece.Bottom), "Bottom edge is not stretched when it should be.");
            Assert.IsFalse(nineSlice.IsPieceStretched(Piece.Right), "Right edge is stretched when it shouldn't be.");
            Assert.IsTrue(nineSlice.IsPieceStretched(Piece.Top), "Top edge is not stretched when it should be.");
            Assert.IsTrue(nineSlice.IsPieceStretched(Piece.Centre), "Centre is not stretched when it should be.");
        }
 /// <summary>
 /// A text and panel combination content.
 /// </summary>
 /// <param name="rectangle">Drawing bounds</param>
 /// <param name="padding">The text padding, i.e. how much space the text should be bordered by.</param>
 /// <param name="alignment">The location at which the text is anchored to.</param>
 public IMGuiTextPanelContent(RectangleF rectangle, NineSlice backgroundSlice, Color backgroundColor, Vector2 padding,
                              Enums.Alignment alignment, Color fontColor, bool wrap, float scale) : base(rectangle, backgroundSlice, backgroundColor, scale)
 {
     this.padding   = padding;
     this.alignment = alignment;
     this.fontColor = fontColor;
     this.wrap      = wrap;
 }
Beispiel #9
0
        public void ArgumentCountTest()
        {
            Assert.IsFalse(NineSlice.TryParse("_, _, _", out _), "TryParse returned true with 3 arguments.");
            Assert.ThrowsException <ArgumentException>(() => NineSlice.Parse("_, _, _"), $"Parse did not throw {nameof(ArgumentException)} with 3 arguments.");

            Assert.IsFalse(NineSlice.TryParse("_, _, _, _, _, _", out _), "TryParse returned true with 6 arguments.");
            Assert.ThrowsException <ArgumentException>(() => NineSlice.Parse("_, _, _, _, _, _"), $"Parse did not throw {nameof(ArgumentException)} with 6 arguments.");
        }
Beispiel #10
0
        public void FourValueTest()
        {
            Assert.IsTrue(NineSlice.TryParse("0.2, 0.8, 0.1, 0.9", out NineSlice nineSlice), "Parse failed.");

            Assert.AreEqual(0.2f, nineSlice.MinX, "MinX was invalid.");
            Assert.AreEqual(0.8f, nineSlice.MaxX, "MaxX was invalid.");
            Assert.AreEqual(0.1f, nineSlice.MinY, "MinY was invalid.");
            Assert.AreEqual(0.9f, nineSlice.MaxY, "MaxY was invalid.");
        }
Beispiel #11
0
        private void assertRectangle(NineSlice nineSlice, Rectangle bounds, Piece piece, int x, int y, int width, int height)
        {
            Rectangle slicedBounds = nineSlice.CalculateSource(bounds, piece);

            Assert.AreEqual(width, slicedBounds.Width, $"{piece} Rectangle's width incorrect.");
            Assert.AreEqual(height, slicedBounds.Height, $"{piece} Rectangle's height incorrect.");
            Assert.AreEqual(x, slicedBounds.X, $"{piece} Rectangle's x incorrect.");
            Assert.AreEqual(y, slicedBounds.Y, $"{piece} Rectangle's y incorrect.");
        }
        public IMGuiPanelContent SetColors(Color hotColor, NineSlice hotSlice, Color activeColor, NineSlice activeSlice, float alpha)
        {
            this.hotColor = hotColor;
            this.hotSlice = hotSlice;
            this.hotColor = new Color(hotColor, alpha);

            this.activeColor = activeColor;
            this.activeSlice = activeSlice;
            this.activeColor = new Color(activeColor, alpha);

            return(this);
        }
Beispiel #13
0
        public TextButton(string text, NineSlice backgroundTexture)
        {
            _label      = new Label(text, Color.Black);
            _background = new Background(backgroundTexture);

            Width  = _background.Width = _label.Width + LeftPadding + RightPadding;
            Height = _background.Height = _label.Height + TopPadding + BottomPadding;

            AddChild(_background);
            AddChild(_label);

            CenterLabel();
        }
Beispiel #14
0
    void Awake()
    {
        grid = MeshUtils.CreatePlane(50f, 50f, 1, 1, new Vector3(0f, -0.001f, 0f));
        grid.layer = LayerMask.NameToLayer("Selection");
        grid.AddComponent<BoxCollider>().center = new Vector3(0f, 0.001f, 0f);
        grid.name = "SelectionBase";
        Destroy(grid.GetComponent<MeshRenderer>());

        selectionData = new float[4]{0,0,0,0};

        nineSlice = GetComponent<NineSlice>();
        nineSlice.SetSize(unitSize, unitSize);
        nineSlice.transform.rotation = Quaternion.Euler(90f, 0f, 0f);
    }
Beispiel #15
0
        public static void RegisterButtonNineslice(NineSlice nineslice, Color color, ButtonSwapType swapType = ButtonSwapType.SwapColor,
                                                   NineSlice hotSlice = null, NineSlice activeSlice = null, Color?hotColor = null, Color?activeColor = null)
        {
            ButtonNineslice = nineslice;
            ButtonColor     = color;

            _ButtonSwapType = swapType;

            ButtonHotColor    = hotColor.GetValueOrDefault();
            ButtonActiveColor = activeColor.GetValueOrDefault();

            ButtonHotNineSlice    = hotSlice;
            ButtonActiveNineSlice = activeSlice;
        }
Beispiel #16
0
        public void FiveValueTest()
        {
            Assert.IsTrue(NineSlice.TryParse("0.2, 0.8, 0.1, 0.9, 01011", out NineSlice nineSlice), "Parse failed.");

            Assert.AreEqual(0.2f, nineSlice.MinX, "MinX was invalid.");
            Assert.AreEqual(0.8f, nineSlice.MaxX, "MaxX was invalid.");
            Assert.AreEqual(0.1f, nineSlice.MinY, "MinY was invalid.");
            Assert.AreEqual(0.9f, nineSlice.MaxY, "MaxY was invalid.");

            Assert.IsFalse(nineSlice.IsPieceStretched(Piece.Left), "Left edge is stretched when it shouldn't be.");
            Assert.IsTrue(nineSlice.IsPieceStretched(Piece.Bottom), "Bottom edge is not stretched when it should be.");
            Assert.IsFalse(nineSlice.IsPieceStretched(Piece.Right), "Right edge is stretched when it shouldn't be.");
            Assert.IsTrue(nineSlice.IsPieceStretched(Piece.Top), "Top edge is not stretched when it should be.");
            Assert.IsTrue(nineSlice.IsPieceStretched(Piece.Centre), "Centre is not stretched when it should be.");
        }
Beispiel #17
0
    void Awake()
    {
        grid       = MeshUtils.CreatePlane(50f, 50f, 1, 1, new Vector3(0f, -0.001f, 0f));
        grid.layer = LayerMask.NameToLayer("Selection");
        grid.AddComponent <BoxCollider>().center = new Vector3(0f, 0.001f, 0f);
        grid.name = "SelectionBase";
        Destroy(grid.GetComponent <MeshRenderer>());

        selectionData = new float[4] {
            0, 0, 0, 0
        };

        nineSlice = GetComponent <NineSlice>();
        nineSlice.SetSize(unitSize, unitSize);
        nineSlice.transform.rotation = Quaternion.Euler(90f, 0f, 0f);
    }
Beispiel #18
0
        private void UpdateHighlightElements()
        {
            SetLineRectangleAroundIpso(GetOrMakeRectangleAtIndex(0), mHighlightedIpso);

            if (mHighlightedIpso.Component is NineSlice)
            {
                NineSlice nineSlice = mHighlightedIpso.Component as NineSlice;

                float topHeight    = 0;
                float centerHeight = 0;
                float bottomHeight = 0;

                float leftWidth   = 0;
                float rightWidth  = 0;
                float centerWidth = 0;

                if (nineSlice.TopTexture != null && nineSlice.BottomTexture != null &&
                    nineSlice.LeftTexture != null && nineSlice.RightTexture != null)
                {
                    topHeight = nineSlice.OutsideSpriteHeight;

                    bottomHeight = nineSlice.OutsideSpriteHeight;

                    leftWidth = nineSlice.OutsideSpriteWidth;

                    rightWidth = nineSlice.OutsideSpriteWidth;

                    centerHeight = nineSlice.Height - (topHeight + bottomHeight);
                    centerWidth  = nineSlice.Width - (leftWidth + rightWidth);

                    LineRectangle tallRectangle = GetOrMakeRectangleAtIndex(1);
                    tallRectangle.Color  = Color.Red;
                    tallRectangle.X      = nineSlice.GetAbsoluteX() + leftWidth;
                    tallRectangle.Y      = nineSlice.GetAbsoluteY();
                    tallRectangle.Width  = centerWidth;
                    tallRectangle.Height = nineSlice.Height;

                    LineRectangle wideRectangle = GetOrMakeRectangleAtIndex(2);
                    wideRectangle.Color  = Color.Red;
                    wideRectangle.X      = nineSlice.GetAbsoluteX();
                    wideRectangle.Y      = nineSlice.GetAbsoluteY() + topHeight;
                    wideRectangle.Width  = nineSlice.Width;
                    wideRectangle.Height = centerHeight;
                }
            }
        }
        public override void LoadAsset(string key)
        {
            assets[key].loadedAsset = true;

            NineSliceAsset deserialized = Deserialize(assets[key].fileName);

            if (deserialized == null)
            {
                Logger.GetOrCreate("BrUtility").Log(Logger.LogLevel.Error, "Could not load a nine slice asset by name of " + assets[key].fileName + ". Is the file missing, or is the json incorrect?");
            }

            var       sizeSer = deserialized.size.Split(',');
            Size      size    = new Size(float.Parse(sizeSer[0]), float.Parse(sizeSer[1]));
            NineSlice slice   = new NineSlice(assetManager.GetAsset <Texture2D>(deserialized.texture), size,
                                              deserialized.distLeft, deserialized.distRight, deserialized.distTop, deserialized.distBottom);

            assets[key].asset = slice;
        }
Beispiel #20
0
        public void NonThirdSourceTest()
        {
            // Create a basic thirds nineslice.
            NineSlice nineSlice = NineSlice.Thirds;

            // Create a bounds that is not divisible by 3.
            Rectangle bounds = new Rectangle(0, 0, 4, 4);

            // Ensure the bounds have been sliced correctly.
            assertRectangle(nineSlice, bounds, Piece.TopLeft, 0, 0, 1, 1);
            assertRectangle(nineSlice, bounds, Piece.Left, 0, 1, 1, 2);
            assertRectangle(nineSlice, bounds, Piece.BottomLeft, 0, 3, 1, 1);
            assertRectangle(nineSlice, bounds, Piece.Bottom, 1, 3, 2, 1);
            assertRectangle(nineSlice, bounds, Piece.BottomRight, 3, 3, 1, 1);
            assertRectangle(nineSlice, bounds, Piece.Right, 3, 1, 1, 2);
            assertRectangle(nineSlice, bounds, Piece.TopRight, 3, 0, 1, 1);
            assertRectangle(nineSlice, bounds, Piece.Top, 1, 0, 2, 1);
            assertRectangle(nineSlice, bounds, Piece.Centre, 1, 1, 2, 2);
        }
Beispiel #21
0
        public void ThirdSourceTest()
        {
            // Create a basic thirds nineslice.
            NineSlice nineSlice = NineSlice.Thirds;

            // Create a bounds that is divisible by 3.
            Rectangle bounds = new Rectangle(0, 0, 9, 9);

            // Ensure the bounds have been sliced correctly.
            assertRectangle(nineSlice, bounds, Piece.TopLeft, 0, 0, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.Left, 0, 3, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.BottomLeft, 0, 6, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.Bottom, 3, 6, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.BottomRight, 6, 6, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.Right, 6, 3, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.TopRight, 6, 0, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.Top, 3, 0, 3, 3);
            assertRectangle(nineSlice, bounds, Piece.Centre, 3, 3, 3, 3);
        }
Beispiel #22
0
 private static void SetAlphaAndColorValues(NineSlice nineSlice, RecursiveVariableFinder rvf)
 {
     nineSlice.Color = ColorFromRvf(rvf);
 }
Beispiel #23
0
        /// <summary>
        /// Handle scene entry
        /// </summary>
        public override void Enter()
        {
            base.Enter();

            RB.SpriteSheetSetup(0, "Demos/DemoReel/DemoSpritePack", new Vector2i(16, 16));
            RB.SpriteSheetSetup(1, "Demos/DemoReel/Sprites", new Vector2i(16, 16));
            RB.SpriteSheetSetup(2, "Demos/DemoReel/DemoSpritePack", new Vector2i(8, 8));
            RB.SpriteSheetSet(0);

            mSpriteHero1         = RB.PackedSpriteGet("Characters/Hero1");
            mSpriteHero2         = RB.PackedSpriteGet("Characters/Hero2");
            mSpriteDirtCenter    = RB.PackedSpriteGet("Terrain/DirtCenter");
            mSpriteDirtSide      = RB.PackedSpriteGet("Terrain/DirtSide");
            mSpriteGrassTop      = RB.PackedSpriteGet("Terrain/GrassTop");
            mSpriteGrassTopRight = RB.PackedSpriteGet("Terrain/GrassTopRight");
            mSpriteWater         = RB.PackedSpriteGet("Terrain/Water");

            if (mSpriteHero1.Size.x == 0)
            {
                mBadSpritepack = true;
                return;
            }

            RB.MapSpriteSet(0, new Vector2i(0, 0), mSpriteGrassTopRight, RB.FLIP_H);
            RB.MapSpriteSet(0, new Vector2i(1, 0), mSpriteGrassTop);
            RB.MapSpriteSet(0, new Vector2i(2, 0), mSpriteGrassTop);
            RB.MapSpriteSet(0, new Vector2i(3, 0), mSpriteGrassTopRight);

            RB.MapSpriteSet(0, new Vector2i(0, 1), mSpriteDirtSide, RB.FLIP_H);
            RB.MapSpriteSet(0, new Vector2i(1, 1), mSpriteDirtCenter);
            RB.MapSpriteSet(0, new Vector2i(2, 1), mSpriteDirtCenter);
            RB.MapSpriteSet(0, new Vector2i(3, 1), mSpriteDirtSide);

            mNineSlice = new NineSlice("Other/NinesliceTopLeft", "Other/NinesliceTop", "Other/NinesliceMiddle");

            var glyphs = new List <string>();

            for (int i = 0; i <= 9; i++)
            {
                glyphs.Add("Font/" + i);
            }

            glyphs.Add("Font/colon");

            List <char> chars = new List <char>();

            for (char c = '0'; c <= '9'; c++)
            {
                chars.Add(c);
            }

            chars.Add(':');

            RB.FontSetup(0, chars, glyphs, 0, 1, 1, true);

            var mapping = new string[16];

            for (int i = 0; i < 16; i++)
            {
                mapping[i] = "Terrain/Tiny" + i;
            }

            var tinyMap = RB.MapLoadTMX("Demos/DemoReel/TinyMap");

            RB.MapLoadTMXLayer(tinyMap, "Terrain", 1, mapping);
            RB.MapLayerSpriteSheetSet(1, 2);
        }
Beispiel #24
0
        /// <summary>
        /// Update
        /// </summary>
        public override void Update()
        {
            base.Update();

            if (spriteSheet1.status == RB.AssetStatus.Ready &&
                spriteSheet2.status == RB.AssetStatus.Ready &&
                spriteSheet3.status == RB.AssetStatus.Ready &&
                !mSpritePackPostLoadDone)
            {
                RB.SpriteSheetSet(spriteSheet1);

                mSpriteHero1         = RB.PackedSpriteGet("Characters/Hero1");
                mSpriteHero2         = RB.PackedSpriteGet("Characters/Hero2");
                mSpriteDirtCenter    = RB.PackedSpriteGet("Terrain/DirtCenter");
                mSpriteDirtSide      = RB.PackedSpriteGet("Terrain/DirtSide");
                mSpriteGrassTop      = RB.PackedSpriteGet("Terrain/GrassTop");
                mSpriteGrassTopRight = RB.PackedSpriteGet("Terrain/GrassTopRight");
                mSpriteWater         = RB.PackedSpriteGet("Terrain/Water");

                RB.MapSpriteSet(0, new Vector2i(0, 0), mSpriteGrassTopRight, RB.FLIP_H);
                RB.MapSpriteSet(0, new Vector2i(1, 0), mSpriteGrassTop);
                RB.MapSpriteSet(0, new Vector2i(2, 0), mSpriteGrassTop);
                RB.MapSpriteSet(0, new Vector2i(3, 0), mSpriteGrassTopRight);

                RB.MapSpriteSet(0, new Vector2i(0, 1), mSpriteDirtSide, RB.FLIP_H);
                RB.MapSpriteSet(0, new Vector2i(1, 1), mSpriteDirtCenter);
                RB.MapSpriteSet(0, new Vector2i(2, 1), mSpriteDirtCenter);
                RB.MapSpriteSet(0, new Vector2i(3, 1), mSpriteDirtSide);

                RB.MapLayerSpriteSheetSet(0, spriteSheet1);

                mNineSlice = new NineSlice("Other/NinesliceTopLeft", "Other/NinesliceTop", "Other/NinesliceMiddle");

                var glyphs = new List <string>();
                for (int i = 0; i <= 9; i++)
                {
                    glyphs.Add("Font/" + i);
                }

                glyphs.Add("Font/colon");

                List <char> chars = new List <char>();
                for (char c = '0'; c <= '9'; c++)
                {
                    chars.Add(c);
                }

                chars.Add(':');

                font.Setup(chars, glyphs, spriteSheet1, 1, 1, true);

                var mapping = new string[16];
                for (int i = 0; i < 16; i++)
                {
                    mapping[i] = "Terrain/Tiny" + i;
                }

                mMap.Load("Demos/DemoReel/TinyMap");
                mMap.LoadLayer("Terrain", 1, mapping);
                RB.MapLayerSpriteSheetSet(1, spriteSheet3);

                mSpritePackPostLoadDone = true;
            }
        }
Beispiel #25
0
 public Background(NineSlice nineSlice, int width, int height)
 {
     Graphic = nineSlice;
     Width   = width;
     Height  = height;
 }
Beispiel #26
0
 public Background(NineSlice nineSlice)
 {
     Graphic = nineSlice;
 }
 public IMGuiPanelContent(RectangleF rectangle, NineSlice backgroundSlice, Color backgroundColor, float scale) : base(rectangle)
 {
     this.backgroundSlice = backgroundSlice;
     this.backgroundColor = backgroundColor;
     this.scale           = scale;
 }
        private void SetupUserInterface()
        {
            var mainMenuSpriteMap = _spriteMapLoader.GetContent("assets/UI/title_menu_buttons.json");
            var interfaceFont     = _contentChest.Get <SpriteFont>("Fonts/InterfaceFont");
            var inputBoxFont      = _contentChest.Get <SpriteFont>("Fonts/InputBoxFont");

            var portraitTexture = _contentChest.Get <Texture2D>("portrait_background");
            var portraitImage   = new Sprite(portraitTexture);

            var nineSlice = new NineSlice(_menuButtons, new Dictionary <Segment, Rectangle>
            {
                { Segment.TopLeft, new Rectangle(1, 189, 8, 9) },
                { Segment.Top, new Rectangle(10, 189, 1, 9) },
                { Segment.TopRight, new Rectangle(12, 189, 8, 9) },
                { Segment.Right, new Rectangle(12, 199, 8, 1) },
                { Segment.BottomRight, new Rectangle(12, 201, 8, 8) },
                { Segment.Bottom, new Rectangle(10, 201, 1, 8) },
                { Segment.BottomLeft, new Rectangle(1, 201, 8, 8) },
                { Segment.Left, new Rectangle(1, 199, 8, 1) },
                { Segment.Center, new Rectangle(10, 199, 1, 1) }
            });

            var panelWidth = (int)(30 + 200 + 30 + portraitImage.Texture.Width * _buttonScale + 30);

            _panel = new Panel(nineSlice,
                               new Rectangle(
                                   (int)(_viewPortPortManager.ViewPort.Center().X - panelWidth / 2f),
                                   (int)(_viewPortPortManager.ViewPort.Center().Y - (500 + 30 + 22 * _buttonScale) / 2f), panelWidth,
                                   500), _buttonScale);

            // Back Button
            BackButton = new TexturedButton(
                mainMenuSpriteMap.CreateSpriteFromRegion("Back_Off"),
                mainMenuSpriteMap.CreateSpriteFromRegion("Back_On"),
                new Vector2(_panel.BottomLeft().X,
                            _panel.BottomLeft().Y + 10), _buttonScale);

            // Done Button
            var doneOffSprite = mainMenuSpriteMap.CreateSpriteFromRegion("Done_Off");

            DoneButton = new TexturedButton(doneOffSprite,
                                            mainMenuSpriteMap.CreateSpriteFromRegion("Done_On"),
                                            new Vector2(_panel.BottomRight().X - doneOffSprite.Source.Width * _buttonScale,
                                                        _panel.BottomLeft().Y + 10), _buttonScale);

            // Name
            var nameSectionPosition = new Vector2(_panel.Left() + 30,
                                                  _panel.Top() + 30);
            var nameTextBoxTitle = new TextBlock("Name", nameSectionPosition, interfaceFont, Color.White, Color.Black);

            NameTextBox = new TextBox(_contentChest, _keyboardDispatcher,
                                      nameSectionPosition + new Vector2(0, interfaceFont.MeasureString("Name").Y + 10),
                                      inputBoxFont, 200)
            {
                Value = _playerMaker.Name
            };
            NameTextBox.Changed += OnPlayerNameSet;

            // Pronouns
            var pronounSectionPosition = new Vector2(_panel.Left() + 30, NameTextBox.Bounds.Bottom + 10);
            var pronounTextBoxTitle    =
                new TextBlock("Pronouns", pronounSectionPosition, interfaceFont, Color.White, Color.Black);

            PronounDropDown = new DropDownBox(_contentChest, inputBoxFont,
                                              pronounSectionPosition + new Vector2(0, interfaceFont.MeasureString("Pronouns").Y + 10),
                                              _optionsManager.PronounOptions.Pronouns.Select(x =>
                                                                                             $"{x.Subjective}/{x.Objective}").ToArray(), 200);
            PronounDropDown.Hover        += OnPronounSelect;
            PronounDropDown.SelectedIndex = _playerMaker.Pronouns;

            var characterPanel = new Image(portraitImage,
                                           new Vector2(
                                               PronounDropDown.Bounds.Right + 30 +
                                               (_panel.Right() - 30 - (PronounDropDown.Bounds.Right + 30)) / 2f -
                                               portraitImage.Center.X * _buttonScale,
                                               nameTextBoxTitle.Top()), _buttonScale);

            // Character Preview
            var characterPreview = new CharacterPreview(_characterRenderer, characterPanel.Center());

            // Hair
            var hairText = new TextBlock("Hair Style",
                                         new Vector2(PronounDropDown.Left(), PronounDropDown.BottomLeft().Y + 10), interfaceFont, Color.White,
                                         Color.Black);

            PlayerHairDropDown = new DropDownBox(_contentChest, inputBoxFont,
                                                 new Vector2(hairText.Left(), hairText.BottomLeft().Y + 10),
                                                 _hair.Select(x => x.Name).ToArray(), 200);
            PlayerHairDropDown.Hover        += (newIndex) => { characterPreview.Hair = _hair[newIndex]; };
            PlayerHairDropDown.SelectedIndex = _playerMaker.Hair;

            // Head
            var headText = new TextBlock("Head Shape",
                                         PlayerHairDropDown.BottomLeft().Add(0, 10), interfaceFont, Color.White,
                                         Color.Black);
            var horizontalSelector = new HorizontalSelector(headText.BottomLeft().Add(0, 10),
                                                            _heads.Select(x => x.Name).ToArray(), 200,
                                                            mainMenuSpriteMap.CreateSpriteFromRegion("Arrow_Left"),
                                                            mainMenuSpriteMap.CreateSpriteFromRegion("Arrow_Right"),
                                                            interfaceFont, _buttonScale);

            horizontalSelector.SelectionChanged += (newIndex) => { characterPreview.Head = _heads[newIndex]; };
            horizontalSelector.SelectedIndex     = _playerMaker.Head;

            _panel.AddChild(pronounTextBoxTitle);
            _panel.AddChild(nameTextBoxTitle);
            _panel.AddChild(NameTextBox);
            _panel.AddChild(characterPanel);
            _panel.AddChild(BackButton);
            _panel.AddChild(DoneButton);
            _panel.AddChild(hairText);
            _panel.AddChild(headText);
            _panel.AddChild(horizontalSelector);
            _panel.AddChild(characterPreview);

            _panel.AddChild(PlayerHairDropDown);
            _panel.AddChild(PronounDropDown);

            _userInterface.AddWidget(_panel);

            DoneButton.OnClick += () =>
            {
                Console.WriteLine("Saving Settings");
                _playerMaker.SetHair(PlayerHairDropDown.SelectedIndex);
                _playerMaker.SetName(NameTextBox.GetValue());
                _playerMaker.SetPronouns(PronounDropDown.SelectedIndex);
            };
        }
Beispiel #29
0
 public Panel(NineSlice nineSlice, Rectangle bounds, float scale)
 {
     _nineSlice = nineSlice;
     Bounds     = bounds;
     _scale     = scale;
 }
        internal static bool TryHandleAsBaseType(string baseType, SystemManagers systemManagers, out IRenderable containedObject)
        {
            bool handledAsBaseType = true;

            containedObject = null;
#if MONOGAME
            switch (baseType)
            {
            case "Container":
            case "Component":     // this should never be set in Gum, but there could be XML errors or someone could have used an old Gum...
                if (GraphicalUiElement.ShowLineRectangles)
                {
                    LineRectangle lineRectangle = new LineRectangle(systemManagers);
                    containedObject = lineRectangle;
                }
                else
                {
                    containedObject = new InvisibleRenderable();
                }
                break;

            case "Rectangle":
                LineRectangle rectangle = new LineRectangle(systemManagers);
                rectangle.IsDotted = false;
                containedObject    = rectangle;
                break;

            case "Circle":
                LineCircle circle = new LineCircle(systemManagers);
                circle.CircleOrigin = CircleOrigin.TopLeft;
                containedObject     = circle;
                break;

            case "Polygon":
                LinePolygon polygon = new LinePolygon(systemManagers);
                containedObject = polygon;
                break;

            case "ColoredRectangle":
                SolidRectangle solidRectangle = new SolidRectangle();
                containedObject = solidRectangle;
                break;

            case "Sprite":
                Texture2D texture = null;

                Sprite sprite = new Sprite(texture);
                containedObject = sprite;

                break;

            case "NineSlice":
            {
                NineSlice nineSlice = new NineSlice();
                containedObject = nineSlice;
            }
            break;

            case "Text":
            {
                Text text = new Text(systemManagers, "");
                containedObject = text;
            }
            break;

            default:
                handledAsBaseType = false;
                break;
            }
#endif
            return(handledAsBaseType);
        }
Beispiel #31
0
        public void Unserialize(GMDataReader reader)
        {
            Name         = reader.ReadStringPointerObject();
            Width        = reader.ReadInt32();
            Height       = reader.ReadInt32();
            MarginLeft   = reader.ReadInt32();
            MarginRight  = reader.ReadInt32();
            MarginBottom = reader.ReadInt32();
            MarginTop    = reader.ReadInt32();
            Transparent  = reader.ReadWideBoolean();
            Smooth       = reader.ReadWideBoolean();
            Preload      = reader.ReadWideBoolean();
            BBoxMode     = reader.ReadUInt32();
            SepMasks     = (SepMaskType)reader.ReadInt32();
            OriginX      = reader.ReadInt32();
            OriginY      = reader.ReadInt32();

            TextureItems = new GMRemotePointerList <GMTextureItem>();
            if (reader.ReadInt32() == -1)
            {
                // Special/GMS2 sprite type
                SpecialOrGMS2 = true;

                int version = reader.ReadInt32();
                S_SpriteType = (SpriteType)reader.ReadInt32();
                if (reader.VersionInfo.IsNumberAtLeast(2))
                {
                    GMS2_PlaybackSpeed     = reader.ReadSingle();
                    GMS2_PlaybackSpeedType = (AnimSpeedType)reader.ReadInt32();
                    if (version >= 2)
                    {
                        GMS2_3_Sequence = reader.ReadPointerObjectUnique <SequenceReference>();
                        if (version >= 3)
                        {
                            reader.VersionInfo.SetNumber(2, 3, 2);
                            GMS2_3_2_NineSlice = reader.ReadPointerObjectUnique <NineSlice>();
                        }
                    }
                }

                switch (S_SpriteType)
                {
                case SpriteType.Normal:
                    TextureItems.Unserialize(reader);
                    ParseMaskData(reader);
                    break;

                case SpriteType.SWF:
                {
                    if (reader.ReadInt32() != 8)
                    {
                        reader.Warnings.Add(new GMWarning("SWF format not correct"));
                    }
                    TextureItems.Unserialize(reader);

                    // Parse the actual data
                    reader.Pad(4);
                    int begin            = reader.Offset;
                    int jpegTablesLength = (reader.ReadInt32() & ~int.MinValue);
                    if (reader.ReadInt32() != 8)
                    {
                        reader.Warnings.Add(new GMWarning("SWF format not correct"));
                    }
                    reader.Offset += jpegTablesLength;
                    reader.Pad(4);
                    reader.Offset += (reader.ReadInt32() * 8) + 4;
                    int frameCount = reader.ReadInt32();
                    reader.Offset += 16;
                    int maskCount = reader.ReadInt32();
                    reader.Offset += 8;
                    for (int i = 0; i < frameCount; i++)
                    {
                        reader.Offset += (reader.ReadInt32() * 100) + 16;
                    }
                    for (int i = 0; i < maskCount; i++)
                    {
                        reader.Offset += reader.ReadInt32();
                        reader.Pad(4);
                    }
                    int swfDataLength = reader.Offset - begin;
                    reader.Offset = begin;
                    S_Buffer      = reader.ReadBytes(swfDataLength);
                }
                break;

                case SpriteType.Spine:
                {
                    reader.Pad(4);

                    int begin = reader.Offset;
                    reader.ReadUInt32();         // version number
                    int jsonLength    = reader.ReadInt32();
                    int atlasLength   = reader.ReadInt32();
                    int textureLength = reader.ReadInt32();
                    reader.ReadUInt32();         // atlas tex width
                    reader.ReadUInt32();         // atlas tex height
                    reader.Offset = begin;

                    S_Buffer = reader.ReadBytes(24 + jsonLength + atlasLength + textureLength);
                }
                break;
                }
            }
            else
            {
                // Normal, GM:S 1.4 sprite
                reader.Offset -= 4;
                TextureItems.Unserialize(reader);
                ParseMaskData(reader);
            }
        }