From 658a2a7a00a772edd0f29c21ae2418c5130192fd Mon Sep 17 00:00:00 2001 From: Hydrox6 Date: Thu, 20 Jun 2019 14:23:22 +0100 Subject: [PATCH] prayer: add HD prayer bar --- .../plugins/prayer/PrayerBarOverlay.java | 42 +++++++++++++++++- .../runelite/client/plugins/prayer/back.png | Bin 0 -> 358 bytes .../runelite/client/plugins/prayer/front.png | Bin 0 -> 437 bytes 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/prayer/back.png create mode 100644 runelite-client/src/main/resources/net/runelite/client/plugins/prayer/front.png diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java index 18d28da696..5798698621 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/prayer/PrayerBarOverlay.java @@ -28,6 +28,7 @@ package net.runelite.client.plugins.prayer; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.image.BufferedImage; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; @@ -35,11 +36,13 @@ import net.runelite.api.Perspective; import net.runelite.api.Player; import net.runelite.api.Point; import net.runelite.api.Skill; +import net.runelite.api.SpriteID; import net.runelite.api.coords.LocalPoint; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; +import net.runelite.client.util.ImageUtil; @Singleton class PrayerBarOverlay extends Overlay @@ -48,6 +51,9 @@ class PrayerBarOverlay extends Overlay private static final Color BAR_BG_COLOR = Color.black; private static final Color FLICK_HELP_COLOR = Color.white; private static final Dimension PRAYER_BAR_SIZE = new Dimension(30, 5); + private static final int HD_PRAYER_BAR_PADDING = 1; + private static final BufferedImage HD_FRONT_BAR = ImageUtil.getResourceStreamFromClass(PrayerPlugin.class, "front.png"); + private static final BufferedImage HD_BACK_BAR = ImageUtil.getResourceStreamFromClass(PrayerPlugin.class, "back.png"); private final Client client; private final PrayerConfig config; @@ -79,12 +85,44 @@ class PrayerBarOverlay extends Overlay final LocalPoint localLocation = client.getLocalPlayer().getLocalLocation(); final Point canvasPoint = Perspective.localToCanvas(client, localLocation, client.getPlane(), height); + final float ratio = (float) client.getBoostedSkillLevel(Skill.PRAYER) / client.getRealSkillLevel(Skill.PRAYER); + + // Draw HD bar + if (client.getSpriteOverrides().containsKey(SpriteID.HEALTHBAR_DEFAULT_FRONT_30PX)) + { + final int barWidth = HD_FRONT_BAR.getWidth(); + final int barHeight = HD_FRONT_BAR.getHeight(); + final int barX = canvasPoint.getX() - barWidth / 2; + final int barY = canvasPoint.getY(); + + // Include padding so the bar doesn't show empty at very low prayer values + final int progressFill = (int) Math.ceil(Math.max(HD_PRAYER_BAR_PADDING * 2, Math.min((barWidth * ratio), barWidth))); + + graphics.drawImage(HD_BACK_BAR, barX, barY, barWidth, barHeight, null); + // Use a sub-image to create the same effect the HD Health Bar has + graphics.drawImage(HD_FRONT_BAR.getSubimage(0, 0, progressFill, barHeight), barX, barY, progressFill, barHeight, null); + + if ((plugin.isPrayersActive() || config.prayerFlickAlwaysOn()) + && (config.prayerFlickLocation().equals(PrayerFlickLocation.PRAYER_BAR) + || config.prayerFlickLocation().equals(PrayerFlickLocation.BOTH))) + { + final double t = plugin.getTickProgress(); + final int halfBarWidth = (barWidth / 2) - HD_PRAYER_BAR_PADDING; + + final int xOffset = (int) (-Math.cos(t) * halfBarWidth) + ((barWidth / 2) - halfBarWidth); + + graphics.setColor(FLICK_HELP_COLOR); + graphics.fillRect(barX + xOffset + HD_PRAYER_BAR_PADDING, barY + HD_PRAYER_BAR_PADDING, 1, barHeight - HD_PRAYER_BAR_PADDING * 2); + } + + return new Dimension(barWidth, barHeight); + } + // Draw bar final int barX = canvasPoint.getX() - 15; final int barY = canvasPoint.getY(); final int barWidth = PRAYER_BAR_SIZE.width; final int barHeight = PRAYER_BAR_SIZE.height; - final float ratio = (float) client.getBoostedSkillLevel(Skill.PRAYER) / client.getRealSkillLevel(Skill.PRAYER); // Restricted by the width to prevent the bar from being too long while you are boosted above your real prayer level. final int progressFill = (int) Math.ceil(Math.min((barWidth * ratio), barWidth)); @@ -100,7 +138,7 @@ class PrayerBarOverlay extends Overlay { double t = plugin.getTickProgress(); - int xOffset = (int) (-Math.cos(t) * barWidth / 2) + barWidth / 2; + final int xOffset = (int) (-Math.cos(t) * barWidth / 2) + barWidth / 2; graphics.setColor(FLICK_HELP_COLOR); graphics.fillRect(barX + xOffset, barY, 1, barHeight); diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/back.png b/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/back.png new file mode 100644 index 0000000000000000000000000000000000000000..76773682c47c50546ed95e9dbf9b84f8694869e7 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^7C_9-!3HE_SM{XanMprAyFYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoq zp`O`aKh76GHP<~|978Pp?_Rmj-fAGi{^76a&EQFfh8OvTC(0>Jlv_0Y-~a!~*DbGa zx|$Wcefgu{jhBAD%Mr9_QV7UTY3+V2VR%gB`JG8Bos$I)Y5QLGj+~bJ$;Mve^d)bv z%8Gn$PIV5}1uwSchF&(Q`0IMTblSf6R}FYFWR5pi&XeD$(;anP)c11B{nf9lxH}ma zYwWtJ8_(_#C?Yl^cI_%HeGR@BzyJP-y%3r1FugY5zK{*~n(3ECuN$X5{JqgQj9qi- zj{gc87k*!S!u3zT_|ZJEwuj~melD(*cH;QSP}Add!eos?4$zAXp00i_>zopr07m(Y AegFUf literal 0 HcmV?d00001 diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/front.png b/runelite-client/src/main/resources/net/runelite/client/plugins/prayer/front.png new file mode 100644 index 0000000000000000000000000000000000000000..d8df9d8bfef197e3894f126cba8b3270edba2229 GIT binary patch literal 437 zcmeAS@N?(olHy`uVBq!ia0vp^7C_9-!3HE_SM{XanMprAyFYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoq zp`O`aKh76GL)AQ8978PplNp%p&i+3vw74Sg=eqwq#eRR&XVeNbioa3gJAaeups|^A z!TG3=J3B;#uR9dpYx>XgvRJ^PL`&`4OdqSZY9SXHd+vkJ^)Im77*Fw;4av`v6Agr+sVcw333OXT9)uH zOb)V<*!|4D`TnZ^JZZv;67L-2N?V#8+QgVXEAu>O_<4iJ`MAPiM~j-H^=%tc9i%#H z(;pqrGZv7Tl7FY*iTMPJO;Hg-EtM=Sj)rW94bC^(a%g8b%xg(3u~VHfA=02yz&H2I cfdjx;sd_cP&GVcNFjN^lUHx3vIVCg!00;x3^Z)<= literal 0 HcmV?d00001