diff --git a/Sledgemapper.Shared/Entities/Session.cs b/Sledgemapper.Shared/Entities/Session.cs index 04626e9..46c271e 100644 --- a/Sledgemapper.Shared/Entities/Session.cs +++ b/Sledgemapper.Shared/Entities/Session.cs @@ -190,7 +190,7 @@ namespace Sledgemapper.Shared.Entities } var lineExist = Lines.TryGetValue(line.ToString(), out var tile); - var newLine = new Line { Start=line.Start, End=line.End}; + var newLine = new Line { Start=line.Start, End=line.End, Width=line.Width}; if (lineExist) { Lines.TryRemove(line.ToString(), out var _); diff --git a/Sledgemapper.Shared/Entities/Tile.cs b/Sledgemapper.Shared/Entities/Tile.cs index 12c23d4..e0dc91e 100644 --- a/Sledgemapper.Shared/Entities/Tile.cs +++ b/Sledgemapper.Shared/Entities/Tile.cs @@ -21,8 +21,8 @@ { public SnapPoint Start { get; set; } public SnapPoint End { get; set; } - - + public float Width {get;set;} + public override string ToString() { return $"{Start.X}_{Start.Y}_{Start.Index}_{End.X}_{End.Y}_{End.Index}"; diff --git a/Sledgemapper/Sledgemapper.cs b/Sledgemapper/Sledgemapper.cs index b79a5d6..26ff2f9 100644 --- a/Sledgemapper/Sledgemapper.cs +++ b/Sledgemapper/Sledgemapper.cs @@ -367,25 +367,42 @@ namespace Sledgemapper { if (_state.LineStart is null) { - _state.LineStart = new SnapPoint { X = _state.SelectedSnapPoint.X, Y = _state.SelectedSnapPoint.Y, Index=_state.SelectedSnapPoint.Index }; + _state.LineStart = new SnapPoint { X = _state.SelectedSnapPoint.X, Y = _state.SelectedSnapPoint.Y, Index = _state.SelectedSnapPoint.Index }; } else { + var line = new Line { Start = new SnapPoint { X = _state.LineStart.X, Y = _state.LineStart.Y, Index = _state.LineStart.Index }, - End = new SnapPoint { X = _state.SelectedSnapPoint.X, Y = _state.SelectedSnapPoint.Y, Index = _state.SelectedSnapPoint.Index } + End = new SnapPoint { X = _state.SelectedSnapPoint.X, Y = _state.SelectedSnapPoint.Y, Index = _state.SelectedSnapPoint.Index }, + Width = _state.LineWidth }; _state.LineStart = null; + _state.LineWidth = 1; _sessionData.NewLine(line); } + + } + + if (_state.InsertMode == InsertMode.NewLine && _state.LineStart != null) + { + if (mouseState.ScrollWheelValue > oldMouseState.ScrollWheelValue) + { + _state.LineWidth += .01f; + } + else if (mouseState.ScrollWheelValue < oldMouseState.ScrollWheelValue) + { + _state.LineWidth -= .01f; + } } if (newState.IsKeyDown(Keys.LeftControl) && mouseState.ScrollWheelValue != oldMouseState.ScrollWheelValue) { // var center = new Point(GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2); + var maxTileSize=500; var center = new Point((Window.ClientBounds.Width + 200) / 2 - _state.TileSize / 2, Window.ClientBounds.Height / 2 - _state.TileSize / 2); var tx = (center.X - (int)_viewportCenter.X) / _state.TileSize; @@ -393,7 +410,7 @@ namespace Sledgemapper if (mouseState.ScrollWheelValue > oldMouseState.ScrollWheelValue) { - _state.TileSize = Math.Min(120, _state.TileSize + 10); + _state.TileSize = Math.Min(maxTileSize, _state.TileSize + 10); } else if (mouseState.ScrollWheelValue < oldMouseState.ScrollWheelValue) @@ -596,14 +613,78 @@ namespace Sledgemapper snapPoint.Y += _state.TileSize / 2; snapPoint.X += _state.TileSize / 2; break; - - - } _spriteBatch.DrawCircle(snapPoint, _state.TileSize / 5f, 100, Color.Red, 2); + + + //line preview + if (_state.LineStart != null) + { + + // border pass + + // var content = Content.Load($"tiles/{tile.ID}"); + + var posX = _state.LineStart.X * _state.TileSize; + var posY = _state.LineStart.Y * _state.TileSize; + + var endposX = _state.SelectedSnapPoint.X * _state.TileSize; + var endposY = _state.SelectedSnapPoint.Y * _state.TileSize; + + switch (_state.LineStart.Index) + { + case 1: + break; + case 2: + posX += _state.TileSize / 2; + break; + case 3: + posY += _state.TileSize / 2; + + break; + case 4: + posX += _state.TileSize / 2; + posY += _state.TileSize / 2; + break; + } + + switch (_state.SelectedSnapPoint.Index) + { + case 1: + break; + case 2: + endposX += _state.TileSize / 2; + break; + case 3: + endposY += _state.TileSize / 2; + + break; + case 4: + endposX += _state.TileSize / 2; + endposY += _state.TileSize / 2; + break; + } + + var l = Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2)); + + var angle = Math.Atan2(posY - endposY, endposX - posX); + var angleRad = -(float)angle;//MathHelper.ToRadians((float)angle); + if (l > 0) + { + var whiteRectangle = new Texture2D(GraphicsDevice, (int)l, (int)(_state.TileSize * _state.LineWidth)); + // whiteRectangle.SetData(new[] { new Color(Color.Red, 80) }); + + whiteRectangle.SetData(Enumerable.Range(0, (int)l * ((int)(_state.TileSize * _state.LineWidth))).Select(i => new Color(Color.Red, 80)).ToArray()); + + + _spriteBatch.Draw(whiteRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize * _state.LineWidth)), null, Color.White, angleRad, new Vector2(0, 0), SpriteEffects.None, 1); + } + } } + + _spriteBatch.End(); try @@ -898,8 +979,11 @@ namespace Sledgemapper private void DrawLines() { - var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1); - whiteRectangle.SetData(new[] { _settings.OverlayTintColor }); + // var borderRectangle = new Texture2D(GraphicsDevice, 1, 1); + // borderRectangle.SetData(new[] { _settings.OverlayTintColor }); + + // var innerRectangle = new Texture2D(GraphicsDevice, 1, 1); + // innerRectangle.SetData(new[] { Color.White }); // border pass foreach (var tile in _sessionData.Lines.Values) @@ -946,18 +1030,23 @@ namespace Sledgemapper break; } + var l = Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2)); + if (l > 0) + { + var borderRectangle = new Texture2D(GraphicsDevice, (int)l, (int)(_state.TileSize * _state.LineWidth) + 8); + // whiteRectangle.SetData(new[] { new Color(Color.Red, 80) }); - + borderRectangle.SetData(Enumerable.Range(0, (int)l * ((int)(_state.TileSize * _state.LineWidth) + 8)).Select(i => _settings.OverlayTintColor).ToArray()); - // _spriteBatch.DrawLine(posX, posY, endposX, endposY, _settings.OverlayTintColor, _state.TileSize + 4); + + // _spriteBatch.Draw(whiteRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize+_state.LineWidth)), null, Color.White, angleRad, new Vector2(0,0), SpriteEffects.None, 1); - var l = Math.Sqrt(Math.Pow(posX-endposX,2) + Math.Pow(posY-endposY,2)); - - var angle =Math.Atan2(posY-endposY, endposX-posX); - var angleRad = -(float)angle;//MathHelper.ToRadians((float)angle); -_spriteBatch.Draw(whiteRectangle, new Rectangle(posX, posY,(int)l , _state.TileSize+8), null,Color.White,angleRad,Vector2.Zero,SpriteEffects.None,1 ); + var angle = Math.Atan2(posY - endposY, endposX - posX); + var angleRad = -(float)angle;//MathHelper.ToRadians((float)angle); + _spriteBatch.Draw(borderRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize * tile.Width) + 8), null, Color.White, angleRad, new Vector2(0, 4), SpriteEffects.None, 1); + } // _spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+8, _state.TileSize+8),null,Color.White,0,Vector2.Zero,SpriteEffects.None, 1); // _spriteBatch.DrawRectangle(new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+8, _state.TileSize+8), _settings.OverlayTintColor,1); @@ -966,63 +1055,88 @@ _spriteBatch.Draw(whiteRectangle, new Rectangle(posX, posY,(int)l , _state.TileS } //inner pass - // foreach (var tile in _sessionData.Lines.Values) - // { - // // var content = Content.Load($"tiles/{tile.ID}"); + foreach (var tile in _sessionData.Lines.Values) + { + // var content = Content.Load($"tiles/{tile.ID}"); - // var posX = tile.Start.X * _state.TileSize; - // var posY = tile.Start.Y * _state.TileSize; + var posX = tile.Start.X * _state.TileSize; + var posY = tile.Start.Y * _state.TileSize; - // var endposX = tile.End.X * _state.TileSize; - // var endposY = tile.End.Y * _state.TileSize; + var endposX = tile.End.X * _state.TileSize; + var endposY = tile.End.Y * _state.TileSize; - // switch (tile.Start.Index) - // { - // case 1: - // break; - // case 2: - // posX += _state.TileSize / 2; - // break; - // case 3: - // posY += _state.TileSize / 2; + switch (tile.Start.Index) + { + case 1: + break; + case 2: + posX += _state.TileSize / 2; + break; + case 3: + posY += _state.TileSize / 2; - // break; - // case 4: - // posX += _state.TileSize / 2; - // posY += _state.TileSize / 2; - // break; - // } + break; + case 4: + posX += _state.TileSize / 2; + posY += _state.TileSize / 2; + break; + } - // switch (tile.End.Index) - // { - // case 1: - // break; - // case 2: - // endposX += _state.TileSize / 2; - // break; - // case 3: - // endposY += _state.TileSize / 2; + switch (tile.End.Index) + { + case 1: + break; + case 2: + endposX += _state.TileSize / 2; + break; + case 3: + endposY += _state.TileSize / 2; - // break; - // case 4: - // endposX += _state.TileSize / 2; - // endposY += _state.TileSize / 2; - // break; - // } + break; + case 4: + endposX += _state.TileSize / 2; + endposY += _state.TileSize / 2; + break; + } - // var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1); - // whiteRectangle.SetData(new[] { _settings.OverlayTintColor }); + // var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1); + // whiteRectangle.SetData(new[] { _settings.OverlayTintColor }); - // _spriteBatch.DrawLine(posX, posY, endposX, endposY, Color.White, _state.TileSize); + // _spriteBatch.DrawLine(posX, posY, endposX, endposY, Color.White, _state.TileSize); - // // _spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+8, _state.TileSize+8),null,Color.White,0,Vector2.Zero,SpriteEffects.None, 1); - // // _spriteBatch.DrawRectangle(new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+8, _state.TileSize+8), _settings.OverlayTintColor,1); + // _spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+8, _state.TileSize+8),null,Color.White,0,Vector2.Zero,SpriteEffects.None, 1); + // _spriteBatch.DrawRectangle(new Rectangle((int)posX-4, (int)posY-4, _state.TileSize+8, _state.TileSize+8), _settings.OverlayTintColor,1); - // // _spriteBatch.Draw(content, new Vector2(posX, posY), - // // null, Color.White, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize) / content.Width, SpriteEffects.None, 0); - // } + // _spriteBatch.Draw(content, new Vector2(posX, posY), + // null, Color.White, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize) / content.Width, SpriteEffects.None, 0); + var l = Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2)); + if (l > 0) + { + var innerRectangle = new Texture2D(GraphicsDevice, 1,1); + innerRectangle.SetData(new[] { Color.White }); + + //innerRectangle.SetData(Enumerable.Range(0, (int)l * ((int)(_state.TileSize + _state.LineWidth))).Select(i => Color.White).ToArray()); + + + // _spriteBatch.Draw(whiteRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize+_state.LineWidth)), null, Color.White, angleRad, new Vector2(0,0), SpriteEffects.None, 1); + + + + var angle = Math.Atan2(posY - endposY, endposX - posX); + var angleRad = -(float)angle;//MathHelper.ToRadians((float)angle); + _spriteBatch.Draw(innerRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize * tile.Width)), null, Color.White, angleRad, new Vector2(0, 0), SpriteEffects.None, 1); + } + + // var l = Math.Sqrt(Math.Pow(posX - endposX, 2) + Math.Pow(posY - endposY, 2)); + + // var angle = Math.Atan2(posY - endposY, endposX - posX); + // var angleRad = -(float)angle;//MathHelper.ToRadians((float)angle); + // _spriteBatch.Draw(innerRectangle, new Rectangle(posX, posY, (int)l, (int)(_state.TileSize * tile.Width)), null, Color.White, angleRad, Vector2.Zero, SpriteEffects.None, 1); + + + } } private void DrawWalls() diff --git a/Sledgemapper/State.cs b/Sledgemapper/State.cs index 119b341..d03d93b 100644 --- a/Sledgemapper/State.cs +++ b/Sledgemapper/State.cs @@ -18,6 +18,7 @@ namespace Sledgemapper public string CurrentWallId { get; set; } public string CurrentOverlayId { get; set; } public SnapPoint LineStart { get; internal set; } + public float LineWidth { get; internal set; } public InsertMode InsertMode; @@ -32,6 +33,7 @@ namespace Sledgemapper SelectedOverlay = new() { X = 1, Y = 1 }; SelectedNote = new() { X = 1, Y = 1 }; TileSize = 30; + LineWidth=1; } public void SelectClosestWall(Point mousePosition)