drawing modes

This commit is contained in:
Michele 2020-12-22 10:14:07 +00:00
parent b21a7c7ef2
commit 6f96b2af97
6 changed files with 185 additions and 18 deletions

View file

@ -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}";
}
}
}

View file

@ -4,6 +4,10 @@
{
Tile,
Wall,
Overlay
Overlay,
NewWall,
NewLine,
NewRoom,
NewTile
}
}

View file

@ -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();

View file

@ -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<Point>{
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;

View file

@ -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;
}
}
}

View file

@ -2,6 +2,7 @@
<Project.ExportOptions Namespace="Sledgemapper.UI" Class="MainWidget" OutputPath="C:\dev\Map\Sledgemapper\UI" />
<VerticalStackPanel>
<VerticalStackPanel.Proportions>
<Proportion Type="Auto" />
<Proportion Type="Auto" />
<Proportion Type="Fill" />
</VerticalStackPanel.Proportions>
@ -31,6 +32,15 @@
<MenuItem Text="&amp;About" Id="MenuHelpAbout" />
</MenuItem>
</HorizontalMenu>
<HorizontalStackPanel Spacing="5" VerticalAlignment="Top" Height="50">
<HorizontalStackPanel.Proportions>
<Proportion Type="Auto" />
</HorizontalStackPanel.Proportions>
<ImageTextButton Text=" T" Width="40" Height="40" VerticalAlignment="Center" Id="BtnToolbarTile" />
<ImageTextButton Text=" L" Width="40" Height="40" VerticalAlignment="Center" Id="BtnToolbarLine" />
<ImageTextButton Text=" W" Width="40" Height="40" VerticalAlignment="Center" Id="BtnToolbarWall" />
<ImageTextButton Text=" R" Width="40" Height="40" VerticalAlignment="Center" Id="BtnToolbarRoom" />
</HorizontalStackPanel>
<VerticalSplitPane Width="200" Background="#A1A1A1FF">
<VerticalStackPanel>
<VerticalStackPanel.Proportions>