From 81a8b44d5558deafddf6608cd378c08a837ace98 Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Thu, 29 Aug 2019 15:28:37 +0100 Subject: [PATCH 1/2] runecraft: move rift update function to plugin --- .../plugins/runecraft/AbyssOverlay.java | 73 +------------------ .../plugins/runecraft/RunecraftPlugin.java | 65 ++++++++++++++++- 2 files changed, 64 insertions(+), 74 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java index 89954b6468..e945efbc28 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java @@ -27,19 +27,6 @@ package net.runelite.client.plugins.runecraft; import java.awt.Color; import java.awt.Polygon; import java.awt.geom.Area; -import static net.runelite.client.plugins.runecraft.AbyssRifts.AIR_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.BLOOD_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.BODY_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.CHAOS_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.COSMIC_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.DEATH_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.EARTH_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.FIRE_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.LAW_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.MIND_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.NATURE_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.SOUL_RIFT; -import static net.runelite.client.plugins.runecraft.AbyssRifts.WATER_RIFT; import com.google.inject.Inject; import java.awt.Dimension; import java.awt.Graphics2D; @@ -63,7 +50,6 @@ class AbyssOverlay extends Overlay { private static final Dimension IMAGE_SIZE = new Dimension(15, 14); - private final Set rifts = new HashSet<>(); private final Map abyssIcons = new HashMap<>(); private final Client client; @@ -127,7 +113,7 @@ class AbyssOverlay extends Overlay private void renderRifts(Graphics2D graphics, DecorativeObject object) { AbyssRifts rift = AbyssRifts.getRift(object.getId()); - if (rift == null || !rifts.contains(rift)) + if (rift == null || !plugin.getRifts().contains(rift)) { return; } @@ -181,61 +167,4 @@ class AbyssOverlay extends Overlay abyssIcons.put(rift, resizedImage); return resizedImage; } - - public void updateConfig() - { - rifts.clear(); - if (config.showAir()) - { - rifts.add(AIR_RIFT); - } - if (config.showBlood()) - { - rifts.add(BLOOD_RIFT); - } - if (config.showBody()) - { - rifts.add(BODY_RIFT); - } - if (config.showChaos()) - { - rifts.add(CHAOS_RIFT); - } - if (config.showCosmic()) - { - rifts.add(COSMIC_RIFT); - } - if (config.showDeath()) - { - rifts.add(DEATH_RIFT); - } - if (config.showEarth()) - { - rifts.add(EARTH_RIFT); - } - if (config.showFire()) - { - rifts.add(FIRE_RIFT); - } - if (config.showLaw()) - { - rifts.add(LAW_RIFT); - } - if (config.showMind()) - { - rifts.add(MIND_RIFT); - } - if (config.showNature()) - { - rifts.add(NATURE_RIFT); - } - if (config.showSoul()) - { - rifts.add(SOUL_RIFT); - } - if (config.showWater()) - { - rifts.add(WATER_RIFT); - } - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java index ca71c687ef..6fd3d9668c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java @@ -55,6 +55,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import static net.runelite.client.plugins.runecraft.AbyssRifts.*; import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( @@ -75,6 +76,9 @@ public class RunecraftPlugin extends Plugin @Getter(AccessLevel.PACKAGE) private final Set abyssObjects = new HashSet<>(); + @Getter(AccessLevel.PACKAGE) + private final Set rifts = new HashSet<>(); + @Getter(AccessLevel.PACKAGE) private boolean degradedPouchInInventory; @@ -106,7 +110,7 @@ public class RunecraftPlugin extends Plugin protected void startUp() throws Exception { overlayManager.add(abyssOverlay); - abyssOverlay.updateConfig(); + updateRifts(); } @Override @@ -123,7 +127,7 @@ public class RunecraftPlugin extends Plugin { if (event.getGroup().equals("runecraft")) { - abyssOverlay.updateConfig(); + updateRifts(); } } @@ -209,4 +213,61 @@ public class RunecraftPlugin extends Plugin darkMage = null; } } + + private void updateRifts() + { + rifts.clear(); + if (config.showAir()) + { + rifts.add(AIR_RIFT); + } + if (config.showBlood()) + { + rifts.add(BLOOD_RIFT); + } + if (config.showBody()) + { + rifts.add(BODY_RIFT); + } + if (config.showChaos()) + { + rifts.add(CHAOS_RIFT); + } + if (config.showCosmic()) + { + rifts.add(COSMIC_RIFT); + } + if (config.showDeath()) + { + rifts.add(DEATH_RIFT); + } + if (config.showEarth()) + { + rifts.add(EARTH_RIFT); + } + if (config.showFire()) + { + rifts.add(FIRE_RIFT); + } + if (config.showLaw()) + { + rifts.add(LAW_RIFT); + } + if (config.showMind()) + { + rifts.add(MIND_RIFT); + } + if (config.showNature()) + { + rifts.add(NATURE_RIFT); + } + if (config.showSoul()) + { + rifts.add(SOUL_RIFT); + } + if (config.showWater()) + { + rifts.add(WATER_RIFT); + } + } } From a60fdc1a111051c6338be4ba3f12ecdc2b3e99a8 Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Thu, 29 Aug 2019 15:31:50 +0100 Subject: [PATCH 2/2] runecraft: move minimap code to its own overlay --- .../runecraft/AbyssMinimapOverlay.java | 109 ++++++++++++++++++ .../plugins/runecraft/AbyssOverlay.java | 76 +++--------- .../plugins/runecraft/RunecraftPlugin.java | 5 + 3 files changed, 129 insertions(+), 61 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java new file mode 100644 index 0000000000..901fe5f805 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssMinimapOverlay.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2019 Hydrox6 + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.client.plugins.runecraft; + +import com.google.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.DecorativeObject; +import net.runelite.api.Perspective; +import net.runelite.api.Point; +import net.runelite.client.game.ItemManager; +import net.runelite.client.ui.overlay.Overlay; +import net.runelite.client.ui.overlay.OverlayLayer; +import net.runelite.client.ui.overlay.OverlayPosition; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Map; + +class AbyssMinimapOverlay extends Overlay +{ + private static final Dimension IMAGE_SIZE = new Dimension(15, 14); + + private final Map abyssIcons = new HashMap<>(); + private final Client client; + private final RunecraftPlugin plugin; + private final RunecraftConfig config; + private final ItemManager itemManager; + + @Inject + AbyssMinimapOverlay(Client client, RunecraftPlugin plugin, RunecraftConfig config, ItemManager itemManager) + { + setPosition(OverlayPosition.DYNAMIC); + setLayer(OverlayLayer.ABOVE_WIDGETS); + this.client = client; + this.plugin = plugin; + this.config = config; + this.itemManager = itemManager; + } + + @Override + public Dimension render(Graphics2D graphics) + { + if (!config.showRifts()) + { + return null; + } + + for (DecorativeObject object : plugin.getAbyssObjects()) + { + AbyssRifts rift = AbyssRifts.getRift(object.getId()); + if (rift == null || !plugin.getRifts().contains(rift)) + { + continue; + } + + BufferedImage image = getImage(rift); + Point miniMapImage = Perspective.getMiniMapImageLocation(client, object.getLocalLocation(), image); + + if (miniMapImage != null) + { + graphics.drawImage(image, miniMapImage.getX(), miniMapImage.getY(), null); + } + } + + return null; + } + + private BufferedImage getImage(AbyssRifts rift) + { + BufferedImage image = abyssIcons.get(rift); + if (image != null) + { + return image; + } + + // Since item image is too big, we must resize it first. + image = itemManager.getImage(rift.getItemId()); + BufferedImage resizedImage = new BufferedImage(IMAGE_SIZE.width, IMAGE_SIZE.height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = resizedImage.createGraphics(); + g.drawImage(image, 0, 0, IMAGE_SIZE.width, IMAGE_SIZE.height, null); + g.dispose(); + + abyssIcons.put(rift, resizedImage); + return resizedImage; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java index e945efbc28..b4d3df3e18 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/AbyssOverlay.java @@ -30,17 +30,10 @@ import java.awt.geom.Area; import com.google.inject.Inject; import java.awt.Dimension; import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; import net.runelite.api.Client; import net.runelite.api.DecorativeObject; import net.runelite.api.NPC; -import net.runelite.api.Perspective; import net.runelite.api.Point; -import net.runelite.client.game.ItemManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; @@ -48,17 +41,10 @@ import net.runelite.client.ui.overlay.OverlayUtil; class AbyssOverlay extends Overlay { - private static final Dimension IMAGE_SIZE = new Dimension(15, 14); - - private final Map abyssIcons = new HashMap<>(); - private final Client client; private final RunecraftPlugin plugin; private final RunecraftConfig config; - @Inject - private ItemManager itemManager; - @Inject AbyssOverlay(Client client, RunecraftPlugin plugin, RunecraftConfig config) { @@ -72,11 +58,11 @@ class AbyssOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - if (config.showRifts()) + if (config.showRifts() && config.showClickBox()) { for (DecorativeObject object : plugin.getAbyssObjects()) { - renderRifts(graphics, object); + renderRift(graphics, object); } } @@ -110,7 +96,7 @@ class AbyssOverlay extends Overlay OverlayUtil.renderPolygon(graphics, tilePoly, Color.green); } - private void renderRifts(Graphics2D graphics, DecorativeObject object) + private void renderRift(Graphics2D graphics, DecorativeObject object) { AbyssRifts rift = AbyssRifts.getRift(object.getId()); if (rift == null || !plugin.getRifts().contains(rift)) @@ -118,53 +104,21 @@ class AbyssOverlay extends Overlay return; } - if (config.showClickBox()) + Point mousePosition = client.getMouseCanvasPosition(); + Area objectClickbox = object.getClickbox(); + if (objectClickbox != null) { - //Draw clickbox - Point mousePosition = client.getMouseCanvasPosition(); - Area objectClickbox = object.getClickbox(); - if (objectClickbox != null) + if (objectClickbox.contains(mousePosition.getX(), mousePosition.getY())) { - if (objectClickbox.contains(mousePosition.getX(), mousePosition.getY())) - { - graphics.setColor(Color.MAGENTA.darker()); - } - else - { - graphics.setColor(Color.MAGENTA); - } - graphics.draw(objectClickbox); - graphics.setColor(new Color(255, 0, 255, 20)); - graphics.fill(objectClickbox); + graphics.setColor(Color.MAGENTA.darker()); } + else + { + graphics.setColor(Color.MAGENTA); + } + graphics.draw(objectClickbox); + graphics.setColor(new Color(255, 0, 255, 20)); + graphics.fill(objectClickbox); } - - //Draw minimap - BufferedImage image = getImage(rift); - Point miniMapImage = Perspective.getMiniMapImageLocation(client, object.getLocalLocation(), image); - - if (miniMapImage != null) - { - graphics.drawImage(image, miniMapImage.getX(), miniMapImage.getY(), null); - } - } - - public BufferedImage getImage(AbyssRifts rift) - { - BufferedImage image = abyssIcons.get(rift); - if (image != null) - { - return image; - } - - // Since item image is too big, we must resize it first. - image = itemManager.getImage(rift.getItemId()); - BufferedImage resizedImage = new BufferedImage(IMAGE_SIZE.width, IMAGE_SIZE.height, BufferedImage.TYPE_INT_ARGB); - Graphics2D g = resizedImage.createGraphics(); - g.drawImage(image, 0, 0, IMAGE_SIZE.width, IMAGE_SIZE.height, null); - g.dispose(); - - abyssIcons.put(rift, resizedImage); - return resizedImage; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java index 6fd3d9668c..89d9c18c1f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runecraft/RunecraftPlugin.java @@ -94,6 +94,9 @@ public class RunecraftPlugin extends Plugin @Inject private AbyssOverlay abyssOverlay; + @Inject + private AbyssMinimapOverlay abyssMinimapOverlay; + @Inject private RunecraftConfig config; @@ -110,6 +113,7 @@ public class RunecraftPlugin extends Plugin protected void startUp() throws Exception { overlayManager.add(abyssOverlay); + overlayManager.add(abyssMinimapOverlay); updateRifts(); } @@ -117,6 +121,7 @@ public class RunecraftPlugin extends Plugin protected void shutDown() throws Exception { overlayManager.remove(abyssOverlay); + overlayManager.remove(abyssMinimapOverlay); abyssObjects.clear(); darkMage = null; degradedPouchInInventory = false;