Merge branch 'sleepy-main' into 'master'

Add sleep to game loop

See merge request 2009scape/rt4-client!32
This commit is contained in:
Ceikry 2026-01-13 13:36:38 +00:00
commit 55e943af08
2 changed files with 15 additions and 1 deletions

View file

@ -613,6 +613,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
long lastUpdateTime = 0;
long lastDrawTime = 0;
long nextUpdate = 0;
while (killTime == 0L) {
if (GameShell.killTime > MonotonicClock.currentTimeMillis()) {
break;
@ -621,6 +622,14 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
long currentTime = System.nanoTime();
updateDelta = currentTime - lastUpdateTime;
renderDelta = currentTime - lastDrawTime;
nextUpdate = Math.min(FIXED_UPDATE_RATE_NS - updateDelta, VARIABLE_RENDER_RATE_NS - renderDelta);
// Convert from ns to ms
nextUpdate /= 1_000_000;
ThreadUtils.sleep(nextUpdate);
// Game update
if (updateDelta >= FIXED_UPDATE_RATE_NS) {
logicCycles = timer.count(minimumDelay, (int) FIXED_UPDATE_RATE);
for (int cycle = 0; cycle < logicCycles; ++cycle) {
@ -630,7 +639,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
flush(signLink, canvas);
}
renderDelta = currentTime - lastDrawTime;
// Render update
if (renderDelta >= VARIABLE_RENDER_RATE_NS) {
this.mainInputLoop();
this.mainRedrawWrapper();

View file

@ -5,6 +5,11 @@ import org.openrs2.deob.annotation.OriginalMember;
import org.openrs2.deob.annotation.Pc;
public class ThreadUtils {
/**
* Sleeps the current thread for a set amount of milliseconds.
*
* @param arg0. Time in milliseconds to sleep for.
*/
@OriginalMember(owner = "client!sk", name = "a", descriptor = "(JI)V")
public static void sleep(@OriginalArg(0) long arg0) {
if (arg0 <= 0L) {