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 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;
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user