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)