Merge remote-tracking branch 'runelite/master'

This commit is contained in:
Owain van Brakel
2022-05-15 23:01:04 +02:00
7 changed files with 54 additions and 44 deletions

View File

@@ -236,24 +236,28 @@ public class WorldPoint
// find instance chunks using the template point. there might be more than one. // find instance chunks using the template point. there might be more than one.
List<WorldPoint> worldPoints = new ArrayList<>(); List<WorldPoint> worldPoints = new ArrayList<>();
final int z = worldPoint.getPlane();
int[][][] instanceTemplateChunks = client.getInstanceTemplateChunks(); int[][][] instanceTemplateChunks = client.getInstanceTemplateChunks();
for (int x = 0; x < instanceTemplateChunks[z].length; ++x) for (int z = 0; z < instanceTemplateChunks.length; z++)
{ {
for (int y = 0; y < instanceTemplateChunks[z][x].length; ++y) for (int x = 0; x < instanceTemplateChunks[z].length; ++x)
{ {
int chunkData = instanceTemplateChunks[z][x][y]; for (int y = 0; y < instanceTemplateChunks[z][x].length; ++y)
int rotation = chunkData >> 1 & 0x3;
int templateChunkY = (chunkData >> 3 & 0x7FF) * CHUNK_SIZE;
int templateChunkX = (chunkData >> 14 & 0x3FF) * CHUNK_SIZE;
if (worldPoint.getX() >= templateChunkX && worldPoint.getX() < templateChunkX + CHUNK_SIZE
&& worldPoint.getY() >= templateChunkY && worldPoint.getY() < templateChunkY + CHUNK_SIZE)
{ {
WorldPoint p = new WorldPoint(client.getBaseX() + x * CHUNK_SIZE + (worldPoint.getX() & (CHUNK_SIZE - 1)), int chunkData = instanceTemplateChunks[z][x][y];
client.getBaseY() + y * CHUNK_SIZE + (worldPoint.getY() & (CHUNK_SIZE - 1)), int rotation = chunkData >> 1 & 0x3;
worldPoint.getPlane()); int templateChunkY = (chunkData >> 3 & 0x7FF) * CHUNK_SIZE;
p = rotate(p, rotation); int templateChunkX = (chunkData >> 14 & 0x3FF) * CHUNK_SIZE;
worldPoints.add(p); int plane = chunkData >> 24 & 0x3;
if (worldPoint.getX() >= templateChunkX && worldPoint.getX() < templateChunkX + CHUNK_SIZE
&& worldPoint.getY() >= templateChunkY && worldPoint.getY() < templateChunkY + CHUNK_SIZE
&& plane == worldPoint.getPlane())
{
WorldPoint p = new WorldPoint(client.getBaseX() + x * CHUNK_SIZE + (worldPoint.getX() & (CHUNK_SIZE - 1)),
client.getBaseY() + y * CHUNK_SIZE + (worldPoint.getY() & (CHUNK_SIZE - 1)),
z);
p = rotate(p, rotation);
worldPoints.add(p);
}
} }
} }
} }

View File

@@ -237,7 +237,7 @@ public class GroundMarkerPlugin extends Plugin
final WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, selectedSceneTile.getLocalLocation()); final WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, selectedSceneTile.getLocalLocation());
final int regionId = worldPoint.getRegionID(); final int regionId = worldPoint.getRegionID();
final GroundMarkerPoint point = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), client.getPlane(), null, null); final GroundMarkerPoint point = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane(), null, null);
final boolean exists = getPoints(regionId).contains(point); final boolean exists = getPoints(regionId).contains(point);
client.createMenuEntry(-1) client.createMenuEntry(-1)
@@ -302,7 +302,7 @@ public class GroundMarkerPlugin extends Plugin
WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, localPoint); WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, localPoint);
int regionId = worldPoint.getRegionID(); int regionId = worldPoint.getRegionID();
GroundMarkerPoint point = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), client.getPlane(), config.markerColor(), null); GroundMarkerPoint point = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane(), config.markerColor(), null);
log.debug("Updating point: {} - {}", point, worldPoint); log.debug("Updating point: {} - {}", point, worldPoint);
List<GroundMarkerPoint> groundMarkerPoints = new ArrayList<>(getPoints(regionId)); List<GroundMarkerPoint> groundMarkerPoints = new ArrayList<>(getPoints(regionId));
@@ -326,7 +326,7 @@ public class GroundMarkerPlugin extends Plugin
WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, localPoint); WorldPoint worldPoint = WorldPoint.fromLocalInstance(client, localPoint);
final int regionId = worldPoint.getRegionID(); final int regionId = worldPoint.getRegionID();
GroundMarkerPoint searchPoint = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), client.getPlane(), null, null); GroundMarkerPoint searchPoint = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane(), null, null);
Collection<GroundMarkerPoint> points = getPoints(regionId); Collection<GroundMarkerPoint> points = getPoints(regionId);
GroundMarkerPoint existing = points.stream() GroundMarkerPoint existing = points.stream()
.filter(p -> p.equals(searchPoint)) .filter(p -> p.equals(searchPoint))
@@ -342,7 +342,7 @@ public class GroundMarkerPlugin extends Plugin
{ {
input = Strings.emptyToNull(input); input = Strings.emptyToNull(input);
GroundMarkerPoint newPoint = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), client.getPlane(), existing.getColor(), input); GroundMarkerPoint newPoint = new GroundMarkerPoint(regionId, worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane(), existing.getColor(), input);
points.remove(searchPoint); points.remove(searchPoint);
points.add(newPoint); points.add(newPoint);
savePoints(regionId, points); savePoints(regionId, points);

