Merge pull request #196 from runelite-extended/aoe

AoE Warnings now uses CycleCount -farhan1666
This commit is contained in:
Tyler Bochard
2019-05-06 22:36:26 -04:00
committed by GitHub
5 changed files with 98 additions and 62 deletions

View File

@@ -2,6 +2,9 @@
* Copyright (c) 2017, Adam <Adam@sigterm.info> * Copyright (c) 2017, Adam <Adam@sigterm.info>
* All rights reserved. * All rights reserved.
* *
*
* Modified by farhan1666
*
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
@@ -24,21 +27,22 @@
*/ */
package net.runelite.client.plugins.aoewarnings; package net.runelite.client.plugins.aoewarnings;
import net.runelite.api.coords.LocalPoint;
import java.time.Instant; import java.time.Instant;
import net.runelite.api.coords.LocalPoint;
public class AoeProjectile public class AoeProjectile
{ {
private final Instant startTime; private final Instant startTime;
private final LocalPoint targetPoint; private final LocalPoint targetPoint;
private final AoeProjectileInfo aoeProjectileInfo; private final AoeProjectileInfo aoeProjectileInfo;
private final int projectileLifetime;
public AoeProjectile(Instant startTime, LocalPoint targetPoint, AoeProjectileInfo aoeProjectileInfo) public AoeProjectile(Instant startTime, LocalPoint targetPoint, AoeProjectileInfo aoeProjectileInfo, int projectileLifetime)
{ {
this.startTime = startTime; this.startTime = startTime;
this.targetPoint = targetPoint; this.targetPoint = targetPoint;
this.aoeProjectileInfo = aoeProjectileInfo; this.aoeProjectileInfo = aoeProjectileInfo;
this.projectileLifetime = projectileLifetime;
} }
public Instant getStartTime() public Instant getStartTime()
@@ -55,4 +59,9 @@ public class AoeProjectile
{ {
return aoeProjectileInfo; return aoeProjectileInfo;
} }
public int getProjectileLifetime()
{
return projectileLifetime;
}
} }

View File

