test small fixes

This commit is contained in:
Michele 2020-11-20 23:43:33 +00:00
parent 5551918d54
commit 3d45bc532c
12 changed files with 175 additions and 163 deletions

View file

@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteOverlayNotification notification, CancellationToken cancellationToken) public async Task Handle(DeleteOverlayNotification notification, CancellationToken cancellationToken)
{ {
await _hub.Clients.Groups(notification.SessionName).DeleteOverlay(notification.Overlay); await _hub.Clients.Groups(notification.Session.SessionName).DeleteOverlay(notification.Overlay);
} }
} }
} }

View file

@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteTileNotification notification, CancellationToken cancellationToken) public async Task Handle(DeleteTileNotification notification, CancellationToken cancellationToken)
{ {
await _hub.Clients.Groups(notification.SessionName).DeleteTile(notification.Tile); await _hub.Clients.Groups(notification.Session.SessionName).DeleteTile(notification.Tile);
} }
} }
} }

View file

@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteWallNotification notification, CancellationToken cancellationToken) public async Task Handle(DeleteWallNotification notification, CancellationToken cancellationToken)
{ {
await _hub.Clients.Groups(notification.SessionName).DeleteWall(notification.Wall); await _hub.Clients.Groups(notification.Session.SessionName).DeleteWall(notification.Wall);
} }
} }
} }

View file

@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(NewOverlayNotification notification, CancellationToken cancellationToken) public async Task Handle(NewOverlayNotification notification, CancellationToken cancellationToken)
{ {
await _hub.Clients.Groups(notification.SessionName).NewOverlay(notification.Overlay); await _hub.Clients.Groups(notification.Session.SessionName).NewOverlay(notification.Overlay);
} }
} }
} }

View file

@ -6,28 +6,15 @@ namespace Sledgemapper.Api.Notifications
public abstract class BaseNotification : INotification public abstract class BaseNotification : INotification
{ {
public double Timestamp { get; private set; } public double Timestamp { get; private set; }
public string SessionName { get; private set; }
public int UserId { get; private set; } public int UserId { get; private set; }
public int SessionId { get; set; } public int SessionId { get; set; }
public Models.Session Session { get; set; } public Models.Session Session { get; set; }
public BaseNotification(string sessionName, int userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
SessionName = sessionName;
UserId = userId;
}
public BaseNotification(Models.Session session, int userId) public BaseNotification(Models.Session session, int userId)
{ {
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds(); Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Session = session;; Session = session; ;
UserId = userId; UserId = userId;
} }
public BaseNotification(int sessionId, string sessionName, int userId) : this(sessionName, userId)
{
SessionId = sessionId;
}
} }
} }

View file

@ -2,8 +2,7 @@ namespace Sledgemapper.Api.Notifications
{ {
public class NewSessionNotification : BaseNotification public class NewSessionNotification : BaseNotification
{ {
public NewSessionNotification(string sessionName, int userId) : base(new Models.Session { SessionName = sessionName }, userId)
public NewSessionNotification(string sessionName, int userId) : base(sessionName, userId) { }
{}
} }
} }

Binary file not shown.

View file

