woodcutting: show respawn timers after GameState change

This commit is contained in:
Alexsuperfly
2019-12-03 18:57:14 -05:00
committed by Adam
parent a3ef09b433
commit f8b801f6cd
3 changed files with 21 additions and 6 deletions

View File

@@ -28,14 +28,16 @@ package net.runelite.client.plugins.woodcutting;
import java.time.Instant;
import lombok.AllArgsConstructor;
import lombok.Getter;
import net.runelite.api.coords.LocalPoint;
import net.runelite.api.coords.WorldPoint;
@AllArgsConstructor
@Getter
class TreeRespawn
{
private final Tree tree;
private final LocalPoint location;
private final int lenX;
private final int lenY;
private final WorldPoint worldLocation;
private final Instant startTime;
private final int respawnTime;

View File

@@ -41,6 +41,8 @@ import net.runelite.api.Client;
import net.runelite.api.GameObject;
import net.runelite.api.MenuAction;
import net.runelite.api.Player;
import net.runelite.api.Point;
import net.runelite.api.coords.WorldPoint;
import net.runelite.api.events.AnimationChanged;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameObjectChanged;
@@ -204,8 +206,12 @@ public class WoodcuttingPlugin extends Plugin
{
if (tree.getRespawnTime() != null && !recentlyLoggedIn)
{
Point max = object.getSceneMaxLocation();
Point min = object.getSceneMinLocation();
int lenX = max.getX() - min.getX();
int lenY = max.getY() - min.getY();
log.debug("Adding respawn timer for {} tree at {}", tree, object.getLocalLocation());
TreeRespawn treeRespawn = new TreeRespawn(tree, object.getLocalLocation(), Instant.now(), (int) tree.getRespawnTime().toMillis());
TreeRespawn treeRespawn = new TreeRespawn(tree, lenX, lenY, WorldPoint.fromScene(client, min.getX(), min.getY(), client.getPlane()), Instant.now(), (int) tree.getRespawnTime().toMillis());
respawns.add(treeRespawn);
}
@@ -227,9 +233,9 @@ public class WoodcuttingPlugin extends Plugin
{
switch (event.getGameState())
{
case LOADING:
case HOPPING:
respawns.clear();
case LOADING:
treeObjects.clear();
break;
case LOGGED_IN:

View File

@@ -103,10 +103,17 @@ class WoodcuttingTreesOverlay extends Overlay
Instant now = Instant.now();
for (TreeRespawn treeRespawn : respawns)
{
LocalPoint loc = treeRespawn.getLocation();
LocalPoint minLocation = LocalPoint.fromWorld(client, treeRespawn.getWorldLocation());
if (minLocation == null)
{
continue;
}
LocalPoint centeredLocation = new LocalPoint(
minLocation.getX() + treeRespawn.getLenX() * Perspective.LOCAL_HALF_TILE_SIZE,
minLocation.getY() + treeRespawn.getLenY() * Perspective.LOCAL_HALF_TILE_SIZE);
float percent = (now.toEpochMilli() - treeRespawn.getStartTime().toEpochMilli()) / (float) treeRespawn.getRespawnTime();
Point point = Perspective.localToCanvas(client, loc, client.getPlane());
Point point = Perspective.localToCanvas(client, centeredLocation, client.getPlane());
if (point == null || percent > 1.0f)
{
continue;