@@ -2,6 +2,9 @@
* Copyright (c) 2018, Adam <Adam@sigterm.info> * Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved. * All rights reserved.
* *
*
* Modified by farhan1666
*
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
@@ -24,91 +27,91 @@
*/ */
package net.runelite.client.plugins.aoewarnings; package net.runelite.client.plugins.aoewarnings;
import net.runelite.api.ProjectileID;
import java.time.Duration;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import net.runelite.api.ProjectileID;
public enum AoeProjectileInfo public enum AoeProjectileInfo
{ {
LIZARDMAN_SHAMAN_AOE(ProjectileID.LIZARDMAN_SHAMAN_AOE, 3000, 3), LIZARDMAN_SHAMAN_AOE(ProjectileID.LIZARDMAN_SHAMAN_AOE, 5),
CRAZY_ARCHAEOLOGIST_AOE(ProjectileID.CRAZY_ARCHAEOLOGIST_AOE, 3000, 3), CRAZY_ARCHAEOLOGIST_AOE(ProjectileID.CRAZY_ARCHAEOLOGIST_AOE, 3),
ICE_DEMON_RANGED_AOE(ProjectileID.ICE_DEMON_RANGED_AOE, 3000, 3), ICE_DEMON_RANGED_AOE(ProjectileID.ICE_DEMON_RANGED_AOE, 3),
/** /**
* When you don't have pray range on ice demon does an ice barrage * When you don't have pray range on ice demon does an ice barrage
*/ */
ICE_DEMON_ICE_BARRAGE_AOE(ProjectileID.ICE_DEMON_ICE_BARRAGE_AOE, 3000, 3), ICE_DEMON_ICE_BARRAGE_AOE(ProjectileID.ICE_DEMON_ICE_BARRAGE_AOE, 3),
/** /**
* The AOE when vasa first starts * The AOE when vasa first starts
*/ */
VASA_AWAKEN_AOE(ProjectileID.VASA_AWAKEN_AOE, 4500, 3), VASA_AWAKEN_AOE(ProjectileID.VASA_AWAKEN_AOE, 3),
VASA_RANGED_AOE(ProjectileID.VASA_RANGED_AOE, 3000, 3), VASA_RANGED_AOE(ProjectileID.VASA_RANGED_AOE, 3),
TEKTON_METEOR_AOE(ProjectileID.TEKTON_METEOR_AOE, 4000, 3), TEKTON_METEOR_AOE(ProjectileID.TEKTON_METEOR_AOE, 3),
/** /**
* The AOEs of Vorkath * The AOEs of Vorkath
*/ */
VORKATH_BOMB(ProjectileID.VORKATH_BOMB_AOE, 2400, 3), VORKATH_BOMB(ProjectileID.VORKATH_BOMB_AOE, 3),
VORKATH_POISON_POOL(ProjectileID.VORKATH_POISON_POOL_AOE, 1800, 1), VORKATH_POISON_POOL(ProjectileID.VORKATH_POISON_POOL_AOE, 1),
VORKATH_SPAWN(ProjectileID.VORKATH_SPAWN_AOE, 3000, 1), //extra tick because hard to see otherwise VORKATH_SPAWN(ProjectileID.VORKATH_SPAWN_AOE, 1), //extra tick because hard to see otherwise
VORKATH_TICK_FIRE(ProjectileID.VORKATH_TICK_FIRE_AOE, 600, 1), VORKATH_TICK_FIRE(ProjectileID.VORKATH_TICK_FIRE_AOE, 1),
/** /**
* the AOEs of Galvek * the AOEs of Galvek
*/ */
GALVEK_MINE(ProjectileID.GALVEK_MINE, 3600, 3), GALVEK_MINE(ProjectileID.GALVEK_MINE, 3),
GALVEK_BOMB(ProjectileID.GALVEK_BOMB, 2400, 3), GALVEK_BOMB(ProjectileID.GALVEK_BOMB, 3),
DAWN_FREEZE(ProjectileID.DAWN_FREEZE, 3000, 3), DAWN_FREEZE(ProjectileID.DAWN_FREEZE, 3),
DUSK_CEILING(ProjectileID.DUSK_CEILING, 3000, 3), DUSK_CEILING(ProjectileID.DUSK_CEILING, 3),
/** /**
* the AOE of Vet'ion * the AOE of Vet'ion
*/ */
VETION_LIGHTNING(ProjectileID.VETION_LIGHTNING, 3000, 1), VETION_LIGHTNING(ProjectileID.VETION_LIGHTNING, 1),
/** /**
* the AOE of Chaos Fanatic * the AOE of Chaos Fanatic
*/ */
CHAOS_FANATIC(ProjectileID.CHAOS_FANATIC_AOE, 3000, 1), CHAOS_FANATIC(ProjectileID.CHAOS_FANATIC_AOE, 1),
/** /**
* the AOE of the Corporeal Beast * the AOE of the Corporeal Beast
*/ */
CORPOREAL_BEAST(ProjectileID.CORPOREAL_BEAST_AOE, 3000, 1), CORPOREAL_BEAST(ProjectileID.CORPOREAL_BEAST_AOE, 1),
CORPOREAL_BEAST_DARK_CORE(ProjectileID.CORPOREAL_BEAST_DARK_CORE_AOE, 3000, 3), CORPOREAL_BEAST_DARK_CORE(ProjectileID.CORPOREAL_BEAST_DARK_CORE_AOE, 3),
/** /**
* the AOEs of The Great Olm * the AOEs of The Great Olm
*/ */
OLM_FALLING_CRYSTAL(ProjectileID.OLM_FALLING_CRYSTAL, 3000, 3), OLM_FALLING_CRYSTAL(ProjectileID.OLM_FALLING_CRYSTAL, 3),
OLM_BURNING(ProjectileID.OLM_BURNING, 2400, 1), OLM_BURNING(ProjectileID.OLM_BURNING, 1),
OLM_FALLING_CRYSTAL_TRAIL(ProjectileID.OLM_FALLING_CRYSTAL_TRAIL, 2400, 1), OLM_FALLING_CRYSTAL_TRAIL(ProjectileID.OLM_FALLING_CRYSTAL_TRAIL, 1),
OLM_ACID_TRAIL(ProjectileID.OLM_ACID_TRAIL, 2400, 1), OLM_ACID_TRAIL(ProjectileID.OLM_ACID_TRAIL, 1),
OLM_FIRE_LINE(ProjectileID.OLM_FIRE_LINE, 2400, 1), OLM_FIRE_LINE(ProjectileID.OLM_FIRE_LINE, 1),
/** /**
* the AOE of the Wintertodt snow that falls * the AOE of the Wintertodt snow that falls
*/ */
WINTERTODT_SNOW_FALL(ProjectileID.WINTERTODT_SNOW_FALL_AOE, 4000, 3), WINTERTODT_SNOW_FALL(ProjectileID.WINTERTODT_SNOW_FALL_AOE, 3),
/** /**
* AOE of Xarpus throwing poison * AOE of Xarpus throwing poison
*/ */
XARPUS_POISON_AOE(ProjectileID.XARPUS_ACID, 4000, 3), XARPUS_POISON_AOE(ProjectileID.XARPUS_ACID, 1),
/** /**
* Aoe of Addy Drags * Aoe of Addy Drags
*/ */
ADDY_DRAG_POISON(ProjectileID.ADDY_DRAG_POISON, 2400, 1), ADDY_DRAG_POISON(ProjectileID.ADDY_DRAG_POISON, 1),
/** /**
* the Breath of the Drake * the Breath of the Drake
*/ */
DRAKE_BREATH(ProjectileID.DRAKE_BREATH, 2800, 1); DRAKE_BREATH(ProjectileID.DRAKE_BREATH, 1);
private static final Map<Integer, AoeProjectileInfo> map = new HashMap<>(); private static final Map<Integer, AoeProjectileInfo> map = new HashMap<>();
@@ -129,17 +132,11 @@ public enum AoeProjectileInfo
* need to be a bit longer than the projectile actually takes to land as * need to be a bit longer than the projectile actually takes to land as
* there is a fade effect on the warning * there is a fade effect on the warning
*/ */
private final Duration lifeTime;
/**
* The size of the splash radius of the AoE warning Ex. Lizardman shaman
* AoE is a 3x3, so aoeSize = 3
*/
private final int aoeSize; private final int aoeSize;
AoeProjectileInfo(int id, int lifeTimeMillis, int aoeSize) AoeProjectileInfo(int id, int aoeSize)
{ {
this.id = id; this.id = id;
this.lifeTime = Duration.ofMillis(lifeTimeMillis);
this.aoeSize = aoeSize; this.aoeSize = aoeSize;
} }
@@ -148,11 +145,6 @@ public enum AoeProjectileInfo
return map.get(id); return map.get(id);
} }
public Duration getLifeTime()
{
return lifeTime;
}
public int getId() public int getId()
{ {
return id; return id;

View File

@@ -2,6 +2,8 @@
* Copyright (c) 2018, Adam <Adam@sigterm.info> * Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved. * All rights reserved.
* *
* Modified by farhan1666
*
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
@@ -259,4 +261,14 @@ public interface AoeWarningConfig extends Config
default boolean isDrakeEnabled() { default boolean isDrakeEnabled() {
return true; return true;
} }
@ConfigItem(
keyName = "delay",
name = "Fade delay",
description = "Configures the amount of time in milliseconds that the warning lingers for after the projectile has touched the ground"
)
default int delay()
{
return 300;
}
} }

