searchable overlays, overlay name on hover

This commit is contained in:
Michele 2021-02-04 11:06:17 +00:00
parent afc94fd698
commit 808c0538be
3 changed files with 172 additions and 42 deletions

View file

@ -12,6 +12,7 @@ using Myra.Graphics2D.TextureAtlases;
using Myra.Graphics2D.UI;
using Myra.Graphics2D.UI.File;
using Myra.Graphics2D.UI.Properties;
using Myra.Utility;
using Newtonsoft.Json;
using Sledgemapper.Shared.Entities;
using Sledgemapper.UI;
@ -147,14 +148,19 @@ namespace Sledgemapper
}
}
private void AddItemToToolGrid(Grid grid, EventHandler eventAction, SpriteSheet spriteSheet)
private void AddItemToToolGrid(Grid grid, EventHandler eventAction, SpriteSheet spriteSheet, string e="")
{
var indexX = 0;
var indexY = 0;
foreach (var item in spriteSheet.index)
//foreach (var item in spriteSheet.index)
grid.Widgets.Clear();
_mainWidget.ScrOverlay.ResetScroll();
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 };
tileButton.Click += eventAction;
tileButton.MouseMoved+=OnTileButtonTouchEntered;
tileButton.MouseLeft += OnTileButtonTouchLeft;
grid.Widgets.Add(tileButton);
indexY++;
if (indexY == 4)
@ -165,6 +171,25 @@ namespace Sledgemapper
}
}
private void OnTileButtonTouchLeft(object sender, EventArgs e)
{
_desktop.HideContextMenu();
_lblOverlayName.Visible=false;
}
Label _lblOverlayName;
private void OnTileButtonTouchEntered(object sender, EventArgs e)
{
var mouseState = Mouse.GetState().Position;
mouseState.X+=10;
mouseState.Y+=10;
_lblOverlayName.Visible=true;
_lblOverlayName.Text=((ImageButton)sender).Id;
_desktop.ShowContextMenu(_lblOverlayName, mouseState);
// _lblOverlayName.true;
}
protected override void LoadContent()
{
_spriteBatch = new SpriteBatch(GraphicsDevice);
@ -194,10 +219,13 @@ namespace Sledgemapper
_mainWidget.BtnToolbarDelete.Click += OnBtnToolbarDeleteClicked;
_wallsContent = Content.LoadContentFolder<Texture2D>("walls");
_spriteSheet = new SpriteSheet();
_spriteSheet.LoadContent(Content);
_lblOverlayName = new Label();
_lblOverlayName.Background=new SolidBrush(Color.SlateGray);
_lblOverlayName.Padding=new Myra.Graphics2D.Thickness(4);
AddItemToToolGrid(_mainWidget.GridWalls, OnWallButtonClicked, _wallsContent);
AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, _spriteSheet);
@ -208,6 +236,8 @@ namespace Sledgemapper
_mainWidget.BtnToolbarLine.Image = new TextureRegion(Content.Load<Texture2D>("icon_line"));
_mainWidget.BtnToolbarRoom.Image = new TextureRegion(Content.Load<Texture2D>("icon_room"));
_mainWidget.BtnToolbarDelete.Image = new TextureRegion(Content.Load<Texture2D>("icon_delete"));
_mainWidget.TxtOverlaySearch.TextChangedByUser += OnTxtOverlaySearchChange;
_desktop.Root = _mainWidget;
_transparentRedRectangle = new Texture2D(GraphicsDevice, 1, 1);
@ -217,38 +247,54 @@ namespace Sledgemapper
_whiteRectangle.SetData(new[] { Color.White });
}
private void OnTxtOverlaySearchChange(object sender, ValueChangedEventArgs<string> e)
{
// var filteredWidget = _mainWidget.GridOverlays.Widgets.Where(m => m.Id.ToLower().Contains(e.NewValue.ToLower())).ToArray();
// foreach (var w in _mainWidget.GridOverlays.Widgets)
// {
// w.
// w.Visible = false;
// }
// foreach (var w in filteredWidget)
// {
// w.Visible = true;
// }
AddItemToToolGrid(_mainWidget.GridOverlays, OnOverlayButtonClicked, _spriteSheet, e.NewValue);
}
private void OnBtnToolbarDeleteClicked(object sender, EventArgs e)
{
_state.InsertMode = InsertMode.NewDelete;
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
((ImageTextButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
}
private void OnBtnToolbarWallClicked(object sender, EventArgs e)
{
_state.InsertMode = InsertMode.NewWall;
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
((ImageTextButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
}
private void OnBtnToolbarTileClicked(object sender, EventArgs e)
{
_state.InsertMode = InsertMode.NewTile;
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
((ImageTextButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
}
private void OnBtnToolbarRoomClicked(object sender, EventArgs e)
{
_state.InsertMode = InsertMode.NewRoom;
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
((ImageTextButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
}
@ -256,8 +302,8 @@ namespace Sledgemapper
private void OnBtnToolbarLinClicked(object sender, EventArgs e)
{
_state.InsertMode = InsertMode.NewLine;
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
_mainWidget.ClearSelection();
((ImageTextButton)sender).Border = new SolidBrush(Color.Red);
((ImageTextButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
}
@ -1025,22 +1071,22 @@ namespace Sledgemapper
private bool IsMapElementOffscreen(BaseMapEntity item)
{
SnapPoint start,end;
SnapPoint start, end;
switch (item)
{
case Line l:
start=l.Start;
end=l.End;
break;
switch (item)
{
case Line l:
start = l.Start;
end = l.End;
break;
case Room room:
start = room.Start;
end=room.End;
break;
default:
return true;
}
case Room room:
start = room.Start;
end = room.End;
break;
default:
return true;
}
var visibleTilesX = GraphicsDevice.Viewport.Width / _state.TileSize + 1;
var visibleTilesY = GraphicsDevice.Viewport.Height / _state.TileSize + 1;
@ -1433,11 +1479,11 @@ namespace Sledgemapper
}
}
}
Effect outlineShader;
Effect outlineShader;
private Texture2D _transparentRedRectangle;
private Texture2D _whiteRectangle;
private Dictionary<string, Texture2D> _wallsContent;
private SpriteSheet _spriteSheet;
private void DrawDelete(Room tile)