This commit is contained in:
Michele 2020-12-31 14:32:37 +00:00
parent b66612ab27
commit f9c6b1c02f
4 changed files with 207 additions and 185 deletions

View file

@ -151,24 +151,24 @@ namespace Sledgemapper
private void OnBtnToolbarWallClicked(object sender, EventArgs e)
{
_state.InsertMode=InsertMode.NewWall;
_state.InsertMode = InsertMode.NewWall;
}
private void OnBtnToolbarTileClicked(object sender, EventArgs e)
{
_state.InsertMode=InsertMode.NewTile;
_state.InsertMode = InsertMode.NewTile;
}
private void OnBtnToolbarRoomClicked(object sender, EventArgs e)
{
_state.InsertMode=InsertMode.NewRoom;
_state.InsertMode = InsertMode.NewRoom;
}
private void OnBtnToolbarLinClicked(object sender, EventArgs e)
{
_state.InsertMode=InsertMode.NewLine;
_state.InsertMode = InsertMode.NewLine;
}
private void OneMenuFileSettingsSelected(object sender, EventArgs e)
@ -272,7 +272,7 @@ namespace Sledgemapper
_state.SelectOverlay(screenPosition);
}
if (_state.InsertMode == InsertMode.NewLine)
if (_state.InsertMode == InsertMode.NewLine)
{
_state.SelectClosestSnapPoint(screenPosition);
}
@ -361,22 +361,26 @@ namespace Sledgemapper
}
if (newState.IsKeyDown(Keys.LeftControl) && newState.IsKeyDown(Keys.LeftShift)
if (_state.InsertMode == InsertMode.NewLine && newState.IsKeyDown(Keys.LeftControl)
&& mouseState.LeftButton == ButtonState.Released
&& mouseState.LeftButton != oldMouseState.LeftButton)
{
if (_state.LineStart is null)
{
_state.LineStart = new Tile{X=_state.HoveredTile.X, Y=_state.HoveredTile.Y};
}
else
{
var line = new Line{X = _state.LineStart.X, Y = _state.LineStart.Y, EndX=_state.HoveredTile.X, EndY=_state.HoveredTile.Y};
_state.LineStart=null;
_sessionData.NewLine(line);
if (_state.LineStart is null)
{
_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 }
};
_state.LineStart = null;
_sessionData.NewLine(line);
}
}
}
if (newState.IsKeyDown(Keys.LeftControl) && mouseState.ScrollWheelValue != oldMouseState.ScrollWheelValue)
@ -491,7 +495,7 @@ namespace Sledgemapper
_spriteBatch.Begin(transformMatrix: Matrix.CreateTranslation(_viewportCenter));
DrawTiles();
DrawLines();
DrawLines();
DrawWalls();
DrawOverlays();
DrawNotes();
@ -562,18 +566,44 @@ DrawLines();
DrawPlayers();
var startWall = new Vector2(_state.SelectedWall.X * _state.TileSize, _state.SelectedWall.Y * _state.TileSize);
if (_state.InsertMode == InsertMode.Wall)
{
var startWall = new Vector2(_state.SelectedWall.X * _state.TileSize, _state.SelectedWall.Y * _state.TileSize);
_spriteBatch.DrawLine(startWall, _state.TileSize, MathHelper.ToRadians(90 * _state.SelectedWall.Rotation), Color.Red, 2);
}
var overlay = new Vector2(_state.SelectedOverlay.X * _state.TileSize, _state.SelectedOverlay.Y * _state.TileSize);
if (_state.InsertMode == InsertMode.Overlay && _state.SelectedOverlay.Intersection)
{
var overlay = new Vector2(_state.SelectedOverlay.X * _state.TileSize, _state.SelectedOverlay.Y * _state.TileSize);
_spriteBatch.DrawCircle(overlay, _state.TileSize / 3f, 100, Color.Red, 2);
}
if (_state.InsertMode == InsertMode.NewLine && _state.SelectedSnapPoint != null)
{
var snapPoint = new Vector2(_state.SelectedSnapPoint.X * _state.TileSize, _state.SelectedSnapPoint.Y * _state.TileSize);
switch (_state.SelectedSnapPoint.Index)
{
case 1:
break;
case 2:
snapPoint.X += _state.TileSize / 2;
break;
case 3:
snapPoint.Y += _state.TileSize / 2;
break;
case 4:
snapPoint.Y += _state.TileSize / 2;
snapPoint.X += _state.TileSize / 2;
break;
}
_spriteBatch.DrawCircle(snapPoint, _state.TileSize / 5f, 100, Color.Red, 2);
}
_spriteBatch.End();
try
@ -832,13 +862,13 @@ DrawLines();
{
var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
var posX = tile.X * _state.TileSize ;
var posY = tile.Y * _state.TileSize ;
var posX = tile.X * _state.TileSize;
var posY = tile.Y * _state.TileSize;
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.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.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),
@ -850,14 +880,14 @@ DrawLines();
{
var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
var posX = tile.X * _state.TileSize ;
var posY = tile.Y * _state.TileSize ;
var posX = tile.X * _state.TileSize;
var posY = tile.Y * _state.TileSize;
var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1);
whiteRectangle.SetData(new[] { Color.White });
var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1);
whiteRectangle.SetData(new[] { Color.White });
_spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX, (int)posY, _state.TileSize, _state.TileSize),null,Color.White,0,Vector2.Zero,SpriteEffects.None, 1);
_spriteBatch.Draw(whiteRectangle, new Rectangle((int)posX, (int)posY, _state.TileSize, _state.TileSize), null, Color.White, 0, Vector2.Zero, SpriteEffects.None, 1);
// _spriteBatch.DrawRectangle(new Rectangle((int)posX, (int)posY, _state.TileSize, _state.TileSize), _settings.BackgroundColor,1);
@ -866,28 +896,68 @@ DrawLines();
}
}
private void DrawLines()
private void DrawLines()
{
var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1);
whiteRectangle.SetData(new[] { _settings.OverlayTintColor });
// border pass
foreach (var tile in _sessionData.Lines.Values)
{
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
var posX = tile.X * _state.TileSize ;
var posY = tile.Y * _state.TileSize ;
var posX = tile.Start.X * _state.TileSize;
var posY = tile.Start.Y * _state.TileSize;
var endposX = tile.EndX * _state.TileSize ;
var endposY = tile.EndY * _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;
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;
break;
case 4:
endposX += _state.TileSize / 2;
endposY += _state.TileSize / 2;
break;
}
// _spriteBatch.DrawLine(posX, posY, endposX, endposY, _settings.OverlayTintColor, _state.TileSize + 4);
var l = Math.Sqrt(Math.Pow(posX-endposX,2) + Math.Pow(posY-endposY,2));
var whiteRectangle = new Texture2D(GraphicsDevice, 1, 1);
whiteRectangle.SetData(new[] { _settings.OverlayTintColor });
_spriteBatch.DrawLine(posX, posY, endposX, endposY,_settings.OverlayTintColor,_state.TileSize+4);
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 );
// _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);
@ -896,30 +966,63 @@ _spriteBatch.DrawLine(posX, posY, endposX, endposY,_settings.OverlayTintColor,_s
}
//inner pass
foreach (var tile in _sessionData.Lines.Values)
{
// var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
// foreach (var tile in _sessionData.Lines.Values)
// {
// // var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
var posX = tile.X * _state.TileSize ;
var posY = tile.Y * _state.TileSize ;
// var posX = tile.Start.X * _state.TileSize;
// var posY = tile.Start.Y * _state.TileSize;
var endposX = tile.EndX * _state.TileSize ;
var endposY = tile.EndY * _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;
// 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;
// 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);
// }
}
private void DrawWalls()