Usability improvements

This commit is contained in:
Michele Scandura 2020-11-20 15:49:54 +00:00
parent 0b7b3116b4
commit 5551918d54
3 changed files with 114 additions and 23 deletions

View file

@ -28,10 +28,12 @@ namespace Sledgemapper
private KeyboardState oldState;
private MouseState oldMouseState;
private Vector3 _viewportCenter = new(0, 0, 0);
private bool _isDraggin;
private Dictionary<string, SpriteFont> _fonts;
private readonly Session _sessionData;
private AuthenticateResponse _authResponse;
private MainWidget _mainWidget;
private bool _showCellNumbers;
public Sledgemapper()
{
@ -107,6 +109,8 @@ namespace Sledgemapper
_mainWidget.MenuConnectNew.Selected += OnMenuConnectNewSelected;
_mainWidget.MenuConnectJoin.Selected += OnMenuConnectJoinSelected;
_mainWidget.MenuConnectUpload.Selected += OnMenuConnectUploadSelected;
_mainWidget.MenuViewCenterOnSelection.Selected += OnMenuViewCenterOnSelectionSelected;
_mainWidget.MenuViewShowCellNUmbers.Selected += OnMenuViewShowCellNUmbersSelected;
_mainWidget.MenuConnectNew.Enabled = false;
_mainWidget.MenuConnectJoin.Enabled = false;
_mainWidget.MenuConnectSync.Enabled = false;
@ -121,12 +125,23 @@ namespace Sledgemapper
_desktop.Root = _mainWidget;
}
private void OnMenuViewShowCellNUmbersSelected(object sender, EventArgs e)
{
_showCellNumbers = !_showCellNumbers;
}
private void OnMenuViewCenterOnSelectionSelected(object sender, EventArgs e)
{
CenterOnSelectedTile();
}
protected override void Update(GameTime gameTime)
{
KeyboardState newState = Keyboard.GetState();
if (IsActive && GraphicsDevice.Viewport.Bounds.Contains(Mouse.GetState().Position) && !_desktop.IsMouseOverGUI && !_desktop.HasModalWidget)
{
var mouseState = Mouse.GetState();
var screenPosition = new Point(mouseState.Position.X - (int)_viewportCenter.X, mouseState.Position.Y - (int)_viewportCenter.Y);
@ -153,16 +168,33 @@ namespace Sledgemapper
_state.SelectOverlay(screenPosition);
}
if (newState.IsKeyDown(Keys.LeftControl) && newState.IsKeyDown(Keys.C))
// if (newState.IsKeyDown(Keys.LeftControl) && newState.IsKeyDown(Keys.C) && !oldState.IsKeyDown(Keys.C))
// {
// CenterOnSelectedTile();
// }
if (!newState.IsKeyDown(Keys.LeftControl) && mouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton == oldMouseState.LeftButton)
{
CenterOnSelectedTile();
_viewportCenter = new Vector3(_viewportCenter.X + mouseState.Position.X - oldMouseState.Position.X, _viewportCenter.Y + mouseState.Position.Y - oldMouseState.Position.Y, 0);
if (mouseState.Position != oldMouseState.Position)
{
_isDraggin = true;
}
}
if (mouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton != oldMouseState.LeftButton)
if (mouseState.LeftButton == ButtonState.Released && mouseState.LeftButton != oldMouseState.LeftButton)
{
_state._selectedTile.X = _state._hoveredTile.X;
_state._selectedTile.Y = _state._hoveredTile.Y;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state._selectedTile);
if (_isDraggin)
{
_isDraggin = false;
}
else
{
_state._selectedTile.X = _state._hoveredTile.X;
_state._selectedTile.Y = _state._hoveredTile.Y;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state._selectedTile);
}
}
if (newState.IsKeyDown(Keys.LeftControl)
@ -189,24 +221,25 @@ namespace Sledgemapper
}
}
if (!newState.IsKeyDown(Keys.LeftControl) && mouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton == oldMouseState.LeftButton)
{
_viewportCenter = new Vector3(_viewportCenter.X + mouseState.Position.X - oldMouseState.Position.X, _viewportCenter.Y + mouseState.Position.Y - oldMouseState.Position.Y, 0);
Console.WriteLine($"{_state._selectedTile.X}:{_state._selectedTile.Y} / {_viewportCenter.X}:{_viewportCenter.Y}");
}
if (newState.IsKeyDown(Keys.LeftControl) && mouseState.ScrollWheelValue != oldMouseState.ScrollWheelValue)
{
// var center = new Point(GraphicsDevice.Viewport.Width / 2, GraphicsDevice.Viewport.Height / 2);
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;
var ty = (center.Y - (int)_viewportCenter.Y) / _state._tileSize;
if (mouseState.ScrollWheelValue > oldMouseState.ScrollWheelValue)
{
_state._tileSize = Math.Min(120, _state._tileSize + 10);
}
else if (mouseState.ScrollWheelValue < oldMouseState.ScrollWheelValue)
{
_state._tileSize = Math.Max(10, _state._tileSize - 10);
}
CenterOnTile(tx, ty);
}
oldMouseState = mouseState;
@ -263,8 +296,16 @@ namespace Sledgemapper
private void CenterOnSelectedTile()
{
_viewportCenter.X=_state._selectedTile.X*_state._tileSize;
_viewportCenter.Y=_state._selectedTile.Y*_state._tileSize;
CenterOnTile(_state._selectedTile.X, _state._selectedTile.Y);
}
private void CenterOnTile(int x, int y)
{
var center = new Point((Window.ClientBounds.Width + 200) / 2 - _state._tileSize / 2, Window.ClientBounds.Height / 2 - _state._tileSize / 2);
var dx = center.X - x * _state._tileSize - _viewportCenter.X;
var dy = center.Y - y * _state._tileSize - _viewportCenter.Y;
_viewportCenter.X += dx;
_viewportCenter.Y += dy;
}
protected override void Draw(GameTime gameTime)
@ -353,6 +394,37 @@ namespace Sledgemapper
posY2,
Color.GhostWhite);
}
if (_showCellNumbers && _state._tileSize >= 30)
{
var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state._tileSize / 8).Value ?? _fonts.Last().Value;
var fscale = 1f;
for (var i = -1; i < visibleTilesX + 2; i++)
{
for (var j = -1; j < visibleTilesY + 2; j++)
{
var screenPosition = new Point(i * _state._tileSize - (int)_viewportCenter.X, j * _state._tileSize - (int)_viewportCenter.Y);
var x = screenPosition.X / _state._tileSize;
var y = screenPosition.Y / _state._tileSize;
_spriteBatch.DrawString(ffont,
$"{x}:{y}",
new Vector2(
x * _state._tileSize + 2,
y * _state._tileSize + 2
),
Color.Black,
0,
Vector2.Zero,
fscale,
SpriteEffects.None,
0);
}
}
}
}
private void DrawOverlays()
@ -568,10 +640,7 @@ namespace Sledgemapper
_mainWidget.lblConnectionStatus.Text = "Reconnecting";
break;
}
}
private async void OnButtonLoginClick(object sender, EventArgs e)