@ -87,7 +87,10 @@ namespace Sledgemapper
Connection.On("RefreshPlayers", () => Connection.On("RefreshPlayers", () =>
{ {
Connection?.SendAsync("UpdatePosition", SessionData.SessionName, SessionData.SessionId, SessionData.Players.First(p=>p.UserId==int.Parse(_authenticateResponse.Id))); if (!string.IsNullOrWhiteSpace(SessionData.SessionName))
{
Connection?.SendAsync("UpdatePosition", SessionData.SessionName, SessionData.SessionId, SessionData.Players.First(p => p.UserId == int.Parse(_authenticateResponse.Id)));
}
}); });
Connection.On<Wall>("NewWall", (tile) => Connection.On<Wall>("NewWall", (tile) =>

View file

@ -146,24 +146,24 @@ namespace Sledgemapper
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);
_state._hoveredTile.X = screenPosition.X / _state._tileSize; _state.HoveredTile.X = screenPosition.X / _state.TileSize;
_state._hoveredTile.Y = screenPosition.Y / _state._tileSize; _state.HoveredTile.Y = screenPosition.Y / _state.TileSize;
if (screenPosition.X < 0) if (screenPosition.X < 0)
{ {
_state._hoveredTile.X--; _state.HoveredTile.X--;
} }
if (screenPosition.Y < 0) if (screenPosition.Y < 0)
{ {
_state._hoveredTile.Y--; _state.HoveredTile.Y--;
} }
if (_state._insertMode == InsertMode.Wall) if (_state.InsertMode == InsertMode.Wall)
{ {
_state.SelectClosestWall(screenPosition); _state.SelectClosestWall(screenPosition);
} }
if (_state._insertMode == InsertMode.Overlay) if (_state.InsertMode == InsertMode.Overlay)
{ {
_state.SelectOverlay(screenPosition); _state.SelectOverlay(screenPosition);
} }
@ -190,33 +190,33 @@ namespace Sledgemapper
} }
else else
{ {
_state._selectedTile.X = _state._hoveredTile.X; _state.SelectedTile.X = _state.HoveredTile.X;
_state._selectedTile.Y = _state._hoveredTile.Y; _state.SelectedTile.Y = _state.HoveredTile.Y;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state._selectedTile); _communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state.SelectedTile);
} }
} }
if (newState.IsKeyDown(Keys.LeftControl) if (newState.IsKeyDown(Keys.LeftControl)
&& mouseState.LeftButton == ButtonState.Pressed && mouseState.LeftButton == ButtonState.Pressed
&& ((mouseState.LeftButton != oldMouseState.LeftButton) || (_state._selectedTile.X != _state._hoveredTile.X && _state._selectedTile.Y != _state._hoveredTile.Y))) && ((mouseState.LeftButton != oldMouseState.LeftButton) || (_state.SelectedTile.X != _state.HoveredTile.X && _state.SelectedTile.Y != _state.HoveredTile.Y)))
{ {
switch (_state._insertMode) switch (_state.InsertMode)
{ {
case InsertMode.Tile: case InsertMode.Tile:
_state._selectedTile.X = _state._hoveredTile.X; _state.SelectedTile.X = _state.HoveredTile.X;
_state._selectedTile.Y = _state._hoveredTile.Y; _state.SelectedTile.Y = _state.HoveredTile.Y;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state._selectedTile); _communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _sessionData.SessionId, _state.SelectedTile);
_sessionData.NewTile(_state._selectedTile, _state._currentTileId); _sessionData.NewTile(_state.SelectedTile, _state.CurrentTileId);
break; break;
case InsertMode.Wall: case InsertMode.Wall:
_sessionData.NewWall(_state._selectedWall, _state._currentWallId); _sessionData.NewWall(_state.SelectedWall, _state.CurrentWallId);
break; break;
case InsertMode.Overlay: case InsertMode.Overlay:
_sessionData.NewOverlay(_state._selectedOverlay, _state._currentOverlayId); _sessionData.NewOverlay(_state.SelectedOverlay, _state.CurrentOverlayId);
break; break;
} }
} }
@ -224,19 +224,19 @@ namespace Sledgemapper
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(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 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 tx = (center.X - (int)_viewportCenter.X) / _state.TileSize;
var ty = (center.Y - (int)_viewportCenter.Y) / _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); CenterOnTile(tx, ty);
@ -248,18 +248,18 @@ namespace Sledgemapper
if (newState.IsKeyDown(Keys.Delete)) if (newState.IsKeyDown(Keys.Delete))
{ {
switch (_state._insertMode) switch (_state.InsertMode)
{ {
case InsertMode.Tile: case InsertMode.Tile:
_state._selectedTile.X = _state._hoveredTile.X; _state.SelectedTile.X = _state.HoveredTile.X;
_state._selectedTile.Y = _state._hoveredTile.Y; _state.SelectedTile.Y = _state.HoveredTile.Y;
_sessionData.DeleteTile(_state._selectedTile); _sessionData.DeleteTile(_state.SelectedTile);
break; break;
case InsertMode.Wall: case InsertMode.Wall:
_sessionData.DeleteWall(_state._selectedWall); _sessionData.DeleteWall(_state.SelectedWall);
break; break;
case InsertMode.Overlay: case InsertMode.Overlay:
_sessionData.DeleteOverlay(_state._selectedOverlay); _sessionData.DeleteOverlay(_state.SelectedOverlay);
break; break;
} }
} }
@ -270,22 +270,33 @@ namespace Sledgemapper
{ {
case Keys.Left: case Keys.Left:
if (oldState.IsKeyUp(Keys.Left) && newState.IsKeyDown(Keys.Left)) if (oldState.IsKeyUp(Keys.Left) && newState.IsKeyDown(Keys.Left))
{ _state._selectedTile.X--; } {
_state.SelectedTile.X--;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _state.SelectedTile);
}
break; break;
case Keys.Right: case Keys.Right:
if (oldState.IsKeyUp(Keys.Right) && newState.IsKeyDown(Keys.Right)) if (oldState.IsKeyUp(Keys.Right) && newState.IsKeyDown(Keys.Right))
{ _state._selectedTile.X++; } {
_state.SelectedTile.X++;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _state.SelectedTile);
}
break; break;
case Keys.Up: case Keys.Up:
if (oldState.IsKeyUp(Keys.Up) && newState.IsKeyDown(Keys.Up)) if (oldState.IsKeyUp(Keys.Up) && newState.IsKeyDown(Keys.Up))
{ _state._selectedTile.Y--; } {
_state.SelectedTile.Y--;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _state.SelectedTile);
}
break; break;
case Keys.Down: case Keys.Down:
if (oldState.IsKeyUp(Keys.Down) && newState.IsKeyDown(Keys.Down)) if (oldState.IsKeyUp(Keys.Down) && newState.IsKeyDown(Keys.Down))
{ _state._selectedTile.Y++; } {
_state.SelectedTile.Y++;
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _state.SelectedTile);
}
break; break;
} }
_communicationManager.Connection?.SendAsync("UpdatePosition", _sessionData.SessionName, _state._selectedTile);
} }
@ -296,14 +307,14 @@ namespace Sledgemapper
private void CenterOnSelectedTile() private void CenterOnSelectedTile()
{ {
CenterOnTile(_state._selectedTile.X, _state._selectedTile.Y); CenterOnTile(_state.SelectedTile.X, _state.SelectedTile.Y);
} }
private void CenterOnTile(int x, int 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 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 dx = center.X - x * _state.TileSize - _viewportCenter.X;
var dy = center.Y - y * _state._tileSize - _viewportCenter.Y; var dy = center.Y - y * _state.TileSize - _viewportCenter.Y;
_viewportCenter.X += dx; _viewportCenter.X += dx;
_viewportCenter.Y += dy; _viewportCenter.Y += dy;
} }
@ -316,8 +327,8 @@ namespace Sledgemapper
} }
GraphicsDevice.Clear(Color.LightGray); GraphicsDevice.Clear(Color.LightGray);
var visibleTilesX = GraphicsDevice.Viewport.Width / _state._tileSize + 1; var visibleTilesX = GraphicsDevice.Viewport.Width / _state.TileSize + 1;
var visibleTilesY = GraphicsDevice.Viewport.Height / _state._tileSize + 1; var visibleTilesY = GraphicsDevice.Viewport.Height / _state.TileSize + 1;
_spriteBatch.Begin(transformMatrix: Matrix.CreateTranslation(_viewportCenter)); _spriteBatch.Begin(transformMatrix: Matrix.CreateTranslation(_viewportCenter));
@ -328,21 +339,21 @@ namespace Sledgemapper
if (string.IsNullOrWhiteSpace(_sessionData.SessionName)) if (string.IsNullOrWhiteSpace(_sessionData.SessionName))
{ {
_spriteBatch.DrawRectangle(new Rectangle((_state._selectedTile.X * _state._tileSize) - 2, (_state._selectedTile.Y * _state._tileSize) - 2, _state._tileSize + 3, _state._tileSize + 3), Color.Red, 2); _spriteBatch.DrawRectangle(new Rectangle((_state.SelectedTile.X * _state.TileSize) - 2, (_state.SelectedTile.Y * _state.TileSize) - 2, _state.TileSize + 3, _state.TileSize + 3), Color.Red, 2);
} }
DrawPlayers(); DrawPlayers();
var startWall = new Vector2(_state._selectedWall.X * _state._tileSize, _state._selectedWall.Y * _state._tileSize); var startWall = new Vector2(_state.SelectedWall.X * _state.TileSize, _state.SelectedWall.Y * _state.TileSize);
if (_state._insertMode == InsertMode.Wall) if (_state.InsertMode == InsertMode.Wall)
{ {
_spriteBatch.DrawLine(startWall, _state._tileSize, MathHelper.ToRadians(90 * _state._selectedWall.Rotation), Color.Red, 2); _spriteBatch.DrawLine(startWall, _state.TileSize, MathHelper.ToRadians(90 * _state.SelectedWall.Rotation), Color.Red, 2);
} }
var overlay = new Vector2(_state._selectedOverlay.X * _state._tileSize, _state._selectedOverlay.Y * _state._tileSize); var overlay = new Vector2(_state.SelectedOverlay.X * _state.TileSize, _state.SelectedOverlay.Y * _state.TileSize);
if (_state._insertMode == InsertMode.Overlay && _state._selectedOverlay.Intersection) if (_state.InsertMode == InsertMode.Overlay && _state.SelectedOverlay.Intersection)
{ {
_spriteBatch.DrawCircle(overlay, _state._tileSize / 3f, 100, Color.Red, 2); _spriteBatch.DrawCircle(overlay, _state.TileSize / 3f, 100, Color.Red, 2);
} }
_spriteBatch.End(); _spriteBatch.End();
@ -362,14 +373,14 @@ namespace Sledgemapper
{ {
for (var i = -1; i < visibleTilesX + 2; i++) for (var i = -1; i < visibleTilesX + 2; i++)
{ {
var posX1 = i * _state._tileSize - _viewportCenter.X; var posX1 = i * _state.TileSize - _viewportCenter.X;
var posY1 = -_viewportCenter.Y; var posY1 = -_viewportCenter.Y;
posX1 -= posX1 % _state._tileSize; posX1 -= posX1 % _state.TileSize;
posY1 -= posY1 % _state._tileSize; posY1 -= posY1 % _state.TileSize;
var posX2 = i * _state._tileSize - _viewportCenter.X; var posX2 = i * _state.TileSize - _viewportCenter.X;
var posY2 = GraphicsDevice.Viewport.Height - _viewportCenter.Y; var posY2 = GraphicsDevice.Viewport.Height - _viewportCenter.Y;
posX2 -= posX2 % _state._tileSize; posX2 -= posX2 % _state.TileSize;
posY2 -= posY2 % _state._tileSize; posY2 -= posY2 % _state.TileSize;
_spriteBatch.DrawLine( _spriteBatch.DrawLine(
posX1, posY1, posX1, posY1,
@ -381,13 +392,13 @@ namespace Sledgemapper
for (var i = -1; i < visibleTilesY + 2; i++) for (var i = -1; i < visibleTilesY + 2; i++)
{ {
var posX1 = -_viewportCenter.X; var posX1 = -_viewportCenter.X;
var posY1 = i * _state._tileSize - _viewportCenter.Y; var posY1 = i * _state.TileSize - _viewportCenter.Y;
posX1 -= posX1 % _state._tileSize; posX1 -= posX1 % _state.TileSize;
posY1 -= posY1 % _state._tileSize; posY1 -= posY1 % _state.TileSize;
var posX2 = GraphicsDevice.Viewport.Width - _viewportCenter.X; var posX2 = GraphicsDevice.Viewport.Width - _viewportCenter.X;
var posY2 = i * _state._tileSize - _viewportCenter.Y; var posY2 = i * _state.TileSize - _viewportCenter.Y;
posX2 -= posX2 % _state._tileSize; posX2 -= posX2 % _state.TileSize;
posY2 -= posY2 % _state._tileSize; posY2 -= posY2 % _state.TileSize;
_spriteBatch.DrawLine(posX1, posY1, _spriteBatch.DrawLine(posX1, posY1,
posX2, posX2,
@ -396,25 +407,25 @@ namespace Sledgemapper
} }
if (_showCellNumbers && _state._tileSize >= 30) if (_showCellNumbers && _state.TileSize >= 30)
{ {
var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state._tileSize / 8).Value ?? _fonts.Last().Value; var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state.TileSize / 8).Value ?? _fonts.Last().Value;
var fscale = 1f; var fscale = 1f;
for (var i = -1; i < visibleTilesX + 2; i++) for (var i = -1; i < visibleTilesX + 2; i++)
{ {
for (var j = -1; j < visibleTilesY + 2; j++) 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 screenPosition = new Point(i * _state.TileSize - (int)_viewportCenter.X, j * _state.TileSize - (int)_viewportCenter.Y);
var x = screenPosition.X / _state._tileSize; var x = screenPosition.X / _state.TileSize;
var y = screenPosition.Y / _state._tileSize; var y = screenPosition.Y / _state.TileSize;
_spriteBatch.DrawString(ffont, _spriteBatch.DrawString(ffont,
$"{x}:{y}", $"{x}:{y}",
new Vector2( new Vector2(
x * _state._tileSize + 2, x * _state.TileSize + 2,
y * _state._tileSize + 2 y * _state.TileSize + 2
), ),
Color.Black, Color.Black,
0, 0,
@ -434,19 +445,19 @@ namespace Sledgemapper
var content = Content.Load<Texture2D>($"overlays/{tile.ID}"); var content = Content.Load<Texture2D>($"overlays/{tile.ID}");
if (tile.Intersection) if (tile.Intersection)
{ {
var posX = tile.X * _state._tileSize; var posX = tile.X * _state.TileSize;
var posY = tile.Y * _state._tileSize; var posY = tile.Y * _state.TileSize;
_spriteBatch.Draw(content, new Vector2(posX, posY), _spriteBatch.Draw(content, new Vector2(posX, posY),
null, new Color(24, 118, 157), MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state._tileSize - 10) / content.Width, SpriteEffects.None, 0); null, new Color(24, 118, 157), MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 10) / content.Width, SpriteEffects.None, 0);
} }
else else
{ {
var posX = tile.X * _state._tileSize + _state._tileSize / 2f; var posX = tile.X * _state.TileSize + _state.TileSize / 2f;
var posY = tile.Y * _state._tileSize + _state._tileSize / 2f; var posY = tile.Y * _state.TileSize + _state.TileSize / 2f;
_spriteBatch.Draw(content, new Vector2(posX, posY), _spriteBatch.Draw(content, new Vector2(posX, posY),
null, new Color(24, 118, 157), MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state._tileSize - 10) / content.Width, SpriteEffects.None, 0); null, new Color(24, 118, 157), MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 10) / content.Width, SpriteEffects.None, 0);
} }
} }
} }
@ -459,14 +470,14 @@ namespace Sledgemapper
var color = new Color(int.Parse(hexs[0], System.Globalization.NumberStyles.HexNumber), var color = new Color(int.Parse(hexs[0], System.Globalization.NumberStyles.HexNumber),
int.Parse(hexs[1], System.Globalization.NumberStyles.HexNumber), int.Parse(hexs[1], System.Globalization.NumberStyles.HexNumber),
int.Parse(hexs[2], System.Globalization.NumberStyles.HexNumber)); int.Parse(hexs[2], System.Globalization.NumberStyles.HexNumber));
_spriteBatch.DrawRectangle(new Rectangle(player.Position.X * _state._tileSize, player.Position.Y * _state._tileSize, _state._tileSize - 1, _state._tileSize - 1), color, 2); _spriteBatch.DrawRectangle(new Rectangle(player.Position.X * _state.TileSize, player.Position.Y * _state.TileSize, _state.TileSize - 1, _state.TileSize - 1), color, 2);
var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state._tileSize).Value ?? _fonts.Last().Value; var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state.TileSize).Value ?? _fonts.Last().Value;
var fscale = _state._tileSize / ((float)ffont.LineSpacing * 2); var fscale = _state.TileSize / ((float)ffont.LineSpacing * 2);
_spriteBatch.DrawString(ffont, _spriteBatch.DrawString(ffont,
player.Initials, player.Initials,
new Vector2(player.Position.X * _state._tileSize + 2, player.Position.Y * _state._tileSize + _state._tileSize - 2 - ffont.LineSpacing * fscale), new Vector2(player.Position.X * _state.TileSize + 2, player.Position.Y * _state.TileSize + _state.TileSize - 2 - ffont.LineSpacing * fscale),
color, color,
0, 0,
Vector2.Zero, Vector2.Zero,
@ -482,11 +493,11 @@ namespace Sledgemapper
{ {
var content = Content.Load<Texture2D>($"tiles/{tile.ID}"); var content = Content.Load<Texture2D>($"tiles/{tile.ID}");
var posX = tile.X * _state._tileSize + _state._tileSize / 2f; var posX = tile.X * _state.TileSize + _state.TileSize / 2f;
var posY = tile.Y * _state._tileSize + _state._tileSize / 2f; var posY = tile.Y * _state.TileSize + _state.TileSize / 2f;
_spriteBatch.Draw(content, new Vector2(posX, posY), _spriteBatch.Draw(content, new Vector2(posX, posY),
null, Color.White, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state._tileSize - 1) / content.Width, SpriteEffects.None, 0); null, Color.White, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 1) / content.Width, SpriteEffects.None, 0);
} }
} }
@ -495,10 +506,10 @@ namespace Sledgemapper
foreach (var wall in _sessionData.Walls.Values) foreach (var wall in _sessionData.Walls.Values)
{ {
var content = Content.Load<Texture2D>($"walls/{wall.ID}"); var content = Content.Load<Texture2D>($"walls/{wall.ID}");
var scale = _state._tileSize / (float)content.Height; var scale = _state.TileSize / (float)content.Height;
var offset = scale * content.Width / 2f; var offset = scale * content.Width / 2f;
var posX = wall.X * _state._tileSize; var posX = wall.X * _state.TileSize;
var posY = wall.Y * _state._tileSize; var posY = wall.Y * _state.TileSize;
if (wall.Rotation == 1) if (wall.Rotation == 1)
{ {
posX -= (int)offset; posX -= (int)offset;
@ -528,7 +539,9 @@ namespace Sledgemapper
if (_communicationManager.Connection.State != HubConnectionState.Connected) if (_communicationManager.Connection.State != HubConnectionState.Connected)
{ {
_mainWidget.lblConnectionStatus.Text = "Connecting";
await _communicationManager.Connection.StartAsync(); await _communicationManager.Connection.StartAsync();
UpdateConnectionState(_communicationManager.Connection);
} }
var successful = false; var successful = false;
@ -583,8 +596,6 @@ namespace Sledgemapper
_mainWidget.lblConnectionStatus.Text = "Connecting"; _mainWidget.lblConnectionStatus.Text = "Connecting";
await _communicationManager.Connection.StartAsync(); await _communicationManager.Connection.StartAsync();
UpdateConnectionState(_communicationManager.Connection); UpdateConnectionState(_communicationManager.Connection);
} }
var successful = false; var successful = false;
@ -803,29 +814,29 @@ namespace Sledgemapper
private void OnOverlayButtonClicked(object sender, EventArgs e) private void OnOverlayButtonClicked(object sender, EventArgs e)
{ {
_state._currentOverlayId = ((ImageButton)sender).Id; _state.CurrentOverlayId = ((ImageButton)sender).Id;
_mainWidget.ClearSelection(); _mainWidget.ClearSelection();
((ImageButton)sender).Border = new SolidBrush(Color.Red); ((ImageButton)sender).Border = new SolidBrush(Color.Red);
((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2); ((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Overlay; _state.InsertMode = InsertMode.Overlay;
} }
private void OnTileButtonClicked(object sender, EventArgs e) private void OnTileButtonClicked(object sender, EventArgs e)
{ {
_state._currentTileId = ((ImageButton)sender).Id; _state.CurrentTileId = ((ImageButton)sender).Id;
_mainWidget.ClearSelection(); _mainWidget.ClearSelection();
((ImageButton)sender).Border = new SolidBrush(Color.Red); ((ImageButton)sender).Border = new SolidBrush(Color.Red);
((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2); ((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Tile; _state.InsertMode = InsertMode.Tile;
} }
private void OnWallButtonClicked(object sender, EventArgs e) private void OnWallButtonClicked(object sender, EventArgs e)
{ {
_state._currentWallId = ((ImageButton)sender).Id; _state.CurrentWallId = ((ImageButton)sender).Id;
_mainWidget.ClearSelection(); _mainWidget.ClearSelection();
((ImageButton)sender).Border = new SolidBrush(Color.Red); ((ImageButton)sender).Border = new SolidBrush(Color.Red);
((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2); ((ImageButton)sender).BorderThickness = new Myra.Graphics2D.Thickness(2);
_state._insertMode = InsertMode.Wall; _state.InsertMode = InsertMode.Wall;
} }
private void OnMenuConnectJoinSelected(object sender, EventArgs e) private void OnMenuConnectJoinSelected(object sender, EventArgs e)

View file

@ -6,95 +6,107 @@ namespace Sledgemapper
{ {
public class State public class State
{ {
public Tile _selectedTile = new() { X = 1, Y = 1 }; public Tile SelectedTile { get; set; }
public Tile _hoveredTile = new() { X = 1, Y = 1 }; public Tile HoveredTile { get; set; }
public Wall _selectedWall = new() { X = 1, Y = 1 }; public Wall SelectedWall { get; set; }
public Overlay _selectedOverlay = new() { X = 1, Y = 1 }; public Overlay SelectedOverlay { get; set; }
public int _tileSize = 30; public int TileSize { get; set; }
public string _currentTileId = ""; public string CurrentTileId { get; set; }
public string _currentWallId = ""; public string CurrentWallId { get; set; }
public string _currentOverlayId = ""; public string CurrentOverlayId { get; set; }
public InsertMode _insertMode; public InsertMode InsertMode;
public State()
{
CurrentTileId = "";
CurrentWallId = "";
CurrentOverlayId = "";
SelectedTile = new() { X = 1, Y = 1 };
HoveredTile = new() { X = 1, Y = 1 };
SelectedWall = new() { X = 1, Y = 1 };
SelectedOverlay = new() { X = 1, Y = 1 };
TileSize = 30;
}
public void SelectClosestWall(Point mousePosition) public void SelectClosestWall(Point mousePosition)
{ {
var topLeft = new Point(_hoveredTile.X * _tileSize, _hoveredTile.Y * _tileSize); var topLeft = new Point(HoveredTile.X * TileSize, HoveredTile.Y * TileSize);
var bottomLeft = new Point(_hoveredTile.X * _tileSize, _hoveredTile.Y * _tileSize + _tileSize); var bottomLeft = new Point(HoveredTile.X * TileSize, HoveredTile.Y * TileSize + TileSize);
var topRight = new Point(_hoveredTile.X * _tileSize + _tileSize, _hoveredTile.Y * _tileSize); var topRight = new Point(HoveredTile.X * TileSize + TileSize, HoveredTile.Y * TileSize);
var bottomRight = new Point(_hoveredTile.X * _tileSize + _tileSize, _hoveredTile.Y * _tileSize + _tileSize); var bottomRight = new Point(HoveredTile.X * TileSize + TileSize, HoveredTile.Y * TileSize + TileSize);
var center = new Point(_hoveredTile.X * _tileSize + _tileSize / 2, _hoveredTile.Y * _tileSize + _tileSize / 2); var center = new Point(HoveredTile.X * TileSize + TileSize / 2, HoveredTile.Y * TileSize + TileSize / 2);
if (Utils.PointInTri(mousePosition, topLeft, center, bottomLeft)) //left wall if (Utils.PointInTri(mousePosition, topLeft, center, bottomLeft)) //left wall
{ {
_selectedWall.X = _hoveredTile.X; SelectedWall.X = HoveredTile.X;
_selectedWall.Y = _hoveredTile.Y; SelectedWall.Y = HoveredTile.Y;
_selectedWall.Rotation = 1; SelectedWall.Rotation = 1;
} }
else if (Utils.PointInTri(mousePosition, topRight, bottomRight, center)) //right wall else if (Utils.PointInTri(mousePosition, topRight, bottomRight, center)) //right wall
{ {
_selectedWall.X = _hoveredTile.X + 1; SelectedWall.X = HoveredTile.X + 1;
_selectedWall.Y = _hoveredTile.Y; SelectedWall.Y = HoveredTile.Y;
_selectedWall.Rotation = 1; SelectedWall.Rotation = 1;
} }
else if (Utils.PointInTri(mousePosition, topLeft, topRight, center)) //top wall else if (Utils.PointInTri(mousePosition, topLeft, topRight, center)) //top wall
{ {
_selectedWall.X = _hoveredTile.X; SelectedWall.X = HoveredTile.X;
_selectedWall.Y = _hoveredTile.Y; SelectedWall.Y = HoveredTile.Y;
_selectedWall.Rotation = 0; SelectedWall.Rotation = 0;
} }
else if (Utils.PointInTri(mousePosition, bottomLeft, center, bottomRight)) //bottom wall else if (Utils.PointInTri(mousePosition, bottomLeft, center, bottomRight)) //bottom wall
{ {
_selectedWall.X = _hoveredTile.X; SelectedWall.X = HoveredTile.X;
_selectedWall.Y = _hoveredTile.Y + 1; SelectedWall.Y = HoveredTile.Y + 1;
_selectedWall.Rotation = 0; SelectedWall.Rotation = 0;
} }
} }
public void SelectOverlay(Point mousePosition) public void SelectOverlay(Point mousePosition)
{ {
_selectedOverlay.X = _hoveredTile.X; SelectedOverlay.X = HoveredTile.X;
_selectedOverlay.Y = _hoveredTile.Y; SelectedOverlay.Y = HoveredTile.Y;
var q1 = Math.Pow(mousePosition.X - _hoveredTile.X * _tileSize, 2); var q1 = Math.Pow(mousePosition.X - HoveredTile.X * TileSize, 2);
var q2 = Math.Pow(_hoveredTile.Y * _tileSize - mousePosition.Y, 2); var q2 = Math.Pow(HoveredTile.Y * TileSize - mousePosition.Y, 2);
var s = Math.Sqrt(q1 + q2); var s = Math.Sqrt(q1 + q2);
if (s < _tileSize / 3) if (s < TileSize / 3)
{ {
_selectedOverlay.Intersection = true; SelectedOverlay.Intersection = true;
return; return;
} }
q1 = Math.Pow(mousePosition.X - (_hoveredTile.X + 1) * _tileSize, 2); q1 = Math.Pow(mousePosition.X - (HoveredTile.X + 1) * TileSize, 2);
s = Math.Sqrt(q1 + q2); s = Math.Sqrt(q1 + q2);
if (s < _tileSize / 3) if (s < TileSize / 3)
{ {
_selectedOverlay.X = _selectedOverlay.X + 1; SelectedOverlay.X = SelectedOverlay.X + 1;
_selectedOverlay.Intersection = true; SelectedOverlay.Intersection = true;
return; return;
} }
//q1 = System.Math.Pow(mousePosition.X - (_hoveredTile.X + 1) * _tileSize, 2); //q1 = System.Math.Pow(mousePosition.X - (_hoveredTile.X + 1) * _tileSize, 2);
q2 = Math.Pow((_hoveredTile.Y + 1) * _tileSize - mousePosition.Y, 2); q2 = Math.Pow((HoveredTile.Y + 1) * TileSize - mousePosition.Y, 2);
s = Math.Sqrt(q1 + q2); s = Math.Sqrt(q1 + q2);
if (s < _tileSize / 3) if (s < TileSize / 3)
{ {
_selectedOverlay.X = _selectedOverlay.X + 1; SelectedOverlay.X = SelectedOverlay.X + 1;
_selectedOverlay.Y = _selectedOverlay.Y + 1; SelectedOverlay.Y = SelectedOverlay.Y + 1;
_selectedOverlay.Intersection = true; SelectedOverlay.Intersection = true;
return; return;
} }
q1 = Math.Pow(mousePosition.X - _hoveredTile.X * _tileSize, 2); q1 = Math.Pow(mousePosition.X - HoveredTile.X * TileSize, 2);
q2 = Math.Pow((_hoveredTile.Y + 1) * _tileSize - mousePosition.Y, 2); q2 = Math.Pow((HoveredTile.Y + 1) * TileSize - mousePosition.Y, 2);
s = Math.Sqrt(q1 + q2); s = Math.Sqrt(q1 + q2);
if (s < _tileSize / 3) if (s < TileSize / 3)
{ {
_selectedOverlay.X = _selectedOverlay.X; SelectedOverlay.X = SelectedOverlay.X;
_selectedOverlay.Y = _selectedOverlay.Y + 1; SelectedOverlay.Y = SelectedOverlay.Y + 1;
_selectedOverlay.Intersection = true; SelectedOverlay.Intersection = true;
return; return;
} }
_selectedOverlay.Intersection = false; SelectedOverlay.Intersection = false;
} }
} }
} }

View file

@ -23,6 +23,6 @@
</Grid> </Grid>
<TextButton Text="Login" Width="70" Height="20" Padding="5" HorizontalAlignment="Center" Id="BtnLogin" /> <TextButton Text="Login" Width="70" Height="20" Padding="5" HorizontalAlignment="Center" Id="BtnLogin" />
<TextButton Text="Register" Visible="False" Width="70" Height="20" Padding="5" HorizontalAlignment="Center" Id="BtnRegister" /> <TextButton Text="Register" Visible="False" Width="70" Height="20" Padding="5" HorizontalAlignment="Center" Id="BtnRegister" />
<Label Text="Email" TextColor="#FE3930FF" HorizontalAlignment="Center" Visible="False" Id="LblLoginError" /> <Label Text="" TextColor="#FE3930FF" HorizontalAlignment="Center" Visible="False" Id="LblLoginError" />
</VerticalStackPanel> </VerticalStackPanel>
</Project> </Project>

View file

@ -12,6 +12,6 @@
<TextBox GridColumn="1" Id="TxtSession" /> <TextBox GridColumn="1" Id="TxtSession" />
</Grid> </Grid>
<TextButton Text="Join" Padding="10, 5" HorizontalAlignment="Center" Id="BtnLogin" /> <TextButton Text="New" Padding="10, 5" HorizontalAlignment="Center" Id="BtnLogin" />
</VerticalStackPanel> </VerticalStackPanel>
</Project> </Project>