diff --git a/Sledgemapper/State.cs b/Sledgemapper/State.cs index 713e9db..62fa4d9 100644 --- a/Sledgemapper/State.cs +++ b/Sledgemapper/State.cs @@ -1,6 +1,7 @@ using Microsoft.Xna.Framework; using System; using Sledgemapper.Shared.Entities; +using System.Collections.Generic; namespace Sledgemapper { @@ -10,7 +11,7 @@ namespace Sledgemapper public Tile HoveredTile { get; set; } public Wall SelectedWall { get; set; } public Overlay SelectedOverlay { get; set; } - public SnapPoint SelectedSnapPoint {get;set;} + public SnapPoint SelectedSnapPoint { get; set; } public Note SelectedNote { get; set; } public int TileSize { get; set; } public string CurrentTileId { get; set; } @@ -67,66 +68,136 @@ namespace Sledgemapper } } - public void SelectClosestSnapPoint(Point mousePosition) + public void SelectClosestSnapPoint(Point mousePosition) { - SelectedSnapPoint.X = HoveredTile.X; - SelectedSnapPoint.Y = HoveredTile.Y; + Math.DivRem(mousePosition.X, TileSize / 2, out var remx); + Math.DivRem(mousePosition.Y, TileSize / 2, out var remy); + //var snaptileY=mousePosition.Y/(TileSize/2f); + Console.WriteLine($"{remx} _ {remy}"); -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) + if (remx == 0) { - SelectedOverlay.Intersection = true; - return; + if (remy == 0) + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y; + SelectedSnapPoint.Index = 1; + } + else if (remy < 8) + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y; + SelectedSnapPoint.Index = 3; + } + else + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y+1; + SelectedSnapPoint.Index = 1; + } } - q1 = Math.Pow(mousePosition.X - (HoveredTile.X + 1) * TileSize, 2); - s = Math.Sqrt(q1 + q2); - if (s < TileSize / 3) + else if (remx <8) { - SelectedOverlay.X = SelectedOverlay.X + 1; - SelectedOverlay.Intersection = true; - return; + if (remy == 0) + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y; + SelectedSnapPoint.Index = 2; + } + else if (remy < 8) + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y; + SelectedSnapPoint.Index = 4; + } + else + { + SelectedSnapPoint.X = HoveredTile.X; + SelectedSnapPoint.Y = HoveredTile.Y+1; + SelectedSnapPoint.Index = 2; + } + } + else{ + if (remy == 0) + { + SelectedSnapPoint.X = HoveredTile.X+1; + SelectedSnapPoint.Y = HoveredTile.Y; + SelectedSnapPoint.Index = 1; + } + else if (remy < 8) + { + SelectedSnapPoint.X = HoveredTile.X+1; + SelectedSnapPoint.Y = HoveredTile.Y; + SelectedSnapPoint.Index = 3; + } + else + { + SelectedSnapPoint.X = HoveredTile.X+1; + SelectedSnapPoint.Y = HoveredTile.Y+1; + SelectedSnapPoint.Index = 1; + } } - //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; + // 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) {