From 5551918d54e1b28aca545a7b0ecb01da4a01ba44 Mon Sep 17 00:00:00 2001 From: Michele Scandura Date: Fri, 20 Nov 2020 15:49:54 +0000 Subject: [PATCH] Usability improvements --- Sledgemapper/Sledgemapper.cs | 107 +++++++++++++++++++----- Sledgemapper/UI/MainWidget.Generated.cs | 26 +++++- Sledgemapper/UI/mainwidget.xml | 4 + 3 files changed, 114 insertions(+), 23 deletions(-) diff --git a/Sledgemapper/Sledgemapper.cs b/Sledgemapper/Sledgemapper.cs index d5360d1..c29089d 100644 --- a/Sledgemapper/Sledgemapper.cs +++ b/Sledgemapper/Sledgemapper.cs @@ -28,10 +28,12 @@ namespace Sledgemapper private KeyboardState oldState; private MouseState oldMouseState; private Vector3 _viewportCenter = new(0, 0, 0); + private bool _isDraggin; private Dictionary _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) diff --git a/Sledgemapper/UI/MainWidget.Generated.cs b/Sledgemapper/UI/MainWidget.Generated.cs index b3bfba6..11a51a5 100644 --- a/Sledgemapper/UI/MainWidget.Generated.cs +++ b/Sledgemapper/UI/MainWidget.Generated.cs @@ -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; diff --git a/Sledgemapper/UI/mainwidget.xml b/Sledgemapper/UI/mainwidget.xml index 2775366..27f268c 100644 --- a/Sledgemapper/UI/mainwidget.xml +++ b/Sledgemapper/UI/mainwidget.xml @@ -20,6 +20,10 @@ + + + +