Skip to content

Commit 856c336

Browse files
committed
Network: Fix excessive number of packets
Before, it was constantly sending packets every frame the cursor was hovering over something, due to FRect equality not being implemented.
1 parent 210f9aa commit 856c336

2 files changed

Lines changed: 43 additions & 15 deletions

File tree

LynnaLab/src/Widget/TileGrid.cs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,6 @@ public void RenderTileGrid()
517517
/// </summary>
518518
public void RenderHoverAndSelection()
519519
{
520-
int lastHoveredTile = HoveredTile;
521520
TileEventArgs hoverChangedArgs = null;
522521

523522
// Determine hovered tile
@@ -552,9 +551,6 @@ public void RenderHoverAndSelection()
552551
}
553552
}
554553

555-
if (HoveredTile != lastHoveredTile)
556-
hoverChangedArgs = new TileEventArgs(HoveredTile);
557-
558554
bool isMousePosValid = isHovered && mouseIndex != -1 && draggingTileIndex == -1;
559555
bool selectingRectangleThisFrame = SelectingRectangle;
560556

@@ -595,15 +591,13 @@ public void RenderHoverAndSelection()
595591
activeRectSelectAction = action;
596592
rectSelectStart = mouseIndex;
597593
rectSelectEnd = mouseIndex;
598-
hoverChangedArgs = new(rectSelectStart, rectSelectEnd);
599594
}
600595
else
601596
{
602597
// Button still being held
603598
if (mouseIndex != -1)
604599
{
605600
rectSelectEnd = mouseIndex;
606-
hoverChangedArgs = new(rectSelectStart, rectSelectEnd);
607601
}
608602

609603
// If clicked the alternate button, cancel the rectangle selection without doing anything
@@ -669,34 +663,42 @@ public void RenderHoverAndSelection()
669663
RenderBrushPreview();
670664

671665
FRect hoverRect = null;
672-
int hoverBottomRightTile = -1;
666+
int hoverTile1 = -1;
667+
int hoverTile2 = -1;
673668

674-
if (isMousePosValid && !SelectingRectangle)
669+
if (SelectingRectangle)
670+
{
671+
// Draw hover rectangle (currently actively selecting a rectangle)
672+
hoverTile1 = rectSelectStart;
673+
hoverTile2 = rectSelectEnd;
674+
hoverRect = TileRangeRect(rectSelectStart, rectSelectEnd);
675+
base.AddRect(hoverRect, SelectColor, RectThickness * ImGuiX.ScaleUnit);
676+
}
677+
else if (isMousePosValid)
675678
{
676-
// Draw hover rectangle
679+
// Draw hover rectangle (based on brush size)
677680
int hoverX = mouseIndex % Width;
678681
int hoverY = mouseIndex / Width;
679-
hoverBottomRightTile = XYToTile(
682+
hoverTile1 = mouseIndex;
683+
hoverTile2 = XYToTile(
680684
hoverX + hoverWidth - 1,
681685
hoverY + hoverHeight - 1,
682686
clamp: true);
683-
hoverRect = TileRangeRect(mouseIndex, hoverBottomRightTile);
687+
hoverRect = TileRangeRect(mouseIndex, hoverTile2);
684688
base.AddRect(hoverRect, HoverColor, thickness: RectThickness * ImGuiX.ScaleUnit);
685689
}
686690

687691
if (hoverRect != lastHoverRect)
688692
{
689693
if (hoverRect == null)
690694
hoverChangedArgs = new(-1);
691-
else if (hoverWidth == 1 && hoverHeight == 1)
692-
hoverChangedArgs = new(mouseIndex);
693695
else
694-
hoverChangedArgs = new(mouseIndex, hoverBottomRightTile);
696+
hoverChangedArgs = new(hoverTile1, hoverTile2);
695697
}
696698

697699
lastHoverRect = hoverRect;
698700

699-
if (RectangleSelected || SelectingRectangle)
701+
if (RectangleSelected)
700702
{
701703
// Draw rectangle selection range
702704
base.AddRect(TileRangeRect(rectSelectStart, rectSelectEnd), SelectColor, RectThickness * ImGuiX.ScaleUnit);

LynnaLib/Util/Rect.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,36 @@ public bool Contains(Vector2 point)
4646
&& point.Y >= Y && point.Y <= Y + Height;
4747
}
4848

49+
public override bool Equals(object o)
50+
{
51+
return (o is FRect r) && this == r;
52+
}
53+
54+
public override int GetHashCode()
55+
{
56+
return X.GetHashCode() * 23 + Y.GetHashCode() * 17 + Width.GetHashCode() * 11 + Height.GetHashCode();
57+
}
58+
4959
// ================================================================================
5060
// Operator overloads
5161
// ================================================================================
5262

63+
public static bool operator==(FRect rect1, FRect rect2)
64+
{
65+
if (rect1 is null || rect2 is null)
66+
return (rect1 is null && rect2 is null);
67+
68+
return rect1.X == rect2.X
69+
&& rect1.Y == rect2.Y
70+
&& rect1.Width == rect2.Width
71+
&& rect1.Height == rect2.Height;
72+
}
73+
74+
public static bool operator!=(FRect rect1, FRect rect2)
75+
{
76+
return !(rect1 == rect2);
77+
}
78+
5379
public static FRect operator*(FRect rect1, float scale)
5480
{
5581
return new FRect(rect1.X * scale, rect1.Y * scale,

0 commit comments

Comments
 (0)