Slayer overlay use query idEquals, use consts (#4322)

- QueryRunner is now injected in the constructor.
- Method checkInventory moved bellow the constructor.
- Restructured queries inside checkInventory to utilize idEquals.
- Renamed method checkInventory to getSlayerItems to better reflect the new business logic.
- Removed the now unnecessary check in the render call.
- Changed Set<Integer> of slayer equipment to ImmutableIntArray, and expanded it to include jewelry to prevent the necessity of repeated concat calls when calling idEquals.
- Transformed allSlayer items into a static variable ALL_SLAYER_ITEMS
- Changed slayerJewelry to static.
- Moved static variables to start of class.
This commit is contained in:
JHPinto
2018-07-15 10:15:32 +01:00
committed by Tomas Slusny
parent 4323783bfc
commit 28868a1eee

View File

@@ -33,6 +33,7 @@ import java.awt.Point;
import java.awt.Rectangle;
import java.util.Set;
import javax.inject.Inject;
import com.google.common.primitives.ImmutableIntArray;
import net.runelite.api.ItemID;
import net.runelite.api.Query;
import net.runelite.api.queries.EquipmentItemQuery;
@@ -48,62 +49,70 @@ import net.runelite.client.util.QueryRunner;
class SlayerOverlay extends Overlay
{
private final static Set<Integer> SLAYER_JEWELRY = ImmutableSet.of(
ItemID.SLAYER_RING_1,
ItemID.SLAYER_RING_2,
ItemID.SLAYER_RING_3,
ItemID.SLAYER_RING_4,
ItemID.SLAYER_RING_5,
ItemID.SLAYER_RING_6,
ItemID.SLAYER_RING_7,
ItemID.SLAYER_RING_8
);
private final static ImmutableIntArray ALL_SLAYER_ITEMS = ImmutableIntArray.of(
ItemID.SLAYER_HELMET,
ItemID.SLAYER_HELMET_I,
ItemID.BLACK_SLAYER_HELMET,
ItemID.BLACK_SLAYER_HELMET_I,
ItemID.GREEN_SLAYER_HELMET,
ItemID.GREEN_SLAYER_HELMET_I,
ItemID.PURPLE_SLAYER_HELMET,
ItemID.PURPLE_SLAYER_HELMET_I,
ItemID.RED_SLAYER_HELMET,
ItemID.RED_SLAYER_HELMET_I,
ItemID.TURQUOISE_SLAYER_HELMET,
ItemID.TURQUOISE_SLAYER_HELMET_I,
ItemID.SLAYER_RING_ETERNAL,
ItemID.ENCHANTED_GEM,
ItemID.ETERNAL_GEM,
ItemID.BRACELET_OF_SLAUGHTER,
ItemID.EXPEDITIOUS_BRACELET,
ItemID.SLAYER_RING_1,
ItemID.SLAYER_RING_2,
ItemID.SLAYER_RING_3,
ItemID.SLAYER_RING_4,
ItemID.SLAYER_RING_5,
ItemID.SLAYER_RING_6,
ItemID.SLAYER_RING_7,
ItemID.SLAYER_RING_8
);
private final SlayerConfig config;
private final SlayerPlugin plugin;
private final QueryRunner queryRunner;
@Inject
private QueryRunner queryRunner;
private final Set<Integer> slayerJewelry = ImmutableSet.of(
ItemID.SLAYER_RING_1,
ItemID.SLAYER_RING_2,
ItemID.SLAYER_RING_3,
ItemID.SLAYER_RING_4,
ItemID.SLAYER_RING_5,
ItemID.SLAYER_RING_6,
ItemID.SLAYER_RING_7,
ItemID.SLAYER_RING_8
);
private final Set<Integer> slayerEquipment = ImmutableSet.of(
ItemID.SLAYER_HELMET,
ItemID.SLAYER_HELMET_I,
ItemID.BLACK_SLAYER_HELMET,
ItemID.BLACK_SLAYER_HELMET_I,
ItemID.GREEN_SLAYER_HELMET,
ItemID.GREEN_SLAYER_HELMET_I,
ItemID.PURPLE_SLAYER_HELMET,
ItemID.PURPLE_SLAYER_HELMET_I,
ItemID.RED_SLAYER_HELMET,
ItemID.RED_SLAYER_HELMET_I,
ItemID.TURQUOISE_SLAYER_HELMET,
ItemID.TURQUOISE_SLAYER_HELMET_I,
ItemID.SLAYER_RING_ETERNAL,
ItemID.ENCHANTED_GEM,
ItemID.ETERNAL_GEM,
ItemID.BRACELET_OF_SLAUGHTER,
ItemID.EXPEDITIOUS_BRACELET
);
private ImmutableList<WidgetItem> checkInventory()
{
Query inventoryQuery = new InventoryWidgetItemQuery();
WidgetItem[] inventoryWidgetItems = queryRunner.runQuery(inventoryQuery);
Query equipmentQuery = new EquipmentItemQuery().slotEquals(WidgetInfo.EQUIPMENT_HELMET, WidgetInfo.EQUIPMENT_RING, WidgetInfo.EQUIPMENT_GLOVES);
WidgetItem[] equipmentWidgetItems = queryRunner.runQuery(equipmentQuery);
WidgetItem[] items = concat(inventoryWidgetItems, equipmentWidgetItems, WidgetItem.class);
return ImmutableList.copyOf(items);
}
@Inject
private SlayerOverlay(SlayerPlugin plugin, SlayerConfig config)
private SlayerOverlay(SlayerPlugin plugin, SlayerConfig config, QueryRunner queryRunner)
{
setPosition(OverlayPosition.DYNAMIC);
setLayer(OverlayLayer.ABOVE_WIDGETS);
this.plugin = plugin;
this.config = config;
this.queryRunner = queryRunner;
}
private ImmutableList<WidgetItem> getSlayerItems()
{
int[] slayerItems = ALL_SLAYER_ITEMS.toArray();
Query inventoryQuery = new InventoryWidgetItemQuery().idEquals(slayerItems);
WidgetItem[] inventoryWidgetItems = queryRunner.runQuery(inventoryQuery);
Query equipmentQuery = new EquipmentItemQuery().slotEquals(WidgetInfo.EQUIPMENT_HELMET, WidgetInfo.EQUIPMENT_RING, WidgetInfo.EQUIPMENT_GLOVES).idEquals(slayerItems);
WidgetItem[] equipmentWidgetItems = queryRunner.runQuery(equipmentQuery);
WidgetItem[] items = concat(inventoryWidgetItems, equipmentWidgetItems, WidgetItem.class);
return ImmutableList.copyOf(items);
}
@Override
@@ -125,15 +134,10 @@ class SlayerOverlay extends Overlay
graphics.setFont(FontManager.getRunescapeSmallFont());
for (WidgetItem item : checkInventory())
for (WidgetItem item : getSlayerItems())
{
int itemId = item.getId();
if (!slayerEquipment.contains(itemId) && !slayerJewelry.contains(itemId))
{
continue;
}
final Rectangle bounds = item.getCanvasBounds();
final TextComponent textComponent = new TextComponent();
@@ -151,7 +155,7 @@ class SlayerOverlay extends Overlay
}
// Draw the counter in the bottom left for equipment, and top left for jewelry
textComponent.setPosition(new Point(bounds.x, bounds.y + (slayerJewelry.contains(itemId)
textComponent.setPosition(new Point(bounds.x, bounds.y + (SLAYER_JEWELRY.contains(itemId)
? bounds.height
: graphics.getFontMetrics().getHeight())));
textComponent.render(graphics);