widget overlay: use the in-game configured position for the xptracker widget
This commit is contained in:
@@ -24,58 +24,52 @@
|
||||
*/
|
||||
package net.runelite.client.ui.overlay;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Varbits;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.api.widgets.WidgetInfo;
|
||||
|
||||
public class WidgetOverlay extends Overlay
|
||||
{
|
||||
private static final Map<WidgetInfo, OverlayPosition> WIDGETS = ImmutableMap
|
||||
.<WidgetInfo, OverlayPosition>builder()
|
||||
.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.RAIDS_POINTS_INFOBOX, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.TOB_PARTY_INTERFACE, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.TOB_PARTY_STATS, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.GWD_KC, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.TITHE_FARM, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER)
|
||||
.put(WidgetInfo.PYRAMID_PLUNDER_DATA, OverlayPosition.TOP_CENTER)
|
||||
.put(WidgetInfo.LMS_INFO, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.LMS_KDA, OverlayPosition.TOP_RIGHT)
|
||||
.put(WidgetInfo.GAUNTLET_TIMER_CONTAINER, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.HALLOWED_SEPULCHRE_TIMER_CONTAINER, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.HEALTH_OVERLAY_BAR, OverlayPosition.TOP_CENTER)
|
||||
.put(WidgetInfo.NIGHTMARE_PILLAR_HEALTH, OverlayPosition.TOP_LEFT)
|
||||
.put(WidgetInfo.VOLCANIC_MINE_VENTS_INFOBOX_GROUP, OverlayPosition.BOTTOM_RIGHT)
|
||||
.put(WidgetInfo.VOLCANIC_MINE_STABILITY_INFOBOX_GROUP, OverlayPosition.BOTTOM_LEFT)
|
||||
.put(WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT)
|
||||
.put(WidgetInfo.MULTICOMBAT_RESIZEABLE, OverlayPosition.CANVAS_TOP_RIGHT)
|
||||
.build();
|
||||
|
||||
public static Collection<WidgetOverlay> createOverlays(final Client client)
|
||||
{
|
||||
return WIDGETS.entrySet().stream()
|
||||
.map(w -> new WidgetOverlay(client, w.getKey(), w.getValue()))
|
||||
.collect(Collectors.toList());
|
||||
return Arrays.asList(
|
||||
new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT),
|
||||
new XpTrackerWidgetOverlay(client, WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.RAIDS_POINTS_INFOBOX, OverlayPosition.TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.TOB_PARTY_INTERFACE, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.TOB_PARTY_STATS, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.GWD_KC, OverlayPosition.TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.TITHE_FARM, OverlayPosition.TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.ZEAH_MESS_HALL_COOKING_DISPLAY, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.PVP_KILLDEATH_COUNTER, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.SKOTIZO_CONTAINER, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.KOUREND_FAVOUR_OVERLAY, OverlayPosition.TOP_CENTER),
|
||||
new WidgetOverlay(client, WidgetInfo.PYRAMID_PLUNDER_DATA, OverlayPosition.TOP_CENTER),
|
||||
new WidgetOverlay(client, WidgetInfo.LMS_INFO, OverlayPosition.TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.LMS_KDA, OverlayPosition.TOP_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.GAUNTLET_TIMER_CONTAINER, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.HALLOWED_SEPULCHRE_TIMER_CONTAINER, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.HEALTH_OVERLAY_BAR, OverlayPosition.TOP_CENTER),
|
||||
new WidgetOverlay(client, WidgetInfo.NIGHTMARE_PILLAR_HEALTH, OverlayPosition.TOP_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.VOLCANIC_MINE_VENTS_INFOBOX_GROUP, OverlayPosition.BOTTOM_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.VOLCANIC_MINE_STABILITY_INFOBOX_GROUP, OverlayPosition.BOTTOM_LEFT),
|
||||
new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_FIXED, OverlayPosition.BOTTOM_RIGHT),
|
||||
new WidgetOverlay(client, WidgetInfo.MULTICOMBAT_RESIZEABLE, OverlayPosition.CANVAS_TOP_RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
private final Client client;
|
||||
protected final Client client;
|
||||
private final WidgetInfo widgetInfo;
|
||||
private final Rectangle parentBounds = new Rectangle();
|
||||
|
||||
@@ -169,4 +163,45 @@ public class WidgetOverlay extends Overlay
|
||||
parentBounds.setBounds(bounds);
|
||||
return bounds;
|
||||
}
|
||||
|
||||
private static class XpTrackerWidgetOverlay extends WidgetOverlay
|
||||
{
|
||||
private XpTrackerWidgetOverlay(Client client, WidgetInfo widgetInfo, OverlayPosition overlayPosition)
|
||||
{
|
||||
super(client, widgetInfo, overlayPosition);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the overlay position of the xptracker based on the configured location in-game.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public OverlayPosition getPosition()
|
||||
{
|
||||
if (!client.isClientThread())
|
||||
{
|
||||
// During overlay drag, getPosition() is called on the EDT, so we just
|
||||
// cache and reuse the last known configured position.
|
||||
return super.getPosition();
|
||||
}
|
||||
|
||||
OverlayPosition position;
|
||||
switch (client.getVar(Varbits.EXPERIENCE_TRACKER_POSITION))
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
position = OverlayPosition.TOP_RIGHT;
|
||||
break;
|
||||
case 1:
|
||||
position = OverlayPosition.TOP_CENTER;
|
||||
break;
|
||||
case 2:
|
||||
position = OverlayPosition.TOP_LEFT;
|
||||
break;
|
||||
}
|
||||
setPosition(position);
|
||||
return position;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user