drawing modes
This commit is contained in:
parent
b21a7c7ef2
commit
6f96b2af97
6 changed files with 185 additions and 18 deletions
|
@ -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}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,10 @@
|
|||
{
|
||||
Tile,
|
||||
Wall,
|
||||
Overlay
|
||||
Overlay,
|
||||
NewWall,
|
||||
NewLine,
|
||||
NewRoom,
|
||||
NewTile
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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="&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>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue