From 6f96b2af9799146b6984be316e84689b5897a7ea Mon Sep 17 00:00:00 2001 From: Michele Date: Tue, 22 Dec 2020 10:14:07 +0000 Subject: [PATCH] drawing modes --- Sledgemapper.Shared/Entities/Tile.cs | 10 +++ Sledgemapper/InsertMode.cs | 6 +- Sledgemapper/Sledgemapper.cs | 31 +++++++++ Sledgemapper/State.cs | 63 +++++++++++++++++++ Sledgemapper/UI/MainWidget.Generated.cs | 83 ++++++++++++++++++++----- Sledgemapper/UI/mainwidget.xml | 10 +++ 6 files changed, 185 insertions(+), 18 deletions(-) diff --git a/Sledgemapper.Shared/Entities/Tile.cs b/Sledgemapper.Shared/Entities/Tile.cs index 2305868..b5a947c 100644 --- a/Sledgemapper.Shared/Entities/Tile.cs +++ b/Sledgemapper.Shared/Entities/Tile.cs @@ -27,4 +27,14 @@ return $"{X}_{Y}_{EndX}_{EndY}"; } } + + public class SnapPoint : BaseMapEntity + { + public int Index { get; set; } + + public override string ToString() + { + return $"{X}_{Y}_{Index}"; + } + } } diff --git a/Sledgemapper/InsertMode.cs b/Sledgemapper/InsertMode.cs index 5416f57..f234f12 100644 --- a/Sledgemapper/InsertMode.cs +++ b/Sledgemapper/InsertMode.cs @@ -4,6 +4,10 @@ { Tile, Wall, - Overlay + Overlay, + NewWall, + NewLine, + NewRoom, + NewTile } } diff --git a/Sledgemapper/Sledgemapper.cs b/Sledgemapper/Sledgemapper.cs index fc5c206..84685fe 100644 --- a/Sledgemapper/Sledgemapper.cs +++ b/Sledgemapper/Sledgemapper.cs @@ -133,6 +133,10 @@ namespace Sledgemapper _mainWidget.MenuConnectJoin.Enabled = false; _mainWidget.MenuConnectSync.Enabled = false; _mainWidget.MenuConnectUpload.Enabled = false; + _mainWidget.BtnToolbarLine.Click += OnBtnToolbarLinClicked; + _mainWidget.BtnToolbarRoom.Click += OnBtnToolbarRoomClicked; + _mainWidget.BtnToolbarTile.Click += OnBtnToolbarTileClicked; + _mainWidget.BtnToolbarWall.Click += OnBtnToolbarWallClicked; AddItemToToolGrid(_mainWidget.GridTiles, OnTileButtonClicked, "tiles"); AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, "walls"); @@ -145,6 +149,28 @@ namespace Sledgemapper _desktop.Root = _mainWidget; } + private void OnBtnToolbarWallClicked(object sender, EventArgs e) + { + _state.InsertMode=InsertMode.NewWall; + } + + private void OnBtnToolbarTileClicked(object sender, EventArgs e) + { + _state.InsertMode=InsertMode.NewTile; + + } + + private void OnBtnToolbarRoomClicked(object sender, EventArgs e) + { + _state.InsertMode=InsertMode.NewRoom; + + } + + private void OnBtnToolbarLinClicked(object sender, EventArgs e) + { + _state.InsertMode=InsertMode.NewLine; + } + private void OneMenuFileSettingsSelected(object sender, EventArgs e) { var propertyGrid = new PropertyGrid @@ -246,6 +272,11 @@ namespace Sledgemapper _state.SelectOverlay(screenPosition); } + if (_state.InsertMode == InsertMode.NewLine) + { + _state.SelectClosestSnapPoint(screenPosition); + } + // if (newState.IsKeyDown(Keys.LeftControl) && newState.IsKeyDown(Keys.C) && !oldState.IsKeyDown(Keys.C)) // { // CenterOnSelectedTile(); diff --git a/Sledgemapper/State.cs b/Sledgemapper/State.cs index 9a2ba9a..713e9db 100644 --- a/Sledgemapper/State.cs +++ b/Sledgemapper/State.cs @@ -10,6 +10,7 @@ namespace Sledgemapper public Tile HoveredTile { get; set; } public Wall SelectedWall { get; set; } public Overlay SelectedOverlay { get; set; } + public SnapPoint SelectedSnapPoint {get;set;} public Note SelectedNote { get; set; } public int TileSize { get; set; } public string CurrentTileId { get; set; } @@ -65,6 +66,68 @@ namespace Sledgemapper SelectedWall.Rotation = 0; } } + + public void SelectClosestSnapPoint(Point mousePosition) + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y; + +var points = new List{ + new Point(HoveredTile.X * TileSize, HoveredTile.Y * TileSize), + new Point((HoveredTile.X+1) * TileSize, HoveredTile.Y * TileSize), + new Point((HoveredTile.X+1) * TileSize, (HoveredTile.Y+1) * TileSize), + new Point(HoveredTile.X * TileSize, (HoveredTile.Y+1) * TileSize), + new Point(HoveredTile.X * TileSize+TileSize/2, HoveredTile.Y * TileSize), + new Point(HoveredTile.X * TileSize + TileSize/2, HoveredTile.Y * TileSize+ TileSize/2), + new Point(HoveredTile.X * TileSize, HoveredTile.Y * TileSize+TileSize/2), + new Point(HoveredTile.X * TileSize+TileSize , HoveredTile.Y * TileSize+TileSize/2), + new Point(HoveredTile.X * TileSize+TileSize/2, HoveredTile.Y * TileSize+TileSize) + +}; + + var q1 = Math.Pow(mousePosition.X - HoveredTile.X * TileSize, 2); + var q2 = Math.Pow(HoveredTile.Y * TileSize - mousePosition.Y, 2); + var s = Math.Sqrt(q1 + q2); + + if (s < TileSize / 3) + { + SelectedOverlay.Intersection = true; + return; + } + + q1 = Math.Pow(mousePosition.X - (HoveredTile.X + 1) * TileSize, 2); + s = Math.Sqrt(q1 + q2); + if (s < TileSize / 3) + { + SelectedOverlay.X = SelectedOverlay.X + 1; + SelectedOverlay.Intersection = true; + return; + } + + //q1 = System.Math.Pow(mousePosition.X - (_hoveredTile.X + 1) * _tileSize, 2); + q2 = Math.Pow((HoveredTile.Y + 1) * TileSize - mousePosition.Y, 2); + s = Math.Sqrt(q1 + q2); + if (s < TileSize / 3) + { + SelectedOverlay.X = SelectedOverlay.X + 1; + SelectedOverlay.Y = SelectedOverlay.Y + 1; + SelectedOverlay.Intersection = true; + return; + } + + q1 = Math.Pow(mousePosition.X - HoveredTile.X * TileSize, 2); + q2 = Math.Pow((HoveredTile.Y + 1) * TileSize - mousePosition.Y, 2); + s = Math.Sqrt(q1 + q2); + if (s < TileSize / 3) + { + SelectedOverlay.X = SelectedOverlay.X; + SelectedOverlay.Y = SelectedOverlay.Y + 1; + SelectedOverlay.Intersection = true; + return; + } + + SelectedOverlay.Intersection = false; + } public void SelectOverlay(Point mousePosition) { SelectedOverlay.X = HoveredTile.X; diff --git a/Sledgemapper/UI/MainWidget.Generated.cs b/Sledgemapper/UI/MainWidget.Generated.cs index 19c8773..76e9cb3 100644 --- a/Sledgemapper/UI/MainWidget.Generated.cs +++ b/Sledgemapper/UI/MainWidget.Generated.cs @@ -1,5 +1,4 @@ -/* Generated by MyraPad at 02/12/2020 10:41:53 */ -using Myra; +/* Generated by MyraPad at 21/12/2020 21:54:47 */ using Myra.Graphics2D; using Myra.Graphics2D.TextureAtlases; using Myra.Graphics2D.UI; @@ -124,6 +123,47 @@ namespace Sledgemapper.UI _mainMenu.Items.Add(menuItem2); _mainMenu.Items.Add(menuItem3); + BtnToolbarTile = new ImageTextButton(); + BtnToolbarTile.Text = " T"; + BtnToolbarTile.Width = 40; + BtnToolbarTile.Height = 40; + BtnToolbarTile.VerticalAlignment = Myra.Graphics2D.UI.VerticalAlignment.Center; + BtnToolbarTile.Id = "BtnToolbarTile"; + + BtnToolbarLine = new ImageTextButton(); + BtnToolbarLine.Text = " L"; + BtnToolbarLine.Width = 40; + BtnToolbarLine.Height = 40; + BtnToolbarLine.VerticalAlignment = Myra.Graphics2D.UI.VerticalAlignment.Center; + BtnToolbarLine.Id = "BtnToolbarLine"; + + BtnToolbarWall = new ImageTextButton(); + BtnToolbarWall.Text = " W"; + BtnToolbarWall.Width = 40; + BtnToolbarWall.Height = 40; + BtnToolbarWall.VerticalAlignment = Myra.Graphics2D.UI.VerticalAlignment.Center; + BtnToolbarWall.Id = "BtnToolbarWall"; + + BtnToolbarRoom = new ImageTextButton(); + BtnToolbarRoom.Text = " R"; + BtnToolbarRoom.Width = 40; + BtnToolbarRoom.Height = 40; + BtnToolbarRoom.VerticalAlignment = Myra.Graphics2D.UI.VerticalAlignment.Center; + BtnToolbarRoom.Id = "BtnToolbarRoom"; + + var horizontalStackPanel1 = new HorizontalStackPanel(); + horizontalStackPanel1.Spacing = 5; + horizontalStackPanel1.Proportions.Add(new Proportion + { + Type = Myra.Graphics2D.UI.ProportionType.Auto, + }); + horizontalStackPanel1.VerticalAlignment = Myra.Graphics2D.UI.VerticalAlignment.Top; + horizontalStackPanel1.Height = 50; + horizontalStackPanel1.Widgets.Add(BtnToolbarTile); + horizontalStackPanel1.Widgets.Add(BtnToolbarLine); + horizontalStackPanel1.Widgets.Add(BtnToolbarWall); + horizontalStackPanel1.Widgets.Add(BtnToolbarRoom); + GridTiles = new Grid(); GridTiles.ColumnSpacing = 8; GridTiles.RowSpacing = 8; @@ -234,22 +274,22 @@ namespace Sledgemapper.UI lblSessionName.MinWidth = 100; lblSessionName.Id = "lblSessionName"; - var horizontalStackPanel1 = new HorizontalStackPanel(); - horizontalStackPanel1.Spacing = 10; - horizontalStackPanel1.Proportions.Add(new Proportion + var horizontalStackPanel2 = new HorizontalStackPanel(); + horizontalStackPanel2.Spacing = 10; + horizontalStackPanel2.Proportions.Add(new Proportion { Type = Myra.Graphics2D.UI.ProportionType.Auto, }); - horizontalStackPanel1.Height = 25; - horizontalStackPanel1.Background = new SolidBrush("#333333FF"); - horizontalStackPanel1.Widgets.Add(label1); - horizontalStackPanel1.Widgets.Add(lblConnectionStatus); - horizontalStackPanel1.Widgets.Add(verticalSeparator1); - horizontalStackPanel1.Widgets.Add(label2); - horizontalStackPanel1.Widgets.Add(lblUsername); - horizontalStackPanel1.Widgets.Add(verticalSeparator2); - horizontalStackPanel1.Widgets.Add(label3); - horizontalStackPanel1.Widgets.Add(lblSessionName); + horizontalStackPanel2.Height = 25; + horizontalStackPanel2.Background = new SolidBrush("#333333FF"); + horizontalStackPanel2.Widgets.Add(label1); + horizontalStackPanel2.Widgets.Add(lblConnectionStatus); + horizontalStackPanel2.Widgets.Add(verticalSeparator1); + horizontalStackPanel2.Widgets.Add(label2); + horizontalStackPanel2.Widgets.Add(lblUsername); + horizontalStackPanel2.Widgets.Add(verticalSeparator2); + horizontalStackPanel2.Widgets.Add(label3); + horizontalStackPanel2.Widgets.Add(lblSessionName); Proportions.Add(new Proportion @@ -257,12 +297,17 @@ namespace Sledgemapper.UI Type = Myra.Graphics2D.UI.ProportionType.Auto, }); Proportions.Add(new Proportion + { + Type = Myra.Graphics2D.UI.ProportionType.Auto, + }); + Proportions.Add(new Proportion { Type = Myra.Graphics2D.UI.ProportionType.Fill, }); Widgets.Add(_mainMenu); - Widgets.Add(verticalSplitPane1); Widgets.Add(horizontalStackPanel1); + Widgets.Add(verticalSplitPane1); + Widgets.Add(horizontalStackPanel2); } @@ -281,6 +326,10 @@ namespace Sledgemapper.UI public MenuItem MenuViewCenterOnSelection; public MenuItem MenuHelpAbout; public HorizontalMenu _mainMenu; + public ImageTextButton BtnToolbarTile; + public ImageTextButton BtnToolbarLine; + public ImageTextButton BtnToolbarWall; + public ImageTextButton BtnToolbarRoom; public Grid GridTiles; public Grid GridWalls; public Grid GridOverlays; @@ -288,4 +337,4 @@ namespace Sledgemapper.UI public Label lblUsername; public Label lblSessionName; } -} +} \ No newline at end of file diff --git a/Sledgemapper/UI/mainwidget.xml b/Sledgemapper/UI/mainwidget.xml index 2a727e1..56fbb00 100644 --- a/Sledgemapper/UI/mainwidget.xml +++ b/Sledgemapper/UI/mainwidget.xml @@ -2,6 +2,7 @@ + @@ -31,6 +32,15 @@ + + + + + + + + +