improvin player pointers
This commit is contained in:
parent
bce97de302
commit
efc9e13737
3 changed files with 76 additions and 189 deletions
|
@ -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)
|
||||
{
|
||||
await Connection.InvokeAsync("Ping",SessionData.SessionName, hoveredTile);
|
||||
await Connection.InvokeAsync("Ping",SessionData.SessionName, location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace Sledgemapper
|
|||
GridColor = Color.Black;
|
||||
NoteColor = Color.DarkRed;
|
||||
OverlayTintColor = new Color(24, 118, 157);
|
||||
TileDeleteDivider=14;
|
||||
TileDeleteDivider = 14;
|
||||
try
|
||||
{
|
||||
MachineName = Environment.MachineName;
|
||||
|
|
|
@ -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 };
|
||||
newNoteButton.Click += OnContextMenuNewNoteClick;
|
||||
popup.AddChild(newNoteButton);
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -470,6 +472,12 @@ namespace Sledgemapper
|
|||
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);
|
||||
}
|
||||
|
||||
|
@ -629,12 +637,6 @@ namespace Sledgemapper
|
|||
if (oldState.IsKeyDown(Keys.LeftShift) && newState.IsKeyUp(Keys.LeftShift))
|
||||
{
|
||||
_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())
|
||||
|
@ -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 dx = center.X - x * _state.TileSize - _viewportCenter.X;
|
||||
var dy = center.Y - y * _state.TileSize - _viewportCenter.Y;
|
||||
|
||||
_viewportCenter.X += dx;
|
||||
_viewportCenter.Y += dy;
|
||||
}
|
||||
|
||||
private void OnContextMenuPingClick(object sender, EventArgs e, Tile location)
|
||||
{
|
||||
_desktop.HideContextMenu();
|
||||
_communicationManager.Ping(location).SafeFireAndForget();
|
||||
}
|
||||
|
||||
protected override void Draw(GameTime gameTime)
|
||||
{
|
||||
if (_spriteBatch is null)
|
||||
|
@ -812,7 +821,7 @@ Player=new Player{Color=Color.Purple.ToHexString()}
|
|||
continue;
|
||||
}
|
||||
|
||||
if ((gameTime.TotalGameTime.TotalMilliseconds - ping.StartTime) > 20000 )
|
||||
if ((gameTime.TotalGameTime.TotalMilliseconds - ping.StartTime) > 3000)
|
||||
{
|
||||
_sessionData.Pings.TryRemove(guid, out var _);
|
||||
}
|
||||
|
@ -1089,88 +1098,16 @@ Player=new Player{Color=Color.Purple.ToHexString()}
|
|||
var isoffscreen = IsOffscreen(_state.SelectedTile);
|
||||
if (isoffscreen)
|
||||
{
|
||||
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(_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 validPointer = GetPointerVector(new Point(_state.SelectedTile.X, _state.SelectedTile.Y), out var points);
|
||||
if (validPointer)
|
||||
{
|
||||
var ua = uas.Where(u => u > 0 && u < 1).Min();
|
||||
|
||||
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);
|
||||
|
||||
_spriteBatch.DrawPolygon(Vector2.Zero, points, 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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1543,124 +1480,67 @@ Player=new Player{Color=Color.Purple.ToHexString()}
|
|||
var baseRadius = _state.TileSize / 4f;
|
||||
var baseOuterRadius = (float)_state.TileSize;
|
||||
var iterations = 3f;
|
||||
var validPointer = GetPointerVector(new Point(ping.X, ping.Y), out var points);
|
||||
|
||||
|
||||
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))
|
||||
if (validPointer)
|
||||
{
|
||||
var ua = uas.Where(u => u > 0 && u < 1).Min();
|
||||
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);
|
||||
_spriteBatch.DrawPolygon(Vector2.Zero, points, ping.Player.Color.ToColor(), 4);
|
||||
|
||||
|
||||
for (var j = 0; j < iterations; j++)
|
||||
{
|
||||
var cycleTime = (((float)gameTime.TotalGameTime.TotalMilliseconds + (float)j * durationMs / iterations) % durationMs) / durationMs;
|
||||
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++)
|
||||
{
|
||||
|
||||
var svx = ((vertexes[i1].X - tCenter.X) * (1 + (2 * easing))) + tCenter.X;
|
||||
var svy = ((vertexes[i1].Y - tCenter.Y) * (1 + (2 * easing))) + tCenter.Y;
|
||||
var svx = ((points[i1].X - tCenter.X) * (1 + (2 * easing))) + tCenter.X;
|
||||
var svy = ((points[i1].Y - tCenter.Y) * (1 + (2 * easing))) + tCenter.Y;
|
||||
v2[i1] = new Vector2(svx, svy);
|
||||
}
|
||||
|
||||
_spriteBatch.DrawPolygon(
|
||||
offset: Vector2.Zero,
|
||||
points: v2,
|
||||
color:new Color(ping.Player.Color.ToColor(), 1f-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));
|
||||
|
||||
color: new Color(ping.Player.Color.ToColor(), 1f - easing),
|
||||
thickness: 2 + 2 * (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 cy = center.Y / _state.TileSize;
|
||||
var p1 = new Vector2(center.X, center.Y);
|
||||
var p2 = new Vector2(target.X * _state.TileSize, target.Y * _state.TileSize);
|
||||
|
||||
var p1 = new Vector2(cx * _state.TileSize, cy * _state.TileSize);
|
||||
var p2 = new Vector2(player.Position.X * _state.TileSize, player.Position.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 p3 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, topBound - _viewportCenter.Y);
|
||||
var p4 = new Vector2(Window.ClientBounds.Width - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y-bottomBound);
|
||||
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);
|
||||
p3 = new Vector2(leftBound - _viewportCenter.X, topBound - _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));
|
||||
|
||||
p3 = new Vector2(200 - _viewportCenter.X, 0 - _viewportCenter.Y);
|
||||
p4 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
|
||||
p3 = new Vector2(leftBound - _viewportCenter.X, topBound - _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));
|
||||
|
||||
p3 = new Vector2(200 - _viewportCenter.X, Window.ClientBounds.Height - _viewportCenter.Y);
|
||||
p4 = new Vector2(Window.ClientBounds.Width - _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-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 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 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) };
|
||||
points = 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) };
|
||||
points = 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) };
|
||||
points = 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) };
|
||||
points = 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, 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)
|
||||
{
|
||||
var visibleTilesX = GraphicsDevice.Viewport.Width / _state.TileSize + 1;
|
||||
var visibleTilesY = GraphicsDevice.Viewport.Height / _state.TileSize + 1;
|
||||
var boxTL = new Point(200 - _state.TileSize / 2, 75 - _state.TileSize / 2);
|
||||
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 screenPositionBottomRight = new Point(visibleTilesX * _state.TileSize - (int)_viewportCenter.X, visibleTilesY * _state.TileSize - 20 - (int)_viewportCenter.Y);
|
||||
var tileTopLeft = new Point(screenPositionTopLeft.X / _state.TileSize, screenPositionTopLeft.Y / _state.TileSize);
|
||||
var tileBottomRight = new Point(screenPositionBottomRight.X / _state.TileSize, screenPositionBottomRight.Y / _state.TileSize);
|
||||
var tileTL = new Point(position.X * _state.TileSize + (int)_viewportCenter.X, position.Y * _state.TileSize + (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);
|
||||
|
||||
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 false;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void OnContextMenuDeleteNoteClick(object sender, EventArgs e)
|
||||
{
|
||||
_desktop.HideContextMenu();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue