Fix sorting order of overlays
- Without sorting each layer separately, comparator is producing wrong and undeterministic results every so often - The order of widget overlay was inversed and also was using Set instead of List what was returning undeterministic results once again Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
@@ -84,7 +84,7 @@ public class OverlayManager
|
||||
};
|
||||
|
||||
/**
|
||||
* Sorted set of overlays
|
||||
* Insertion-order sorted set of overlays
|
||||
* All access to this must be guarded by a lock on this OverlayManager
|
||||
*/
|
||||
@Getter(AccessLevel.PACKAGE)
|
||||
@@ -108,7 +108,7 @@ public class OverlayManager
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all of the overlays on a layer
|
||||
* Gets all of the overlays on a layer sorted by priority and position
|
||||
*
|
||||
* @param layer the layer
|
||||
* @return An immutable list of all of the overlays on that layer
|
||||
@@ -211,8 +211,6 @@ public class OverlayManager
|
||||
|
||||
private synchronized void rebuildOverlayLayers()
|
||||
{
|
||||
overlays.sort(OVERLAY_COMPARATOR);
|
||||
|
||||
for (OverlayLayer l : OverlayLayer.values())
|
||||
{
|
||||
overlayLayers.put(l, new ArrayList<>());
|
||||
@@ -235,7 +233,11 @@ public class OverlayManager
|
||||
overlayLayers.get(layer).add(overlay);
|
||||
}
|
||||
|
||||
overlayLayers.forEach((layer, value) -> overlayLayers.put(layer, Collections.unmodifiableList(value)));
|
||||
overlayLayers.forEach((layer, value) ->
|
||||
{
|
||||
value.sort(OVERLAY_COMPARATOR);
|
||||
overlayLayers.put(layer, Collections.unmodifiableList(value));
|
||||
});
|
||||
}
|
||||
|
||||
private void loadOverlay(final Overlay overlay)
|
||||
|
||||
@@ -28,9 +28,9 @@ import com.google.common.collect.ImmutableMap;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
@@ -40,17 +40,19 @@ public class WidgetOverlay extends Overlay
|
||||
{
|
||||
private static final Map<WidgetInfo, OverlayPosition> WIDGETS = ImmutableMap
|
||||
.<WidgetInfo, OverlayPosition>builder()
|
||||
.put(WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT)
|
||||
.put(WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT)
|
||||
.put(WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT)
|
||||
.build();
|
||||
|
||||
public static Set<WidgetOverlay> createOverlays(final Client client)
|
||||
public static Collection<WidgetOverlay> createOverlays(final Client client)
|
||||
{
|
||||
return WIDGETS.entrySet().stream().map(w -> new WidgetOverlay(client, w.getKey(), w.getValue())).collect(Collectors.toSet());
|
||||
return WIDGETS.entrySet().stream()
|
||||
.map(w -> new WidgetOverlay(client, w.getKey(), w.getValue()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private final Client client;
|
||||
|
||||
Reference in New Issue
Block a user