View File

@@ -685,7 +685,7 @@ public class MenuEntrySwapperPlugin extends Plugin
.onClick(e -> .onClick(e ->
{ {
final String message = new ChatMessageBuilder() final String message = new ChatMessageBuilder()
.append("The default left click option for '").append(composition.getName()).append("' ") .append("The default left click option for '").append(Text.removeTags(composition.getName())).append("' ")
.append("has been set to '").append(actions[menuIdx]).append("'.") .append("has been set to '").append(actions[menuIdx]).append("'.")
.build(); .build();
@@ -774,7 +774,7 @@ public class MenuEntrySwapperPlugin extends Plugin
.onClick(e -> .onClick(e ->
{ {
final String message = new ChatMessageBuilder() final String message = new ChatMessageBuilder()
.append("The default left click option for '").append(composition.getName()).append("' ") .append("The default left click option for '").append(Text.removeTags(composition.getName())).append("' ")
.append("has been set to '").append(actions[menuIdx]).append("'.") .append("has been set to '").append(actions[menuIdx]).append("'.")
.build(); .build();
@@ -799,7 +799,7 @@ public class MenuEntrySwapperPlugin extends Plugin
.onClick(e -> .onClick(e ->
{ {
final String message = new ChatMessageBuilder() final String message = new ChatMessageBuilder()
.append("The default left click option for '").append(composition.getName()).append("' ") .append("The default left click option for '").append(Text.removeTags(composition.getName())).append("' ")
.append("has been reset.") .append("has been reset.")
.build(); .build();

View File

@@ -506,7 +506,7 @@ public class ClientUI
} }
// Update config // Update config
updateFrameConfig(true); updateFrameConfig(false);
// Create hide sidebar button // Create hide sidebar button
@@ -614,6 +614,8 @@ public class ClientUI
// Show frame // Show frame
frame.setVisible(true); frame.setVisible(true);
// On macos setResizable needs to be called after setVisible
frame.setResizable(!config.lockWindowSize());
frame.toFront(); frame.toFront();
requestFocus(); requestFocus();
log.info("Showing frame {}", frame); log.info("Showing frame {}", frame);

View File

@@ -24,7 +24,6 @@
*/ */
package net.runelite.client.ui.overlay; package net.runelite.client.ui.overlay;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import java.awt.Dimension; import java.awt.Dimension;
@@ -64,7 +63,6 @@ public class OverlayManager
private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize"; private static final String OVERLAY_CONFIG_PREFERRED_SIZE = "_preferredSize";
private static final String RUNELITE_CONFIG_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).value(); private static final String RUNELITE_CONFIG_GROUP_NAME = RuneLiteConfig.class.getAnnotation(ConfigGroup.class).value();
@VisibleForTesting
static final Comparator<Overlay> OVERLAY_COMPARATOR = (a, b) -> static final Comparator<Overlay> OVERLAY_COMPARATOR = (a, b) ->
{ {
final OverlayPosition aPos = MoreObjects.firstNonNull(a.getPreferredPosition(), a.getPosition()); final OverlayPosition aPos = MoreObjects.firstNonNull(a.getPreferredPosition(), a.getPosition());
@@ -82,7 +80,7 @@ public class OverlayManager
// For non-dynamic overlays, higher priority means // For non-dynamic overlays, higher priority means
// draw *earlier* so that they are closer to their // draw *earlier* so that they are closer to their
// defined position. // defined position.
return aPos == OverlayPosition.DYNAMIC return aPos == OverlayPosition.DYNAMIC || aPos == OverlayPosition.DETACHED
? a.getPriority().compareTo(b.getPriority()) ? a.getPriority().compareTo(b.getPriority())
: b.getPriority().compareTo(a.getPriority()); : b.getPriority().compareTo(a.getPriority());
}; };

View File

@@ -25,6 +25,7 @@
package net.runelite.client.ui.overlay; package net.runelite.client.ui.overlay;
import com.google.common.base.MoreObjects; import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import java.awt.Color; import java.awt.Color;
import java.awt.Composite; import java.awt.Composite;
@@ -40,6 +41,7 @@ import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -541,22 +543,24 @@ public class OverlayRenderer extends MouseAdapter
{ {
synchronized (overlayManager) synchronized (overlayManager)
{ {
for (Overlay overlay : overlayManager.getOverlays()) // render order is roughly: under -> manual -> above -> always on top
{ final List<OverlayLayer> layerOrder = ImmutableList.of(OverlayLayer.UNDER_WIDGETS, OverlayLayer.MANUAL, OverlayLayer.ABOVE_WIDGETS, OverlayLayer.ALWAYS_ON_TOP);
if (overlay.getPosition() == OverlayPosition.DYNAMIC || overlay.getPosition() == OverlayPosition.TOOLTIP) return overlayManager.getOverlays()
{ .stream()
// never allow moving dynamic or tooltip overlays // ABOVE_SCENE overlays aren't managed
continue; .filter(c -> layerOrder.contains(c.getLayer()))
} // never allow moving dynamic or tooltip overlays
.filter(c -> c.getPosition() != OverlayPosition.DYNAMIC && c.getPosition() != OverlayPosition.TOOLTIP)
final Rectangle bounds = overlay.getBounds(); .sorted(
if (bounds.contains(mousePoint)) Comparator.<Overlay>comparingInt(c -> layerOrder.indexOf(c.getLayer()))
{ .thenComparing(OverlayManager.OVERLAY_COMPARATOR)
return overlay; // pick order is reversed from render order
} .reversed()
} )
.filter(o -> o.getBounds().contains(mousePoint))
.findFirst()
.orElse(null);
} }
return null;
} }
@Override @Override

View File

@@ -42,14 +42,16 @@ public class WidgetOverlay extends Overlay
public static Collection<WidgetOverlay> createOverlays(final OverlayManager overlayManager, final Client client) public static Collection<WidgetOverlay> createOverlays(final OverlayManager overlayManager, final Client client)
{ {
return Arrays.asList( return Arrays.asList(
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_CHATBOX_PARENT, OverlayPosition.DETACHED), // classic resizable
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_CHATBOX_PARENT, OverlayPosition.DETACHED, OverlayPriority.HIGH),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_CHATBOX_PARENT, OverlayPosition.DETACHED, OverlayPriority.HIGH),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_PARENT, OverlayPosition.DETACHED), new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_PARENT, OverlayPosition.DETACHED),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_CHATBOX_PARENT, OverlayPosition.DETACHED), new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.DETACHED, OverlayPriority.MED),
// modern resizable
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_TABS1, OverlayPosition.DETACHED), new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_TABS1, OverlayPosition.DETACHED),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_TABS2, OverlayPosition.DETACHED), new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_TABS2, OverlayPosition.DETACHED),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_PARENT, OverlayPosition.DETACHED), new WidgetOverlay(client, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_PARENT, OverlayPosition.DETACHED),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT), new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.DETACHED, OverlayPriority.MED),
new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT),
// The client forces the oxygen bar below the xp tracker, so set its priority lower // The client forces the oxygen bar below the xp tracker, so set its priority lower
new WidgetOverlay(client, WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_CENTER, OverlayPriority.HIGH), new WidgetOverlay(client, WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_CENTER, OverlayPriority.HIGH),
new XpTrackerWidgetOverlay(overlayManager, client, WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT), new XpTrackerWidgetOverlay(overlayManager, client, WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT),