FreezeTimers Added Functionality (#204)
This commit is contained in:
@@ -29,4 +29,48 @@ public interface FreezeTimersConfig extends Config
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "FreezeTimers",
|
||||
name = "Show Freeze Timers",
|
||||
description = "Toggle overlay for Freeze timers",
|
||||
position = 3
|
||||
)
|
||||
default boolean FreezeTimers()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "TB",
|
||||
name = "Show TB Timers",
|
||||
description = "Toggle overlay for TB timers",
|
||||
position = 4
|
||||
)
|
||||
default boolean TB()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "Veng",
|
||||
name = "Show Veng Timers",
|
||||
description = "Toggle overlay for Veng timers",
|
||||
position = 5
|
||||
)
|
||||
default boolean Veng()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@ConfigItem(
|
||||
keyName = "noImage",
|
||||
name = "Text Timers",
|
||||
description = "Remove Images from Timers",
|
||||
position = 6
|
||||
)
|
||||
default boolean noImage()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
package net.runelite.client.plugins.freezetimers;
|
||||
|
||||
import java.awt.Color;
|
||||
import static java.awt.Color.RED;
|
||||
import static java.awt.Color.WHITE;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.image.BufferedImage;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Actor;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.GraphicID;
|
||||
import net.runelite.api.Player;
|
||||
import net.runelite.api.Point;
|
||||
import net.runelite.client.ui.FontManager;
|
||||
import net.runelite.client.ui.overlay.Overlay;
|
||||
@@ -13,27 +22,20 @@ import net.runelite.client.ui.overlay.OverlayPriority;
|
||||
import net.runelite.client.ui.overlay.OverlayUtil;
|
||||
import net.runelite.client.util.ImageUtil;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import static java.awt.Color.RED;
|
||||
import static java.awt.Color.WHITE;
|
||||
import static java.awt.Color.green;
|
||||
|
||||
public class FreezeTimersOverlay extends Overlay
|
||||
{
|
||||
|
||||
@Inject
|
||||
private Timers timers;
|
||||
|
||||
private final FreezeTimersConfig config;
|
||||
private final Client client;
|
||||
private final Font timerFont = FontManager.getRunescapeBoldFont().deriveFont(14.0f);
|
||||
private final BufferedImage FREEZE_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "freeze.png");
|
||||
private final BufferedImage TB_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "teleblock.png");
|
||||
private final BufferedImage VENG_IMAGE = ImageUtil.getResourceStreamFromClass(getClass(), "veng.png");
|
||||
@Inject
|
||||
private Timers timers;
|
||||
private boolean lock;
|
||||
private long finishedAtTest;
|
||||
private Actor player;
|
||||
|
||||
@Inject
|
||||
public FreezeTimersOverlay(FreezeTimersConfig config, Client client)
|
||||
@@ -68,15 +70,15 @@ public class FreezeTimersOverlay extends Overlay
|
||||
|
||||
int overlaysDrawn = 0;
|
||||
|
||||
if (drawFreezeOverlay(g, actor, overlaysDrawn))
|
||||
if (drawFreezeOverlay(g, actor, overlaysDrawn) && config.FreezeTimers())
|
||||
{
|
||||
overlaysDrawn++;
|
||||
}
|
||||
if (drawTBOverlay(g, actor, overlaysDrawn))
|
||||
if (drawTBOverlay(g, actor, overlaysDrawn) && config.TB())
|
||||
{
|
||||
overlaysDrawn++;
|
||||
}
|
||||
if (drawVengOverlay(g, actor, overlaysDrawn))
|
||||
if (drawVengOverlay(g, actor, overlaysDrawn) && config.Veng())
|
||||
{
|
||||
overlaysDrawn++;
|
||||
}
|
||||
@@ -92,8 +94,19 @@ public class FreezeTimersOverlay extends Overlay
|
||||
long finishedAt = timers.getTimerEnd(actor, TimerType.FREEZE);
|
||||
|
||||
String text = processTickCounter(finishedAt);
|
||||
Point poi = actor.getCanvasTextLocation(g, text, 0);
|
||||
int xpoi = poi.getX();
|
||||
int ypoi = poi.getY();
|
||||
Point FixedPoint = new Point(xpoi, ypoi);
|
||||
|
||||
if (config.noImage())
|
||||
{
|
||||
renderTextLocation(g, text, 11, Font.BOLD, Color.WHITE, FixedPoint);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderActorText(g, actor, text, overlaysDrawn, FREEZE_IMAGE);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -107,8 +120,26 @@ public class FreezeTimersOverlay extends Overlay
|
||||
long finishedAt = timers.getTimerEnd(actor, TimerType.TELEBLOCK);
|
||||
|
||||
String text = processTickCounter(finishedAt);
|
||||
Point poi = actor.getCanvasTextLocation(g, text, 0);
|
||||
int xpoi = poi.getX() + 20;
|
||||
int ypoi = poi.getY();
|
||||
Point FixedPoint = new Point(xpoi, ypoi);
|
||||
|
||||
if (config.noImage())
|
||||
{
|
||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) <= currentTick)
|
||||
{
|
||||
renderTextLocation(g, text, 11, Font.BOLD, Color.CYAN, poi);
|
||||
}
|
||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) >= currentTick)
|
||||
{
|
||||
renderTextLocation(g, " | " + text, 11, Font.BOLD, Color.CYAN, FixedPoint);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
renderActorText(g, actor, text, overlaysDrawn, TB_IMAGE);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -122,8 +153,25 @@ public class FreezeTimersOverlay extends Overlay
|
||||
long finishedAt = timers.getTimerEnd(actor, TimerType.VENG);
|
||||
|
||||
String text = processTickCounter(finishedAt);
|
||||
|
||||
Point poi = actor.getCanvasTextLocation(g, text, 0);
|
||||
int xpoi = poi.getX() - 20;
|
||||
int ypoi = poi.getY();
|
||||
Point FixedPoint = new Point(xpoi, ypoi);
|
||||
if (config.noImage())
|
||||
{
|
||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) <= currentTick)
|
||||
{
|
||||
renderTextLocation(g, text, 11, Font.BOLD, Color.RED, poi);
|
||||
}
|
||||
if (timers.getTimerEnd(actor, TimerType.FREEZE) >= currentTick)
|
||||
{
|
||||
renderTextLocation(g, text + " | ", 11, Font.BOLD, Color.RED, FixedPoint);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
renderActorText(g, actor, text, overlaysDrawn, VENG_IMAGE);
|
||||
}
|
||||
if (actor.getGraphic() == GraphicID.VENGEANCE || actor.getGraphic() == GraphicID.VENGEANCE_OTHER)
|
||||
{
|
||||
|
||||
@@ -133,8 +181,8 @@ public class FreezeTimersOverlay extends Overlay
|
||||
{
|
||||
OverlayUtil.renderPolygon(g, poly, RED);
|
||||
}
|
||||
OverlayUtil.renderTextLocation(g, new Point((int)poly.getBounds2D().getCenterX(),
|
||||
(int)poly.getBounds2D().getCenterY()), actor.getName(), RED);
|
||||
OverlayUtil.renderTextLocation(g, new Point((int) poly.getBounds2D().getCenterX(),
|
||||
(int) poly.getBounds2D().getCenterY()), actor.getName(), RED);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -150,6 +198,22 @@ public class FreezeTimersOverlay extends Overlay
|
||||
xOffset);
|
||||
}
|
||||
|
||||
private void renderTextLocation(Graphics2D graphics, String txtString, int fontSize, int fontStyle, Color fontColor, Point canvasPoint)
|
||||
{
|
||||
graphics.setFont(new Font("Arial", fontStyle, fontSize));
|
||||
if (canvasPoint != null)
|
||||
{
|
||||
final Point canvasCenterPoint = new Point(
|
||||
canvasPoint.getX(),
|
||||
canvasPoint.getY());
|
||||
final Point canvasCenterPoint_shadow = new Point(
|
||||
canvasPoint.getX() + 1,
|
||||
canvasPoint.getY() + 1);
|
||||
OverlayUtil.renderTextLocation(graphics, canvasCenterPoint_shadow, txtString, Color.BLACK);
|
||||
OverlayUtil.renderTextLocation(graphics, canvasCenterPoint, txtString, fontColor);
|
||||
}
|
||||
}
|
||||
|
||||
private String processTickCounter(long finishedAt)
|
||||
{
|
||||
long currentTick = System.currentTimeMillis();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.runelite.client.plugins.freezetimers;
|
||||
|
||||
import com.google.inject.Provides;
|
||||
import javax.inject.Inject;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.events.GameTick;
|
||||
import net.runelite.api.events.GraphicChanged;
|
||||
@@ -8,12 +9,9 @@ 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 net.runelite.client.plugins.PluginManager;
|
||||
import net.runelite.client.plugins.PluginType;
|
||||
import net.runelite.client.ui.overlay.OverlayManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@PluginDescriptor(
|
||||
name = "Freeze Timers",
|
||||
description = "Shows a freeze timer overlay on players",
|
||||
@@ -73,6 +71,10 @@ public class FreezeTimersPlugin extends Plugin
|
||||
{
|
||||
length /= 2;
|
||||
}
|
||||
if (timers.getTimerEnd(graphicChanged.getActor(), effect.getType()) > System.currentTimeMillis())
|
||||
{
|
||||
return;
|
||||
}
|
||||
timers.setTimerEnd(graphicChanged.getActor(), effect.getType(),
|
||||
System.currentTimeMillis() + length);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ import lombok.Getter;
|
||||
@AllArgsConstructor
|
||||
public enum PlayerSpellEffect
|
||||
{
|
||||
BIND("Bind", 181,5000, true, 0, TimerType.FREEZE),
|
||||
BIND("Bind", 181, 5000, true, 0, TimerType.FREEZE),
|
||||
SNARE("Snare", 180, 10000, true, 1, TimerType.FREEZE),
|
||||
ENTANGLE("Entangle", 179, 15000, true, 2, TimerType.FREEZE),
|
||||
RUSH("Ice Rush", 361, 5000, false, 3, TimerType.FREEZE),
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package net.runelite.client.plugins.freezetimers;
|
||||
|
||||
import java.util.HashMap;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Actor;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.HashMap;
|
||||
|
||||
@Slf4j
|
||||
@Singleton
|
||||
public class PrayerTracker
|
||||
@@ -43,9 +42,12 @@ public class PrayerTracker
|
||||
newTick.put(actor, new HashMap<>());
|
||||
}
|
||||
if (actor instanceof Player)
|
||||
if(actor instanceof Player) {
|
||||
{
|
||||
if (actor instanceof Player)
|
||||
{
|
||||
newTick.get(actor).put("PrayerIcon", ((Player) actor).getOverheadIcon() == null ? -1 : ((Player) actor).getOverheadIcon().ordinal());
|
||||
}
|
||||
}
|
||||
newTick.get(actor).put("SpotAnim", actor.getGraphic());
|
||||
}
|
||||
|
||||
|
||||
@@ -5,5 +5,5 @@ public enum TimerType
|
||||
FREEZE,
|
||||
VENG,
|
||||
TELEBLOCK,
|
||||
THIS_SHIT_BROKE;
|
||||
THIS_SHIT_BROKE
|
||||
}
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
package net.runelite.client.plugins.freezetimers;
|
||||
|
||||
import java.util.HashMap;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.runelite.api.Actor;
|
||||
import net.runelite.api.Client;
|
||||
import net.runelite.api.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import java.util.HashMap;
|
||||
|
||||
@Slf4j
|
||||
@Singleton
|
||||
@@ -39,7 +37,7 @@ public class Timers
|
||||
{
|
||||
timerMap.put(actor, new HashMap<>());
|
||||
}
|
||||
return timerMap.get(actor).getOrDefault(type, (long)0);
|
||||
return timerMap.get(actor).getOrDefault(type, (long) 0);
|
||||
}
|
||||
|
||||
public boolean areAllTimersZero(Actor actor)
|
||||
|
||||
Reference in New Issue
Block a user