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 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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
<MenuItem Text="S&ync" ShortcutText="Ctrl+Y" Id="MenuConnectSync" />
|
||||
<MenuItem Text="&Upload" ShortcutText="Ctrl+U" Id="MenuConnectUpload" />
|
||||
</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="&About" Id="MenuHelpAbout" />
|
||||
</MenuItem>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue