From f8b801f6cdad414a66349b808f45f7eda78dd8b0 Mon Sep 17 00:00:00 2001 From: Alexsuperfly Date: Tue, 3 Dec 2019 18:57:14 -0500 Subject: [PATCH] woodcutting: show respawn timers after GameState change --- .../client/plugins/woodcutting/TreeRespawn.java | 6 ++++-- .../client/plugins/woodcutting/WoodcuttingPlugin.java | 10 ++++++++-- .../plugins/woodcutting/WoodcuttingTreesOverlay.java | 11 +++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java index a3022ca8f3..ef05dc67b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/TreeRespawn.java @@ -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; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java index a8a38d852e..1078381bf4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingPlugin.java @@ -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: diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java index b070861e08..2d2b9ca16e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/woodcutting/WoodcuttingTreesOverlay.java @@ -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;