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:
@@ -64,12 +64,7 @@ class BurnerOverlay extends Overlay
|
||||
|
||||
plugin.getIncenseBurners().forEach((tile, burner) ->
|
||||
{
|
||||
if (tile.getPlane() != client.getPlane())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!PohPlugin.BURNER_LIT.contains(burner.getId()))
|
||||
if (tile.getPlane() != client.getPlane() || !burner.isLit())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -25,20 +25,22 @@
|
||||
package net.runelite.client.plugins.poh;
|
||||
|
||||
import java.time.Instant;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@RequiredArgsConstructor
|
||||
@AllArgsConstructor
|
||||
class IncenseBurner
|
||||
{
|
||||
private final Instant start = Instant.now();
|
||||
private final int id;
|
||||
private Instant start;
|
||||
private boolean lit;
|
||||
private double countdownTimer;
|
||||
private double randomTimer;
|
||||
private Instant end;
|
||||
|
||||
void reset()
|
||||
{
|
||||
countdownTimer = 0;
|
||||
randomTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ package net.runelite.client.plugins.poh;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.Provides;
|
||||
import java.io.IOException;
|
||||
import java.time.Instant;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -49,7 +50,6 @@ import net.runelite.api.Tile;
|
||||
import net.runelite.api.TileObject;
|
||||
import net.runelite.api.coords.LocalPoint;
|
||||
import net.runelite.api.events.AnimationChanged;
|
||||
import net.runelite.client.events.ConfigChanged;
|
||||
import net.runelite.api.events.DecorativeObjectDespawned;
|
||||
import net.runelite.api.events.DecorativeObjectSpawned;
|
||||
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.client.config.ConfigManager;
|
||||
import net.runelite.client.eventbus.Subscribe;
|
||||
import net.runelite.client.events.ConfigChanged;
|
||||
import net.runelite.client.game.HiscoreManager;
|
||||
import net.runelite.client.plugins.Plugin;
|
||||
import net.runelite.client.plugins.PluginDescriptor;
|
||||
@@ -144,9 +145,11 @@ public class PohPlugin extends Plugin
|
||||
return;
|
||||
}
|
||||
|
||||
final double countdownTimer = 130.0; // Minimum amount of seconds a burner will light
|
||||
final double randomTimer = 30.0; // Minimum amount of seconds a burner will light
|
||||
incenseBurners.put(event.getTile(), new IncenseBurner(gameObject.getId(), countdownTimer, randomTimer, null));
|
||||
IncenseBurner incenseBurner = incenseBurners.computeIfAbsent(event.getTile(), k -> new IncenseBurner());
|
||||
incenseBurner.setStart(Instant.now());
|
||||
incenseBurner.setLit(BURNER_LIT.contains(gameObject.getId()));
|
||||
incenseBurner.setEnd(null);
|
||||
// The burner timers are set when observing a player light the burner
|
||||
}
|
||||
|
||||
@Subscribe
|
||||
@@ -203,6 +206,7 @@ public class PohPlugin extends Plugin
|
||||
.ifPresent(tile ->
|
||||
{
|
||||
final IncenseBurner incenseBurner = incenseBurners.get(tile);
|
||||
incenseBurner.reset();
|
||||
|
||||
if (actor == client.getLocalPlayer())
|
||||
{
|
||||
@@ -245,6 +249,7 @@ public class PohPlugin extends Plugin
|
||||
{
|
||||
final double tickLengthSeconds = Constants.GAME_TICK_LENGTH / 1000.0;
|
||||
incenseBurner.setCountdownTimer((200 + fmLevel) * tickLengthSeconds);
|
||||
incenseBurner.setRandomTimer(fmLevel * tickLengthSeconds);
|
||||
incenseBurner.setRandomTimer((fmLevel - 1) * tickLengthSeconds);
|
||||
log.debug("Set burner timer for firemaking level {}", fmLevel);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user