Display room size while drawing

This commit is contained in:
Michele 2021-02-04 13:10:24 +00:00
parent 0ad11e20bd
commit 47ea480b18

View file

@ -148,18 +148,18 @@ namespace Sledgemapper
} }
} }
private void AddItemToToolGrid(Grid grid, EventHandler eventAction, SpriteSheet spriteSheet, string e="") private void AddItemToToolGrid(Grid grid, EventHandler eventAction, SpriteSheet spriteSheet, string e = "")
{ {
var indexX = 0; var indexX = 0;
var indexY = 0; var indexY = 0;
//foreach (var item in spriteSheet.index) //foreach (var item in spriteSheet.index)
grid.Widgets.Clear(); grid.Widgets.Clear();
_mainWidget.ScrOverlay.ResetScroll(); _mainWidget.ScrOverlay.ResetScroll();
foreach (var item in spriteSheet.index.Where(t=>String.IsNullOrWhiteSpace(e) || t.Key.ToLower().Contains(e.ToLower()))) foreach (var item in spriteSheet.index.Where(t => String.IsNullOrWhiteSpace(e) || t.Key.ToLower().Contains(e.ToLower())))
{ {
var tileButton = new ImageButton { Image = new TextureRegion(spriteSheet.Texture, item.Value), GridColumn = indexY, GridRow = indexX, Id = item.Key, Width = 40, Height = 40 }; var tileButton = new ImageButton { Image = new TextureRegion(spriteSheet.Texture, item.Value), GridColumn = indexY, GridRow = indexX, Id = item.Key, Width = 40, Height = 40 };
tileButton.Click += eventAction; tileButton.Click += eventAction;
tileButton.MouseMoved+=OnTileButtonTouchEntered; tileButton.MouseMoved += OnTileButtonTouchEntered;
tileButton.MouseLeft += OnTileButtonTouchLeft; tileButton.MouseLeft += OnTileButtonTouchLeft;
grid.Widgets.Add(tileButton); grid.Widgets.Add(tileButton);
indexY++; indexY++;
@ -174,7 +174,7 @@ namespace Sledgemapper
private void OnTileButtonTouchLeft(object sender, EventArgs e) private void OnTileButtonTouchLeft(object sender, EventArgs e)
{ {
_desktop.HideContextMenu(); _desktop.HideContextMenu();
_lblOverlayName.Visible=false; _lblOverlayName.Visible = false;
} }
Label _lblOverlayName; Label _lblOverlayName;
@ -182,10 +182,10 @@ namespace Sledgemapper
private void OnTileButtonTouchEntered(object sender, EventArgs e) private void OnTileButtonTouchEntered(object sender, EventArgs e)
{ {
var mouseState = Mouse.GetState().Position; var mouseState = Mouse.GetState().Position;
mouseState.X+=10; mouseState.X += 10;
mouseState.Y+=10; mouseState.Y += 10;
_lblOverlayName.Visible=true; _lblOverlayName.Visible = true;
_lblOverlayName.Text=((ImageButton)sender).Id; _lblOverlayName.Text = ((ImageButton)sender).Id;
_desktop.ShowContextMenu(_lblOverlayName, mouseState); _desktop.ShowContextMenu(_lblOverlayName, mouseState);
// _lblOverlayName.true; // _lblOverlayName.true;
} }
@ -222,9 +222,9 @@ mouseState.Y+=10;
_spriteSheet = new SpriteSheet(); _spriteSheet = new SpriteSheet();
_spriteSheet.LoadContent(Content); _spriteSheet.LoadContent(Content);
_lblOverlayName = new Label(); _lblOverlayName = new Label();
_lblOverlayName.Background=new SolidBrush(Color.SlateGray); _lblOverlayName.Background = new SolidBrush(Color.SlateGray);
_lblOverlayName.Padding=new Myra.Graphics2D.Thickness(4); _lblOverlayName.Padding = new Myra.Graphics2D.Thickness(4);
AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, _wallsContent); AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, _wallsContent);
AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, _spriteSheet); AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, _spriteSheet);
@ -796,25 +796,94 @@ _lblOverlayName.Padding=new Myra.Graphics2D.Thickness(4);
break; break;
} }
var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state.TileSize / 3).Value ?? _fonts.Last().Value;
var fscale = 1.2f;
var width = Math.Abs((endposX - posX));
var height = Math.Abs((posY - endposY));
var tilesWidth = width / (double)_state.TileSize;
var tilesHeight = height / (double)_state.TileSize;
tilesWidth = Math.Round(tilesWidth * 2, MidpointRounding.AwayFromZero) / 2;
tilesHeight = Math.Round(tilesHeight * 2, MidpointRounding.AwayFromZero) / 2;
var xmeasure = ffont.MeasureString($"{tilesWidth}");
var ymeasure = ffont.MeasureString($"{tilesHeight}");
float widthX = 0, widthY = 0, heightX = 0, heightY = 0;
Rectangle area = new Rectangle();
if (posX != endposX && posY != endposY) if (posX != endposX && posY != endposY)
{ {
if ((posX > endposX && posY > endposY) || (posX < endposX && posY < endposY)) if ((posX > endposX && posY > endposY) || (posX < endposX && posY < endposY))
{ {
_spriteBatch.Draw(_transparentRedRectangle, new Rectangle(posX, posY, endposX - posX, endposY - posY), null, Color.White, 0, new Vector2(0, 0), SpriteEffects.None, 1); area = new Rectangle(posX, posY, endposX - posX, endposY - posY);
if (posX > endposX && posY > endposY)
{
widthX = endposX + (width / 2) - xmeasure.X / 2;
widthY = endposY - ymeasure.Y * 1.2f;
heightX = posX + xmeasure.X / 2;
heightY = endposY + (height / 2) - ymeasure.Y / 2;
}
else if (posX < endposX && posY < endposY)
{
widthX = posX + (width / 2) - xmeasure.X / 2;
widthY = posY - ymeasure.Y * 1.2f;
heightX = endposX + xmeasure.X / 2;
heightY = posY + (height/ 2) - ymeasure.Y / 2;
}
} }
else else
{ {
if (endposY < posY) if (endposY < posY)
{ {
_spriteBatch.Draw(_transparentRedRectangle, new Rectangle(posX, endposY, endposX - posX, posY - endposY), null, Color.White, 0, new Vector2(0, 0), SpriteEffects.None, 1); area = new Rectangle(posX, endposY, endposX - posX, posY - endposY);
widthX = posX + (width / 2) - xmeasure.X / 2;
widthY = endposY - ymeasure.Y * 1.2f;
heightX = endposX + xmeasure.X / 2;
heightY = endposY + (height / 2) - ymeasure.Y / 2;
} }
if (endposX < posX) if (endposX < posX)
{ {
_spriteBatch.Draw(_transparentRedRectangle, new Rectangle(endposX, posY, posX - endposX, endposY - posY), null, Color.White, 0, new Vector2(0, 0), SpriteEffects.None, 1); area = new Rectangle(endposX, posY, posX - endposX, endposY - posY);
widthX = endposX + (width / 2) - xmeasure.X / 2;
widthY = posY - ymeasure.Y * 1.2f;
heightX = posX + xmeasure.X / 2;
heightY = posY + (height / 2) - ymeasure.Y / 2;
} }
} }
_spriteBatch.Draw(_transparentRedRectangle, area, null, Color.White, 0, new Vector2(0, 0), SpriteEffects.None, 1);
_spriteBatch.DrawString(ffont,
$"{tilesWidth}",
new Vector2(
widthX,
widthY
),
Color.Red,
0,
Vector2.Zero,
fscale,
SpriteEffects.None,
0);
_spriteBatch.DrawString(ffont,
$"{tilesHeight}",
new Vector2(
heightX, heightY
),
Color.Red,
0,
Vector2.Zero,
fscale,
SpriteEffects.None,
0);
} }
} }
} }