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; }
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) }, }); }
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); }
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(); }); }
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); }
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); }
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; }
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."); }
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."); }
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); }
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(); }
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); }
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; }
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."); }
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); }
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; }
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); }
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); }
private static void SetAlphaAndColorValues(NineSlice nineSlice, RecursiveVariableFinder rvf) { nineSlice.Color = ColorFromRvf(rvf); }
/// <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); }
/// <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; } }
public Background(NineSlice nineSlice, int width, int height) { Graphic = nineSlice; Width = width; Height = height; }
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); }; }
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); }
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); } }