From a96a6a5a40f2ca3d42fa275e87deb32b6a70b2c5 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 28 Oct 2021 18:44:42 -0400 Subject: [PATCH 1/5] api: add on tick callback --- .../main/java/net/runelite/api/hooks/Callbacks.java | 9 +++++++-- .../main/java/net/runelite/client/callback/Hooks.java | 10 +++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java index c03adf5d09..777f486e86 100644 --- a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java +++ b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java @@ -53,9 +53,14 @@ public interface Callbacks void postDeferred(Object event); /** - * Called each client cycle. + * Called each tick */ - void clientMainLoop(); + void tick(); + + /** + * Called each frame + */ + void frame(); /** * Called after receiving update NPCs packet from server. diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index 444077d75e..65c877184b 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -176,7 +176,7 @@ public class Hooks implements Callbacks } @Override - public void clientMainLoop() + public void tick() { if (shouldProcessGameTick) { @@ -190,8 +190,6 @@ public class Hooks implements Callbacks client.setTickCount(tick + 1); } - eventBus.post(BEFORE_RENDER); - clientThread.invoke(); long now = System.nanoTime(); @@ -221,6 +219,12 @@ public class Hooks implements Callbacks } } + @Override + public void frame() + { + eventBus.post(BEFORE_RENDER); + } + /** * When the world map opens it loads about ~100mb of data into memory, which * represents about half of the total memory allocated by the client. From f6929172fce2c9d1208277866fa5b544e6b4976d Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 28 Oct 2021 18:45:15 -0400 Subject: [PATCH 2/5] camera plugin: fix tooltips with uncapped fps --- .../java/net/runelite/client/plugins/camera/CameraPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java index b2ac448629..67a83973fa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/camera/CameraPlugin.java @@ -364,6 +364,7 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener public void onClientTick(ClientTick event) { menuHasEntries = hasMenuEntries(client.getMenuEntries()); + sliderTooltip = null; } @Subscribe @@ -416,7 +417,6 @@ public class CameraPlugin extends Plugin implements KeyListener, MouseListener if (sliderTooltip != null) { tooltipManager.add(sliderTooltip); - sliderTooltip = null; } } From ec5179dc7739be00a6b68d289dbbf34b04503e63 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 28 Oct 2021 18:45:21 -0400 Subject: [PATCH 3/5] music plugin: fix tooltips with uncapped fps --- .../net/runelite/client/plugins/music/MusicPlugin.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index 96b08f83e2..0008f463ab 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -61,6 +61,7 @@ import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; import net.runelite.api.events.AreaSoundEffectPlayed; import net.runelite.api.events.BeforeRender; +import net.runelite.api.events.ClientTick; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.PostStructComposition; import net.runelite.api.events.ScriptPreFired; @@ -918,10 +919,15 @@ public class MusicPlugin extends Plugin if (sliderTooltip != null) { tooltipManager.add(sliderTooltip); - sliderTooltip = null; } } + @Subscribe + public void onClientTick(ClientTick event) + { + sliderTooltip = null; + } + @Subscribe public void onAreaSoundEffectPlayed(AreaSoundEffectPlayed areaSoundEffectPlayed) { From 3c7339771d26708f3e4bea6147d22c09fafec551 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 28 Oct 2021 18:11:47 -0400 Subject: [PATCH 4/5] gpu: clear target buffer offset on login screen This prevents the previous scene from rendering during loading prior to the welcome screen being opened --- .../net/runelite/client/plugins/gpu/GpuPlugin.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index d64e1b103f..2beac24839 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -1437,12 +1437,18 @@ public class GpuPlugin extends Plugin implements DrawCallbacks @Subscribe public void onGameStateChanged(GameStateChanged gameStateChanged) { - if (computeMode == ComputeMode.NONE || gameStateChanged.getGameState() != GameState.LOGGED_IN) + switch (gameStateChanged.getGameState()) { - return; + case LOGGED_IN: + if (computeMode != ComputeMode.NONE) + { + invokeOnMainThread(this::uploadScene); + } + break; + case LOGIN_SCREEN: + // Avoid drawing the last frame's buffer during LOADING after LOGIN_SCREEN + targetBufferOffset = 0; } - - invokeOnMainThread(this::uploadScene); } private void uploadScene() From f21596bc47ec00da84b32b6cc7ec81ce62bd456b Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 28 Oct 2021 18:12:48 -0400 Subject: [PATCH 5/5] barrows: fix brothers slain overlay flashing This was assuming there is always a tick between each frame to unhide the barrows potential --- .../barrows/BarrowsBrotherSlainOverlay.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java index 4e4eba0175..a1fd31954e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java @@ -61,18 +61,18 @@ public class BarrowsBrotherSlainOverlay extends OverlayPanel @Override public Dimension render(Graphics2D graphics) { - // Do not display overlay if potential is null/hidden - final Widget potential = client.getWidget(WidgetInfo.BARROWS_POTENTIAL); - if (potential == null || potential.isHidden()) + final Widget barrowsBrothers = client.getWidget(WidgetInfo.BARROWS_BROTHERS); + if (barrowsBrothers == null) { return null; } - // Hide original overlay - final Widget barrowsBrothers = client.getWidget(WidgetInfo.BARROWS_BROTHERS); - if (barrowsBrothers != null) + // Hide original brother and potential overlays + barrowsBrothers.setHidden(true); + + final Widget potential = client.getWidget(WidgetInfo.BARROWS_POTENTIAL); + if (potential != null) { - barrowsBrothers.setHidden(true); potential.setHidden(true); }