Usability improvements
This commit is contained in:
parent
0b7b3116b4
commit
5551918d54
3 changed files with 114 additions and 23 deletions
|
@ -28,10 +28,12 @@ namespace Sledgemapper
|
||||||
private KeyboardState oldState;
|
private KeyboardState oldState;
|
||||||
private MouseState oldMouseState;
|
private MouseState oldMouseState;
|
||||||
private Vector3 _viewportCenter = new(0, 0, 0);
|
private Vector3 _viewportCenter = new(0, 0, 0);
|
||||||
|
private bool _isDraggin;
|
||||||
private Dictionary<string, SpriteFont> _fonts;
|
private Dictionary<string, SpriteFont> _fonts;
|
||||||
private readonly Session _sessionData;
|
private readonly Session _sessionData;
|
||||||
private AuthenticateResponse _authResponse;
|
private AuthenticateResponse _authResponse;
|
||||||
private MainWidget _mainWidget;
|
private MainWidget _mainWidget;
|
||||||
|
private bool _showCellNumbers;
|
||||||
|
|
||||||
public Sledgemapper()
|
public Sledgemapper()
|
||||||
{
|
{
|
||||||
|
@ -107,6 +109,8 @@ namespace Sledgemapper
|
||||||
_mainWidget.MenuConnectNew.Selected += OnMenuConnectNewSelected;
|
_mainWidget.MenuConnectNew.Selected += OnMenuConnectNewSelected;
|
||||||
_mainWidget.MenuConnectJoin.Selected += OnMenuConnectJoinSelected;
|
_mainWidget.MenuConnectJoin.Selected += OnMenuConnectJoinSelected;
|
||||||
_mainWidget.MenuConnectUpload.Selected += OnMenuConnectUploadSelected;
|
_mainWidget.MenuConnectUpload.Selected += OnMenuConnectUploadSelected;
|
||||||
|
_mainWidget.MenuViewCenterOnSelection.Selected += OnMenuViewCenterOnSelectionSelected;
|
||||||
|
_mainWidget.MenuViewShowCellNUmbers.Selected += OnMenuViewShowCellNUmbersSelected;
|
||||||
_mainWidget.MenuConnectNew.Enabled = false;
|
_mainWidget.MenuConnectNew.Enabled = false;
|
||||||
_mainWidget.MenuConnectJoin.Enabled = false;
|
_mainWidget.MenuConnectJoin.Enabled = false;
|
||||||
_mainWidget.MenuConnectSync.Enabled = false;
|
_mainWidget.MenuConnectSync.Enabled = false;
|
||||||
|
@ -121,12 +125,23 @@ namespace Sledgemapper
|
||||||
_desktop.Root = _mainWidget;
|
_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)
|
protected override void Update(GameTime gameTime)
|
||||||
{
|
{
|
||||||
KeyboardState newState = Keyboard.GetState();
|
KeyboardState newState = Keyboard.GetState();
|
||||||
|
|
||||||
if (IsActive && GraphicsDevice.Viewport.Bounds.Contains(Mouse.GetState().Position) && !_desktop.IsMouseOverGUI && !_desktop.HasModalWidget)
|
if (IsActive && GraphicsDevice.Viewport.Bounds.Contains(Mouse.GetState().Position) && !_desktop.IsMouseOverGUI && !_desktop.HasModalWidget)
|
||||||
{
|
{
|
||||||
|
|
||||||
var mouseState = Mouse.GetState();
|
var mouseState = Mouse.GetState();
|
||||||
|
|
||||||
var screenPosition = new Point(mouseState.Position.X - (int)_viewportCenter.X, mouseState.Position.Y - (int)_viewportCenter.Y);
|
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);
|
_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;
|
if (_isDraggin)
|
||||||
_state._selectedTile.Y = _state._hoveredTile.Y;
|
{
|
||||||
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state._selectedTile);
|
_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)
|
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)
|
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)
|
if (mouseState.ScrollWheelValue > oldMouseState.ScrollWheelValue)
|
||||||
{
|
{
|
||||||
_state._tileSize = Math.Min(120, _state._tileSize + 10);
|
_state._tileSize = Math.Min(120, _state._tileSize + 10);
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (mouseState.ScrollWheelValue < oldMouseState.ScrollWheelValue)
|
else if (mouseState.ScrollWheelValue < oldMouseState.ScrollWheelValue)
|
||||||
{
|
{
|
||||||
_state._tileSize = Math.Max(10, _state._tileSize - 10);
|
_state._tileSize = Math.Max(10, _state._tileSize - 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CenterOnTile(tx, ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
oldMouseState = mouseState;
|
oldMouseState = mouseState;
|
||||||
|
@ -263,8 +296,16 @@ namespace Sledgemapper
|
||||||
|
|
||||||
private void CenterOnSelectedTile()
|
private void CenterOnSelectedTile()
|
||||||
{
|
{
|
||||||
_viewportCenter.X=_state._selectedTile.X*_state._tileSize;
|
CenterOnTile(_state._selectedTile.X, _state._selectedTile.Y);
|
||||||
_viewportCenter.Y=_state._selectedTile.Y*_state._tileSize;
|
}
|
||||||
|
|
||||||
|
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)
|
protected override void Draw(GameTime gameTime)
|
||||||
|
@ -353,6 +394,37 @@ namespace Sledgemapper
|
||||||
posY2,
|
posY2,
|
||||||
Color.GhostWhite);
|
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()
|
private void DrawOverlays()
|
||||||
|
@ -568,10 +640,7 @@ namespace Sledgemapper
|
||||||
_mainWidget.lblConnectionStatus.Text = "Reconnecting";
|
_mainWidget.lblConnectionStatus.Text = "Reconnecting";
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void OnButtonLoginClick(object sender, EventArgs e)
|
private async void OnButtonLoginClick(object sender, EventArgs e)
|
||||||
|
|
|
@ -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;
|
||||||
using Myra.Graphics2D.TextureAtlases;
|
using Myra.Graphics2D.TextureAtlases;
|
||||||
using Myra.Graphics2D.UI;
|
using Myra.Graphics2D.UI;
|
||||||
|
@ -78,19 +78,35 @@ namespace Sledgemapper.UI
|
||||||
menuItem1.Items.Add(MenuConnectSync);
|
menuItem1.Items.Add(MenuConnectSync);
|
||||||
menuItem1.Items.Add(MenuConnectUpload);
|
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 = new MenuItem();
|
||||||
MenuHelpAbout.Text = "&About";
|
MenuHelpAbout.Text = "&About";
|
||||||
MenuHelpAbout.Id = "MenuHelpAbout";
|
MenuHelpAbout.Id = "MenuHelpAbout";
|
||||||
|
|
||||||
var menuItem2 = new MenuItem();
|
var menuItem3 = new MenuItem();
|
||||||
menuItem2.Text = "&Help";
|
menuItem3.Text = "&Help";
|
||||||
menuItem2.Items.Add(MenuHelpAbout);
|
menuItem3.Items.Add(MenuHelpAbout);
|
||||||
|
|
||||||
_mainMenu = new HorizontalMenu();
|
_mainMenu = new HorizontalMenu();
|
||||||
_mainMenu.Id = "_mainMenu";
|
_mainMenu.Id = "_mainMenu";
|
||||||
_mainMenu.Items.Add(MenuFile);
|
_mainMenu.Items.Add(MenuFile);
|
||||||
_mainMenu.Items.Add(menuItem1);
|
_mainMenu.Items.Add(menuItem1);
|
||||||
_mainMenu.Items.Add(menuItem2);
|
_mainMenu.Items.Add(menuItem2);
|
||||||
|
_mainMenu.Items.Add(menuItem3);
|
||||||
|
|
||||||
GridTiles = new Grid();
|
GridTiles = new Grid();
|
||||||
GridTiles.ColumnSpacing = 8;
|
GridTiles.ColumnSpacing = 8;
|
||||||
|
@ -243,6 +259,8 @@ namespace Sledgemapper.UI
|
||||||
public MenuItem MenuConnectJoin;
|
public MenuItem MenuConnectJoin;
|
||||||
public MenuItem MenuConnectSync;
|
public MenuItem MenuConnectSync;
|
||||||
public MenuItem MenuConnectUpload;
|
public MenuItem MenuConnectUpload;
|
||||||
|
public MenuItem MenuViewShowCellNUmbers;
|
||||||
|
public MenuItem MenuViewCenterOnSelection;
|
||||||
public MenuItem MenuHelpAbout;
|
public MenuItem MenuHelpAbout;
|
||||||
public HorizontalMenu _mainMenu;
|
public HorizontalMenu _mainMenu;
|
||||||
public Grid GridTiles;
|
public Grid GridTiles;
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
<MenuItem Text="S&ync" ShortcutText="Ctrl+Y" Id="MenuConnectSync" />
|
<MenuItem Text="S&ync" ShortcutText="Ctrl+Y" Id="MenuConnectSync" />
|
||||||
<MenuItem Text="&Upload" ShortcutText="Ctrl+U" Id="MenuConnectUpload" />
|
<MenuItem Text="&Upload" ShortcutText="Ctrl+U" Id="MenuConnectUpload" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem Text="&View">
|
||||||
|
<MenuItem Text="S&how cell numbers" ShortcutText="Ctrl+H" Id="MenuViewShowCellNUmbers" />
|
||||||
|
<MenuItem Text="C&enter on selection" ShortcutText="Ctrl+E" Id="MenuViewCenterOnSelection" />
|
||||||
|
</MenuItem>
|
||||||
<MenuItem Text="&Help">
|
<MenuItem Text="&Help">
|
||||||
<MenuItem Text="&About" Id="MenuHelpAbout" />
|
<MenuItem Text="&About" Id="MenuHelpAbout" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue