improvin player pointers

This commit is contained in:
Michele 2021-02-10 23:27:20 +00:00
parent bce97de302
commit efc9e13737
3 changed files with 76 additions and 189 deletions

View file

@ -239,11 +239,11 @@ namespace Sledgemapper
} }
internal async Task Ping(Tile hoveredTile) internal async Task Ping(Tile location)
{ {
if (Connection!=null && Connection.State == HubConnectionState.Connected) if (Connection!=null && Connection.State == HubConnectionState.Connected)
{ {
await Connection.InvokeAsync("Ping",SessionData.SessionName, hoveredTile); await Connection.InvokeAsync("Ping",SessionData.SessionName, location);
} }
} }
} }

View file

@ -19,7 +19,7 @@ namespace Sledgemapper
GridColor = Color.Black; GridColor = Color.Black;
NoteColor = Color.DarkRed; NoteColor = Color.DarkRed;
OverlayTintColor = new Color(24, 118, 157); OverlayTintColor = new Color(24, 118, 157);
TileDeleteDivider=14; TileDeleteDivider = 14;
try try
{ {
MachineName = Environment.MachineName; MachineName = Environment.MachineName;

View file

@ -456,6 +456,8 @@ namespace Sledgemapper
var newNoteButton = new TextButton { Text = "New Note", Width = 80, Height = 20, Padding = new Myra.Graphics2D.Thickness(2), HorizontalAlignment = HorizontalAlignment.Left }; var newNoteButton = new TextButton { Text = "New Note", Width = 80, Height = 20, Padding = new Myra.Graphics2D.Thickness(2), HorizontalAlignment = HorizontalAlignment.Left };
newNoteButton.Click += OnContextMenuNewNoteClick; newNoteButton.Click += OnContextMenuNewNoteClick;
popup.AddChild(newNoteButton); popup.AddChild(newNoteButton);
} }
else else
{ {
@ -470,6 +472,12 @@ namespace Sledgemapper
popup.AddChild(deleteNoteButton); popup.AddChild(deleteNoteButton);
} }
var pingButton = new TextButton { Text = "Ping", Width = 80, Height = 20, Padding = new Myra.Graphics2D.Thickness(2), HorizontalAlignment = HorizontalAlignment.Left };
//pingButton.Click += OnContextMenuPingClick;
var location = new Tile { X = _state.HoveredTile.X, Y = _state.HoveredTile.Y };
pingButton.Click += (s, e) => OnContextMenuPingClick(s, e, location);
popup.AddChild(pingButton);
_desktop.ShowContextMenu(popup, mouseState.Position); _desktop.ShowContextMenu(popup, mouseState.Position);
} }
@ -629,12 +637,6 @@ namespace Sledgemapper
if (oldState.IsKeyDown(Keys.LeftShift) && newState.IsKeyUp(Keys.LeftShift)) if (oldState.IsKeyDown(Keys.LeftShift) && newState.IsKeyUp(Keys.LeftShift))
{ {
_communicationManager.Ping(_state.HoveredTile).SafeFireAndForget(); _communicationManager.Ping(_state.HoveredTile).SafeFireAndForget();
_sessionData.Pings.TryAdd(Guid.NewGuid(),new Ping{
X=_state.HoveredTile.X,
Y=_state.HoveredTile.Y,
Player=new Player{Color=Color.Purple.ToHexString()}
});
} }
foreach (var key in newState.GetPressedKeys()) foreach (var key in newState.GetPressedKeys())
@ -688,10 +690,17 @@ Player=new Player{Color=Color.Purple.ToHexString()}
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;
} }
private void OnContextMenuPingClick(object sender, EventArgs e, Tile location)
{
_desktop.HideContextMenu();
_communicationManager.Ping(location).SafeFireAndForget();
}
protected override void Draw(GameTime gameTime) protected override void Draw(GameTime gameTime)
{ {
if (_spriteBatch is null) if (_spriteBatch is null)
@ -812,7 +821,7 @@ Player=new Player{Color=Color.Purple.ToHexString()}
continue; continue;
} }
if ((gameTime.TotalGameTime.TotalMilliseconds - ping.StartTime) > 20000 ) if ((gameTime.TotalGameTime.TotalMilliseconds - ping.StartTime) > 3000)
{ {
_sessionData.Pings.TryRemove(guid, out var _); _sessionData.Pings.TryRemove(guid, out var _);
} }
@ -1089,88 +1098,16 @@ Player=new Player{Color=Color.Purple.ToHexString()}
var isoffscreen = IsOffscreen(_state.SelectedTile); var isoffscreen = IsOffscreen(_state.SelectedTile);
if (isoffscreen) if (isoffscreen)
{ {
var center = new Point((Window.ClientBounds.Width + 200) / 2 - (int)_viewportCenter.X, Window.ClientBounds.Height / 2 - (int)_viewportCenter.Y); var validPointer = GetPointerVector(new Point(_state.SelectedTile.X, _state.SelectedTile.Y), out var points);
if (validPointer)
var cx = center.X / _state.TileSize;
var cy = center.Y / _state.TileSize;
var p1 = new Vector2(cx * _state.TileSize, cy * _state.TileSize);
var p2 = new Vector2(_state.SelectedTile.X * _state.TileSize, _state.SelectedTile.Y * _state.TileSize);
var p3 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, 0 - _viewportCenter.Y);
var p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua1 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y);
p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, 0 - _viewportCenter.Y);
var ua2 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y);
p4 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua3 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua4 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
var uas = new float[] { ua1, ua2, ua3, ua4 };
if (uas.Any(u => u > 0 && u < 1))
{ {
var ua = uas.Where(u => u > 0 && u < 1).Min(); _spriteBatch.DrawPolygon(Vector2.Zero, points, Color.Red, 2);
int i = 0;
for (var j = 0; j < 4; j++)
{
if (uas[j] == ua)
{
i = j;
}
}
var x = (p1.X + ua * (p2.X - p1.X));
var y = (p1.Y + ua * (p2.Y - p1.Y));
var v = _vector2Pool.Rent(4);
switch (i)
{
case 0:
v[0] = new Vector2(x, y);
v[1] = new Vector2(x - 20, y + 10);
v[2] = new Vector2(x - 20, y - 10);
v[3] = new Vector2(x, y);
break;
case 1:
v[0] = new Vector2(x, y);
v[1] = new Vector2(x - 10, y + 20);
v[2] = new Vector2(x + 10, y + 20);
v[3] = new Vector2(x, y);
y += 20;
break;
case 2:
x += 0;
v[0] = new Vector2(x, y);
v[1] = new Vector2(x + 20, y + 10);
v[2] = new Vector2(x + 20, y - 10);
v[3] = new Vector2(x, y);
break;
case 3:
y -= 20;
v[0] = new Vector2(x, y);
v[1] = new Vector2(x - 10, y - 20);
v[2] = new Vector2(x + 10, y - 20);
v[3] = new Vector2(x, y);
break;
}
_spriteBatch.DrawPolygon(Vector2.Zero, v, Color.Red, 2);
_vector2Pool.Return(v);
} }
} }
else
{
_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);
}
} }
} }
@ -1543,124 +1480,67 @@ Player=new Player{Color=Color.Purple.ToHexString()}
var baseRadius = _state.TileSize / 4f; var baseRadius = _state.TileSize / 4f;
var baseOuterRadius = (float)_state.TileSize; var baseOuterRadius = (float)_state.TileSize;
var iterations = 3f; var iterations = 3f;
var validPointer = GetPointerVector(new Point(ping.X, ping.Y), out var points);
if (validPointer)
var center = new Point((Window.ClientBounds.Width + 200) / 2 - (int)_viewportCenter.X, Window.ClientBounds.Height / 2 - (int)_viewportCenter.Y);
var cx = center.X / _state.TileSize;
var cy = center.Y / _state.TileSize;
var p1 = new Vector2(cx * _state.TileSize, cy * _state.TileSize);
var p2 = new Vector2(ping.X * _state.TileSize, ping.Y * _state.TileSize);
var p3 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, 0 - _viewportCenter.Y);
var p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua1 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y);
p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, 0 - _viewportCenter.Y);
var ua2 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y);
p4 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua3 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua4 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
var uas = new List<float> { ua1, ua2, ua3, ua4 };
if (uas.Any(u => u > 0 && u < 1))
{ {
var ua = uas.Where(u => u > 0 && u < 1).Min(); _spriteBatch.DrawPolygon(Vector2.Zero, points, ping.Player.Color.ToColor(), 4);
var i = uas.IndexOf(ua);
var x = (p1.X + ua * (p2.X - p1.X));
var y = (p1.Y + ua * (p2.Y - p1.Y));
Vector2[] vertexes = new Vector2[0];
switch (i)
{
case 0:
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x - 20, y + 10), new Vector2(x - 20, y - 10), new Vector2(x, y) };
break;
case 1:
y += 20;
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x - 10, y + 20), new Vector2(x + 10, y + 20), new Vector2(x, y) };
break;
case 2:
x += 0;
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x + 20, y + 10), new Vector2(x + 20, y - 10), new Vector2(x, y) };
break;
case 3:
y -= 20;
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x - 10, y - 20), new Vector2(x + 10, y - 20), new Vector2(x, y) };
break;
}
_spriteBatch.DrawPolygon(Vector2.Zero, vertexes, ping.Player.Color.ToColor(), 4);
for (var j = 0; j < iterations; j++) for (var j = 0; j < iterations; j++)
{ {
var cycleTime = (((float)gameTime.TotalGameTime.TotalMilliseconds + (float)j * durationMs / iterations) % durationMs) / durationMs; var cycleTime = (((float)gameTime.TotalGameTime.TotalMilliseconds + (float)j * durationMs / iterations) % durationMs) / durationMs;
var easing = Easings.Interpolate(cycleTime, Easings.Functions.SineEaseInOut); var easing = Easings.Interpolate(cycleTime, Easings.Functions.SineEaseInOut);
var v2 = new Vector2[vertexes.Length]; var v2 = new Vector2[points.Length];
var tCenter = new Vector2((vertexes[0].X + vertexes[1].X + vertexes[2].X) / 3f, (vertexes[0].Y + vertexes[1].Y + vertexes[2].Y) / 3f);
// var v1s = ((v2[0].X-tCenter.X)*(2 * (1 - easing)))+tCenter.X var tCenter = new Vector2((points[0].X + points[1].X + points[2].X) / 3f, (points[0].Y + points[1].Y + points[2].Y) / 3f);
for (int i1 = 0; i1 < v2.Length; i1++) for (int i1 = 0; i1 < v2.Length; i1++)
{ {
var svx = ((vertexes[i1].X - tCenter.X) * (1 + (2 * easing))) + tCenter.X; var svx = ((points[i1].X - tCenter.X) * (1 + (2 * easing))) + tCenter.X;
var svy = ((vertexes[i1].Y - tCenter.Y) * (1 + (2 * easing))) + tCenter.Y; var svy = ((points[i1].Y - tCenter.Y) * (1 + (2 * easing))) + tCenter.Y;
v2[i1] = new Vector2(svx, svy); v2[i1] = new Vector2(svx, svy);
} }
_spriteBatch.DrawPolygon( _spriteBatch.DrawPolygon(
offset: Vector2.Zero, offset: Vector2.Zero,
points: v2, points: v2,
color:new Color(ping.Player.Color.ToColor(), 1f-easing), color: new Color(ping.Player.Color.ToColor(), 1f - easing),
thickness: 2+2*(1-easing)); thickness: 2 + 2 * (1 - easing));
// _spriteBatch.DrawCircle(
// center: new Vector2(x, y),
// radius: baseRadius + baseOuterRadius * easing,
// sides: 20,
// color: new Color(ping.Player.Color.ToColor(), (1 - easing)),
// thickness: 2 + 5 * (1 - easing));
} }
} }
} }
private void DrawPlayerPointer(Player player) private bool GetPointerVector(Point target, out Vector2[] points)
{ {
var center = new Point((Window.ClientBounds.Width + 200) / 2 - (int)_viewportCenter.X, Window.ClientBounds.Height / 2 - (int)_viewportCenter.Y); var leftBound = 200;
var topBound = 75;
var bottomBound = 25;
points = new Vector2[0];
var center = new Point((Window.ClientBounds.Width + leftBound) / 2 - (int)_viewportCenter.X, Window.ClientBounds.Height / 2 - (int)_viewportCenter.Y);
var cx = center.X / _state.TileSize; var p1 = new Vector2(center.X, center.Y);
var cy = center.Y / _state.TileSize; var p2 = new Vector2(target.X * _state.TileSize, target.Y * _state.TileSize);
var p1 = new Vector2(cx * _state.TileSize, cy * _state.TileSize); var p3 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, topBound - _viewportCenter.Y);
var p2 = new Vector2(player.Position.X * _state.TileSize, player.Position.Y * _state.TileSize); var p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y-bottomBound);
var p3 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, 0 - _viewportCenter.Y);
var p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
var ua1 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y)); var ua1 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y); p3 = new Vector2(leftBound - _viewportCenter.X, topBound - _viewportCenter.Y);
p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, 0 - _viewportCenter.Y); p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, topBound - _viewportCenter.Y);
var ua2 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y)); var ua2 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y); p3 = new Vector2(leftBound - _viewportCenter.X, topBound - _viewportCenter.Y);
p4 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y); p4 = new Vector2(leftBound - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y-bottomBound);
var ua3 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y)); var ua3 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
p3 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y); p3 = new Vector2(leftBound - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y-bottomBound);
p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y); p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y-bottomBound);
var ua4 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y)); var ua4 = ((p4.X - p3.X) * (p1.Y - p3.Y) - (p4.Y - p3.Y) * (p1.X - p3.X)) / ((p4.Y - p3.Y) * (p2.X - p1.X) - (p4.X - p3.X) * (p2.Y - p1.Y));
var uas = new List<float> { ua1, ua2, ua3, ua4 }; var uas = new List<float> { ua1, ua2, ua3, ua4 };
@ -1670,26 +1550,33 @@ Player=new Player{Color=Color.Purple.ToHexString()}
var i = uas.IndexOf(ua); var i = uas.IndexOf(ua);
var x = (p1.X + ua * (p2.X - p1.X)); var x = (p1.X + ua * (p2.X - p1.X));
var y = (p1.Y + ua * (p2.Y - p1.Y)); var y = (p1.Y + ua * (p2.Y - p1.Y));
Vector2[] vertexes = new Vector2[0];
switch (i) switch (i)
{ {
case 0: case 0:
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x - 20, y + 10), new Vector2(x - 20, y - 10), new Vector2(x, y) }; points = new Vector2[] { new Vector2(x, y), new Vector2(x - 20, y - 10), new Vector2(x - 20, y + 10),new Vector2(x, y) };
break; break;
case 1: case 1:
y += 20; points = new Vector2[] { new Vector2(x, y), new Vector2(x - 10, y + 20), new Vector2(x + 10, y + 20), new Vector2(x, y) };
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x - 10, y + 20), new Vector2(x + 10, y + 20), new Vector2(x, y) };
break; break;
case 2: case 2:
x += 0; points = new Vector2[] { new Vector2(x, y), new Vector2(x + 20, y + 10), new Vector2(x + 20, y - 10), new Vector2(x, y) };
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x + 20, y + 10), new Vector2(x + 20, y - 10), new Vector2(x, y) };
break; break;
case 3: case 3:
y -= 20; points = new Vector2[] { new Vector2(x, y), new Vector2(x + 10, y - 20),new Vector2(x - 10, y - 20), new Vector2(x, y) };
vertexes = new Vector2[] { new Vector2(x, y), new Vector2(x - 10, y - 20), new Vector2(x + 10, y - 20), new Vector2(x, y) };
break; break;
} }
_spriteBatch.DrawPolygon(Vector2.Zero, vertexes, player.Color.ToColor(), 2); return true;
}
return false;
}
private void DrawPlayerPointer(Player player)
{
var validPointer = GetPointerVector(new Point(player.Position.X, player.Position.Y), out var points);
if (validPointer)
{
_spriteBatch.DrawPolygon(Vector2.Zero, points, player.Color.ToColor(), 2);
} }
} }
@ -1697,20 +1584,18 @@ Player=new Player{Color=Color.Purple.ToHexString()}
private bool IsOffscreen(Tile position) private bool IsOffscreen(Tile position)
{ {
var visibleTilesX = GraphicsDevice.Viewport.Width / _state.TileSize + 1; var boxTL = new Point(200 - _state.TileSize / 2, 75 - _state.TileSize / 2);
var visibleTilesY = GraphicsDevice.Viewport.Height / _state.TileSize + 1; var boxBR = new Point(GraphicsDevice.Viewport.Width + _state.TileSize / 2, GraphicsDevice.Viewport.Height - 25 + _state.TileSize / 2);
var screenPositionTopLeft = new Point(200 - _state.TileSize + 0 * _state.TileSize - (int)_viewportCenter.X, 0 * _state.TileSize + _state.TileSize - (int)_viewportCenter.Y); var tileTL = new Point(position.X * _state.TileSize + (int)_viewportCenter.X, position.Y * _state.TileSize + (int)_viewportCenter.Y);
var screenPositionBottomRight = new Point(visibleTilesX * _state.TileSize - (int)_viewportCenter.X, visibleTilesY * _state.TileSize - 20 - (int)_viewportCenter.Y); var tileBR = new Point(position.X * _state.TileSize + (int)_viewportCenter.X + _state.TileSize, position.Y * _state.TileSize + (int)_viewportCenter.Y + _state.TileSize);
var tileTopLeft = new Point(screenPositionTopLeft.X / _state.TileSize, screenPositionTopLeft.Y / _state.TileSize);
var tileBottomRight = new Point(screenPositionBottomRight.X / _state.TileSize, screenPositionBottomRight.Y / _state.TileSize);
if (position.X < tileTopLeft.X || position.Y < tileTopLeft.Y || position.X > tileBottomRight.X || position.Y > tileBottomRight.Y) if (tileTL.X <= boxTL.X || tileTL.Y <= boxTL.Y || tileBR.X >= boxBR.X || tileBR.Y >= boxBR.Y)
{ {
return true; return true;
} }
return false;
return false;
} }
private int _borderWidth => (_state.TileSize / 6) % 2 == 0 ? (_state.TileSize / 6) : (_state.TileSize / 6) + 1; private int _borderWidth => (_state.TileSize / 6) % 2 == 0 ? (_state.TileSize / 6) : (_state.TileSize / 6) + 1;
@ -2304,6 +2189,8 @@ Player=new Player{Color=Color.Purple.ToHexString()}
noteWindow.NoteText.SetKeyboardFocus(); noteWindow.NoteText.SetKeyboardFocus();
} }
private void OnContextMenuDeleteNoteClick(object sender, EventArgs e) private void OnContextMenuDeleteNoteClick(object sender, EventArgs e)
{ {
_desktop.HideContextMenu(); _desktop.HideContextMenu();