View File

@@ -2,6 +2,9 @@
* Copyright (c) 2017, Adam <Adam@sigterm.info> * Copyright (c) 2017, Adam <Adam@sigterm.info>
* All rights reserved. * All rights reserved.
* *
*
* Modified by farhan1666
*
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
@@ -24,6 +27,17 @@
*/ */
package net.runelite.client.plugins.aoewarnings; package net.runelite.client.plugins.aoewarnings;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.time.Duration;
import java.time.Instant;
import java.util.Iterator;
import java.util.Map;
import javax.annotation.Nullable;
import javax.inject.Inject;
import net.runelite.api.Client; import net.runelite.api.Client;
import net.runelite.api.Perspective; import net.runelite.api.Perspective;
import net.runelite.api.Projectile; import net.runelite.api.Projectile;
@@ -33,13 +47,6 @@ import net.runelite.client.ui.overlay.Overlay;
import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayLayer;
import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPosition;
import javax.annotation.Nullable;
import javax.inject.Inject;
import java.awt.*;
import java.time.Instant;
import java.util.Iterator;
import java.util.Map;
public class AoeWarningOverlay extends Overlay public class AoeWarningOverlay extends Overlay
{ {
private static final int FILL_START_ALPHA = 25; private static final int FILL_START_ALPHA = 25;
@@ -85,7 +92,7 @@ public class AoeWarningOverlay extends Overlay
{ {
AoeProjectile aoeProjectile = it.next(); AoeProjectile aoeProjectile = it.next();
if (now.isAfter(aoeProjectile.getStartTime().plus(aoeProjectile.getAoeProjectileInfo().getLifeTime()))) if (now.isAfter(aoeProjectile.getStartTime().plus(Duration.ofMillis(aoeProjectile.getProjectileLifetime()))))
{ {
it.remove(); it.remove();
continue; continue;
@@ -98,7 +105,7 @@ public class AoeWarningOverlay extends Overlay
} }
// how far through the projectiles lifetime between 0-1. // how far through the projectiles lifetime between 0-1.
double progress = (System.currentTimeMillis() - aoeProjectile.getStartTime().toEpochMilli()) / (double) aoeProjectile.getAoeProjectileInfo().getLifeTime().toMillis(); double progress = (System.currentTimeMillis() - aoeProjectile.getStartTime().toEpochMilli()) / (double) aoeProjectile.getProjectileLifetime();
int fillAlpha, outlineAlpha; int fillAlpha, outlineAlpha;
if (config.isFadeEnabled()) if (config.isFadeEnabled())

View File

@@ -2,6 +2,8 @@
* Copyright (c) 2018, Adam <Adam@sigterm.info> * Copyright (c) 2018, Adam <Adam@sigterm.info>
* All rights reserved. * All rights reserved.
* *
* Modified by farhan1666
*
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* *
@@ -26,13 +28,30 @@ package net.runelite.client.plugins.aoewarnings;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.runelite.api.*; import net.runelite.api.Client;
import net.runelite.api.GameObject;
import net.runelite.api.GameState;
import net.runelite.api.GraphicsObject;
import net.runelite.api.ObjectID;
import net.runelite.api.Projectile;
import net.runelite.api.Tile;
import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint; import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.*; import net.runelite.api.events.GameObjectDespawned;
import net.runelite.api.events.GameObjectSpawned;
import net.runelite.api.events.GameStateChanged;
import net.runelite.api.events.GameTick;
import net.runelite.api.events.ProjectileMoved;
import net.runelite.client.Notifier; import net.runelite.client.Notifier;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
@@ -41,10 +60,6 @@ import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.PluginType;
import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.OverlayManager;
import javax.inject.Inject;
import java.time.Instant;
import java.util.*;
@PluginDescriptor( @PluginDescriptor(
name = "AoE Warnings", name = "AoE Warnings",
description = "Shows the final destination for AoE Attack projectiles", description = "Shows the final destination for AoE Attack projectiles",
@@ -116,11 +131,12 @@ public class AoeWarningPlugin extends Plugin
Projectile projectile = event.getProjectile(); Projectile projectile = event.getProjectile();
int projectileId = projectile.getId(); int projectileId = projectile.getId();
int projectileLifetime = config.delay() + (projectile.getRemainingCycles() * 20);
AoeProjectileInfo aoeProjectileInfo = AoeProjectileInfo.getById(projectileId); AoeProjectileInfo aoeProjectileInfo = AoeProjectileInfo.getById(projectileId);
if (aoeProjectileInfo != null && isConfigEnabledForProjectileId(projectileId)) if (aoeProjectileInfo != null && isConfigEnabledForProjectileId(projectileId))
{ {
LocalPoint targetPoint = event.getPosition(); LocalPoint targetPoint = event.getPosition();
AoeProjectile aoeProjectile = new AoeProjectile(Instant.now(), targetPoint, aoeProjectileInfo); AoeProjectile aoeProjectile = new AoeProjectile(Instant.now(), targetPoint, aoeProjectileInfo, projectileLifetime);
projectiles.put(projectile, aoeProjectile); projectiles.put(projectile, aoeProjectile);
} }
} }