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 java.time.Instant;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint;
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
class TreeRespawn class TreeRespawn
{ {
private final Tree tree; 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 Instant startTime;
private final int respawnTime; private final int respawnTime;

View File

@@ -41,6 +41,8 @@ import net.runelite.api.Client;
import net.runelite.api.GameObject; import net.runelite.api.GameObject;
import net.runelite.api.MenuAction; import net.runelite.api.MenuAction;
import net.runelite.api.Player; 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.AnimationChanged;
import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.GameObjectChanged; import net.runelite.api.events.GameObjectChanged;
@@ -204,8 +206,12 @@ public class WoodcuttingPlugin extends Plugin
{ {
if (tree.getRespawnTime() != null && !recentlyLoggedIn) 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()); 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); respawns.add(treeRespawn);
} }
@@ -227,9 +233,9 @@ public class WoodcuttingPlugin extends Plugin
{ {
switch (event.getGameState()) switch (event.getGameState())
{ {
case LOADING:
case HOPPING: case HOPPING:
respawns.clear(); respawns.clear();
case LOADING:
treeObjects.clear(); treeObjects.clear();
break; break;
case LOGGED_IN: case LOGGED_IN:

View File

@@ -103,10 +103,17 @@ class WoodcuttingTreesOverlay extends Overlay
Instant now = Instant.now(); Instant now = Instant.now();
for (TreeRespawn treeRespawn : respawns) 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(); 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) if (point == null || percent > 1.0f)
{ {
continue; continue;