woodcutting: show respawn timers after GameState change
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user