poh: fix burner overlay timers

The object spawn event happens after the lighting animation, which was
causing it to create a new burner with the default timers applied
instead of the one applied via the fm level.

Also fix computing upper limit on the random timer which is not
inclusive of the fm level
This commit is contained in:
Adam
2021-05-23 14:42:23 -04:00
parent f85d5dff43
commit 44134dc668
3 changed files with 19 additions and 17 deletions

View File

@@ -64,12 +64,7 @@ class BurnerOverlay extends Overlay
plugin.getIncenseBurners().forEach((tile, burner) -> plugin.getIncenseBurners().forEach((tile, burner) ->
{ {
if (tile.getPlane() != client.getPlane()) if (tile.getPlane() != client.getPlane() || !burner.isLit())
{
return;
}
if (!PohPlugin.BURNER_LIT.contains(burner.getId()))
{ {
return; return;
} }

View File

@@ -25,20 +25,22 @@
package net.runelite.client.plugins.poh; package net.runelite.client.plugins.poh;
import java.time.Instant; import java.time.Instant;
import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
@RequiredArgsConstructor
@AllArgsConstructor
class IncenseBurner class IncenseBurner
{ {
private final Instant start = Instant.now(); private Instant start;
private final int id; private boolean lit;
private double countdownTimer; private double countdownTimer;
private double randomTimer; private double randomTimer;
private Instant end; private Instant end;
void reset()
{
countdownTimer = 0;
randomTimer = 0;
}
} }

View File

@@ -27,6 +27,7 @@ package net.runelite.client.plugins.poh;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.io.IOException; import java.io.IOException;
import java.time.Instant;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -49,7 +50,6 @@ import net.runelite.api.Tile;
import net.runelite.api.TileObject; import net.runelite.api.TileObject;
import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.LocalPoint;
import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.AnimationChanged;
import net.runelite.client.events.ConfigChanged;
import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectDespawned;
import net.runelite.api.events.DecorativeObjectSpawned; import net.runelite.api.events.DecorativeObjectSpawned;
import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameObjectDespawned;
@@ -57,6 +57,7 @@ import net.runelite.api.events.GameObjectSpawned;
import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameStateChanged;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe; import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.ConfigChanged;
import net.runelite.client.game.HiscoreManager; import net.runelite.client.game.HiscoreManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
@@ -144,9 +145,11 @@ public class PohPlugin extends Plugin
return; return;
} }
final double countdownTimer = 130.0; // Minimum amount of seconds a burner will light IncenseBurner incenseBurner = incenseBurners.computeIfAbsent(event.getTile(), k -> new IncenseBurner());
final double randomTimer = 30.0; // Minimum amount of seconds a burner will light incenseBurner.setStart(Instant.now());
incenseBurners.put(event.getTile(), new IncenseBurner(gameObject.getId(), countdownTimer, randomTimer, null)); incenseBurner.setLit(BURNER_LIT.contains(gameObject.getId()));
incenseBurner.setEnd(null);
// The burner timers are set when observing a player light the burner
} }
@Subscribe @Subscribe
@@ -203,6 +206,7 @@ public class PohPlugin extends Plugin
.ifPresent(tile -> .ifPresent(tile ->
{ {
final IncenseBurner incenseBurner = incenseBurners.get(tile); final IncenseBurner incenseBurner = incenseBurners.get(tile);
incenseBurner.reset();
if (actor == client.getLocalPlayer()) if (actor == client.getLocalPlayer())
{ {
@@ -245,6 +249,7 @@ public class PohPlugin extends Plugin
{ {
final double tickLengthSeconds = Constants.GAME_TICK_LENGTH / 1000.0; final double tickLengthSeconds = Constants.GAME_TICK_LENGTH / 1000.0;
incenseBurner.setCountdownTimer((200 + fmLevel) * tickLengthSeconds); incenseBurner.setCountdownTimer((200 + fmLevel) * tickLengthSeconds);
incenseBurner.setRandomTimer(fmLevel * tickLengthSeconds); incenseBurner.setRandomTimer((fmLevel - 1) * tickLengthSeconds);
log.debug("Set burner timer for firemaking level {}", fmLevel);
} }
} }