Hide ground items when interface is open (#160)

* Add viewport WidgetInfo

* Add side panels varbit

* Change ground items plugin to only display within viewport

* Change viewport ids to main interface viewport

* Hide ground items when viewport interfaces are open

* Change fixed viewport widget id
This commit is contained in:
Devin French
2017-10-07 13:57:34 -07:00
committed by Adam
parent 3e6be6d12b
commit 0b3da3bfea
4 changed files with 76 additions and 14 deletions

View File

@@ -83,7 +83,12 @@ public enum Varbits
* Venom - 1,000,000 (6dmg/hit) - 1,000,008 (20 dmg/hit)
*/
POISON(102, 0, 5),
VENOM(102, 6, 9);
VENOM(102, 6, 9),
/**
* Options
*/
SIDE_PANELS(4607, 1055, 8, 8);
/**
* varbit id

View File

@@ -34,6 +34,9 @@ class WidgetID
static final int MINIMAP_GROUP_ID = 160;
static final int LOGIN_CLICK_TO_PLAY_GROUP_ID = 378;
static final int CLUE_SCROLL_GROUP_ID = 203;
static final int FIXED_VIEWPORT_GROUP_ID = 548;
static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID = 161;
static final int RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID = 164;
static class PestControl
{
@@ -92,4 +95,11 @@ class WidgetID
{
static final int XP_ORB = 1;
}
static class Viewport
{
static final int FIXED_VIEWPORT = 20;
static final int RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX = 12;
static final int RESIZABLE_VIEWPORT_BOTTOM_LINE = 12;
}
}

View File

@@ -67,7 +67,11 @@ public enum WidgetInfo
MINIMAP_XP_ORB(WidgetID.MINIMAP_GROUP_ID, WidgetID.Minimap.XP_ORB),
LOGIN_CLICK_TO_PLAY_SCREEN(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, 0);
LOGIN_CLICK_TO_PLAY_SCREEN(WidgetID.LOGIN_CLICK_TO_PLAY_GROUP_ID, 0),
FIXED_VIEWPORT(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.Viewport.FIXED_VIEWPORT),
RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX),
RESIZABLE_VIEWPORT_BOTTOM_LINE(WidgetID.RESIZABLE_VIEWPORT_BOTTOM_LINE_GROUP_ID, WidgetID.Viewport.RESIZABLE_VIEWPORT_BOTTOM_LINE);
private final int groupId;

View File

@@ -31,6 +31,7 @@ import java.awt.Color;
import java.awt.Dimension;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -48,6 +49,8 @@ import net.runelite.api.Player;
import net.runelite.api.Point;
import net.runelite.api.Region;
import net.runelite.api.Tile;
import net.runelite.api.Varbits;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.game.ItemManager;
import net.runelite.client.RuneLite;
@@ -121,11 +124,41 @@ public class GroundItemsOverlay extends Overlay
return null;
}
//Widget bank = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER);
//if (bank != null && !bank.isHidden())
//{
// return null;
//}
WidgetInfo viewportInfo = WidgetInfo.FIXED_VIEWPORT;
if (client.isResized())
{
if (client.getSetting(Varbits.SIDE_PANELS) == 1)
{
viewportInfo = WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE;
}
else
{
viewportInfo = WidgetInfo.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX;
}
}
Widget viewport = client.getWidget(viewportInfo);
if (viewport != null)
{
Widget[] subViewports = viewport.getStaticChildren();
if (subViewports.length > 0)
{
for (Widget w : subViewports)
{
if (w.getNestedChildren().length > 0)
{
return null;
}
}
}
else
{
if (viewport.getNestedChildren().length > 0)
{
return null;
}
}
}
// gets the hidden/highlighted items from the text box in the config
String configItems = config.getHiddenItems();
@@ -199,6 +232,13 @@ public class GroundItemsOverlay extends Overlay
for (int i = 0; i < itemIds.size(); ++i)
{
Point point = itemLayer.getCanvasLocation();
// if the item is offscreen, don't bother drawing it
if (point == null || !pointInWidget(point, viewport))
{
continue;
}
int itemId = itemIds.get(i);
int quantity = items.get(itemId);
ItemComposition item = itemCache.getUnchecked(itemId);
@@ -270,13 +310,6 @@ public class GroundItemsOverlay extends Overlay
String itemString = itemStringBuilder.toString();
itemStringBuilder.setLength(0);
Point point = itemLayer.getCanvasLocation();
// if the item is offscreen, don't bother drawing it
if (point == null)
{
continue;
}
int screenX = point.getX() + 2 - (fm.stringWidth(itemString) / 2);
// Drawing the shadow for the text, 1px on both x and y
@@ -291,4 +324,14 @@ public class GroundItemsOverlay extends Overlay
return null;
}
private boolean pointInWidget(Point point, Widget widget)
{
if (widget != null)
{
Rectangle bounds = widget.getBounds();
return bounds != null && bounds.contains(new java.awt.Point(point.getX(), point.getY()));
}
return false;
}
}