View file

@ -1,4 +1,4 @@
/* Generated by MyraPad at 17/11/2020 22:10:31 */
/* Generated by MyraPad at 20/11/2020 14:47:42 */
using Myra.Graphics2D;
using Myra.Graphics2D.TextureAtlases;
using Myra.Graphics2D.UI;
@ -78,19 +78,35 @@ namespace Sledgemapper.UI
menuItem1.Items.Add(MenuConnectSync);
menuItem1.Items.Add(MenuConnectUpload);
MenuViewShowCellNUmbers = new MenuItem();
MenuViewShowCellNUmbers.Text = "S&how cell numbers";
MenuViewShowCellNUmbers.ShortcutText = "Ctrl+H";
MenuViewShowCellNUmbers.Id = "MenuViewShowCellNUmbers";
MenuViewCenterOnSelection = new MenuItem();
MenuViewCenterOnSelection.Text = "C&enter on selection";
MenuViewCenterOnSelection.ShortcutText = "Ctrl+E";
MenuViewCenterOnSelection.Id = "MenuViewCenterOnSelection";
var menuItem2 = new MenuItem();
menuItem2.Text = "&View";
menuItem2.Items.Add(MenuViewShowCellNUmbers);
menuItem2.Items.Add(MenuViewCenterOnSelection);
MenuHelpAbout = new MenuItem();
MenuHelpAbout.Text = "&About";
MenuHelpAbout.Id = "MenuHelpAbout";
var menuItem2 = new MenuItem();
menuItem2.Text = "&Help";
menuItem2.Items.Add(MenuHelpAbout);
var menuItem3 = new MenuItem();
menuItem3.Text = "&Help";
menuItem3.Items.Add(MenuHelpAbout);
_mainMenu = new HorizontalMenu();
_mainMenu.Id = "_mainMenu";
_mainMenu.Items.Add(MenuFile);
_mainMenu.Items.Add(menuItem1);
_mainMenu.Items.Add(menuItem2);
_mainMenu.Items.Add(menuItem3);
GridTiles = new Grid();
GridTiles.ColumnSpacing = 8;
@ -243,6 +259,8 @@ namespace Sledgemapper.UI
public MenuItem MenuConnectJoin;
public MenuItem MenuConnectSync;
public MenuItem MenuConnectUpload;
public MenuItem MenuViewShowCellNUmbers;
public MenuItem MenuViewCenterOnSelection;
public MenuItem MenuHelpAbout;
public HorizontalMenu _mainMenu;
public Grid GridTiles;

View file

@ -20,6 +20,10 @@
<MenuItem Text="S&amp;ync" ShortcutText="Ctrl+Y" Id="MenuConnectSync" />
<MenuItem Text="&amp;Upload" ShortcutText="Ctrl+U" Id="MenuConnectUpload" />
</MenuItem>
<MenuItem Text="&amp;View">
<MenuItem Text="S&amp;how cell numbers" ShortcutText="Ctrl+H" Id="MenuViewShowCellNUmbers" />
<MenuItem Text="C&amp;enter on selection" ShortcutText="Ctrl+E" Id="MenuViewCenterOnSelection" />
</MenuItem>
<MenuItem Text="&amp;Help">
<MenuItem Text="&amp;About" Id="MenuHelpAbout" />
</MenuItem>