Avoid using sleep in main loop, separate update/render times

This commit is contained in:
Pazaz 2022-04-23 03:07:13 -04:00
parent 79fdaf96f8
commit ed473ddd96
8 changed files with 39 additions and 23 deletions

View file

@ -326,7 +326,7 @@ public final class Class59 {
local827 |= Static276.aClass3_Sub2_Sub7Array8[local353].method901(local381);
local838 |= local858.aBoolean278;
}
if ((local858.aBoolean277 || Static204.aBoolean234) && local367 != -1 && local367 < local858.anIntArray473.length) {
if ((local858.aBoolean277 || Static204.applyTweening) && local367 != -1 && local367 < local858.anIntArray473.length) {
Static262.anIntArray515[local353] = local858.anIntArray474[local374];
Static73.anIntArray183[local353] = arg0[local353].anInt5404;
local979 = local858.anIntArray473[local367];
@ -364,7 +364,7 @@ public final class Class59 {
local827 |= local1042.method901(local353);
local838 |= arg3.aBoolean278;
}
if ((arg3.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && arg3.anIntArray473.length > arg1) {
if ((arg3.aBoolean277 || Static204.applyTweening) && arg1 != -1 && arg3.anIntArray473.length > arg1) {
local360 = arg3.anIntArray473[arg1];
local451 = local360 >>> 16;
local360 &= 0xFFFF;
@ -395,7 +395,7 @@ public final class Class59 {
local827 |= local1154.method901(local979);
local838 |= arg2.aBoolean278;
}
if ((arg2.aBoolean277 || Static204.aBoolean234) && arg5 != -1 && arg2.anIntArray473.length > arg5) {
if ((arg2.aBoolean277 || Static204.applyTweening) && arg5 != -1 && arg2.anIntArray473.length > arg5) {
local457 = arg2.anIntArray474[arg8];
local451 = arg2.anIntArray473[arg5];
local481 = local451 >>> 16;

View file

@ -84,6 +84,8 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
@OriginalMember(owner = "client!ba", name = "B", descriptor = "I")
public static int timePerFrame = 20;
public static int FIXED_UPDATE_RATE = 20;
@OriginalMember(owner = "client!cm", name = "b", descriptor = "Ljava/lang/Thread;")
public static Thread thread;
@ -150,6 +152,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
if (signLink.eventQueue == null) {
return;
}
for (@Pc(19) int i = 0; i < 50 && signLink.eventQueue.peekEvent() != null; i++) {
Static231.sleep(1L);
}
@ -367,7 +370,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
}
}
public GraphicsDevice getCurrentDevice() {
public static GraphicsDevice getCurrentDevice() {
GraphicsConfiguration config = frame.getGraphicsConfiguration();
GraphicsDevice myScreen = config.getDevice();
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
@ -467,13 +470,24 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
Static260.frameBuffer = Static131.create(canvasHeight, canvasWidth, canvas);
this.mainInit();
timer = Static70.create();
while (killTime == 0L || killTime > MonotonicClock.currentTimeMillis()) {
logicCycles = timer.sleep(minimumDelay, timePerFrame);
for (i = 0; i < logicCycles; i++) {
this.mainLoopWrapper();
long lastUpdateTime = 0;
long lastDrawTime = 0;
while (killTime == 0L) {
long currentTime = MonotonicClock.currentTimeMillis();
if (GameShell.killTime > currentTime) {
break;
}
if (currentTime - lastUpdateTime >= FIXED_UPDATE_RATE) {
this.mainLoopWrapper();
lastUpdateTime = currentTime;
}
if (currentTime - lastDrawTime >= timePerFrame) {
this.mainRedrawWrapper();
lastDrawTime = currentTime;
}
this.mainRedrawWrapper();
flush(signLink, canvas);
}
} catch (@Pc(198) Exception ex) {
Static89.report(null, ex);

View file

@ -40,4 +40,6 @@ public class GlobalConfig {
//endregion
public static boolean ANIMATED_SD_BACKGROUND = true;
public static boolean USE_TWEENING = true;
}

View file

@ -269,7 +269,7 @@ public final class Loc extends Entity {
@Pc(192) int local192 = (local157 >> 1) + this.anInt1300;
@Pc(201) int local201 = (local157 + 1 >> 1) + this.anInt1300;
this.method1047(local192 * 128, local185 * 128);
@Pc(256) boolean local256 = !local12 && local19.aBoolean212 && (local19.anInt4426 != this.anInt1321 || (this.anInt1297 != this.anInt1322 || this.aClass144_2 != null && (this.aClass144_2.aBoolean280 || Static204.aBoolean234) && this.anInt1297 != this.anInt1304) && Static139.sceneryShadowsType >= 2);
@Pc(256) boolean local256 = !local12 && local19.aBoolean212 && (local19.anInt4426 != this.anInt1321 || (this.anInt1297 != this.anInt1322 || this.aClass144_2 != null && (this.aClass144_2.aBoolean280 || Static204.applyTweening) && this.anInt1297 != this.anInt1304) && Static139.sceneryShadowsType >= 2);
if (arg0 && !local256) {
return null;
}

View file

@ -358,7 +358,7 @@ public final class NpcType {
local721 |= Static6.aClass3_Sub2_Sub7Array1[local235].method901(local214);
local725 |= local753.aBoolean278;
}
if ((local753.aBoolean277 || Static204.aBoolean234) && local207 != -1 && local753.anIntArray473.length > local207) {
if ((local753.aBoolean277 || Static204.applyTweening) && local207 != -1 && local753.anIntArray473.length > local207) {
Static71.anIntArray147[local235] = local753.anIntArray474[local200];
Static214.anIntArray492[local235] = arg0[local235].anInt5404;
local228 = local753.anIntArray473[local207];
@ -401,7 +401,7 @@ public final class NpcType {
local721 |= local962.method901(local235);
local725 |= arg8.aBoolean278;
}
if ((arg8.aBoolean277 || Static204.aBoolean234) && arg3 != -1 && arg8.anIntArray473.length > arg3) {
if ((arg8.aBoolean277 || Static204.applyTweening) && arg3 != -1 && arg8.anIntArray473.length > arg3) {
local200 = arg8.anIntArray474[arg5];
local221 = arg8.anIntArray473[arg3];
local1040 = local221 >>> 16;
@ -432,7 +432,7 @@ public final class NpcType {
local721 |= local1088.method901(local228);
local725 |= arg6.aBoolean278;
}
if ((arg6.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && arg1 < arg6.anIntArray473.length) {
if ((arg6.aBoolean277 || Static204.applyTweening) && arg1 != -1 && arg1 < arg6.anIntArray473.length) {
local300 = arg6.anIntArray474[arg2];
local1040 = arg6.anIntArray473[arg1];
local318 = local1040 >>> 16;

View file

@ -82,7 +82,7 @@ public final class SeqType {
}
@Pc(39) int local39 = arg3 & 0x3;
@Pc(41) AnimFrameset local41 = null;
if ((this.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && this.anIntArray473.length > arg1) {
if ((this.aBoolean277 || Static204.applyTweening) && arg1 != -1 && this.anIntArray473.length > arg1) {
@Pc(69) int local69 = this.anIntArray473[arg1];
local41 = Static72.method1566(local69 >> 16);
arg1 = local69 & 0xFFFF;
@ -137,7 +137,7 @@ public final class SeqType {
return arg0.method4572(true, true, true);
}
@Pc(34) AnimFrameset local34 = null;
if ((this.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && arg1 < this.anIntArray473.length) {
if ((this.aBoolean277 || Static204.applyTweening) && arg1 != -1 && arg1 < this.anIntArray473.length) {
@Pc(59) int local59 = this.anIntArray473[arg1];
local34 = Static72.method1566(local59 >> 16);
arg1 = local59 & 0xFFFF;
@ -154,7 +154,7 @@ public final class SeqType {
local83 &= 0xFFFF;
}
}
if ((this.aBoolean277 || Static204.aBoolean234) && arg1 != -1 && this.anIntArray475.length > arg1) {
if ((this.aBoolean277 || Static204.applyTweening) && arg1 != -1 && this.anIntArray475.length > arg1) {
local85 = this.anIntArray475[arg1];
if (local85 != 65535) {
local81 = Static72.method1566(local85 >> 16);
@ -195,7 +195,7 @@ public final class SeqType {
}
@Pc(40) int local40 = arg3 & 0x3;
@Pc(42) AnimFrameset local42 = null;
if ((this.aBoolean277 || Static204.aBoolean234) && arg0 != -1 && arg0 < this.anIntArray473.length) {
if ((this.aBoolean277 || Static204.applyTweening) && arg0 != -1 && arg0 < this.anIntArray473.length) {
@Pc(66) int local66 = this.anIntArray473[arg0];
local42 = Static72.method1566(local66 >> 16);
arg0 = local66 & 0xFFFF;
@ -269,7 +269,7 @@ public final class SeqType {
return arg3.method4560(true, true, true);
}
@Pc(42) AnimFrameset local42 = null;
if ((this.aBoolean277 || Static204.aBoolean234) && arg0 != -1 && this.anIntArray473.length > arg0) {
if ((this.aBoolean277 || Static204.applyTweening) && arg0 != -1 && this.anIntArray473.length > arg0) {
@Pc(65) int local65 = this.anIntArray473[arg0];
local42 = Static72.method1566(local65 >> 16);
arg0 = local65 & 0xFFFF;

View file

@ -343,11 +343,11 @@ public final class Static127 {
Static121.aBoolean154 = true;
}
if (arg0.method3111(Static124.aClass100_596)) {
if (Static204.aBoolean234) {
Static204.aBoolean234 = false;
if (Static204.applyTweening) {
Static204.applyTweening = false;
Static103.method2231(null, 0, Static274.aClass100_943);
} else {
Static204.aBoolean234 = true;
Static204.applyTweening = true;
Static103.method2231(null, 0, Static50.aClass100_362);
}
}

View file

@ -20,7 +20,7 @@ public final class Static204 {
public static LinkedList aClass69_113 = new LinkedList();
@OriginalMember(owner = "client!qi", name = "v", descriptor = "Z")
public static boolean aBoolean234 = false;
public static boolean applyTweening = GlobalConfig.USE_TWEENING;
@OriginalMember(owner = "client!qi", name = "x", descriptor = "[I")
public static final int[] anIntArray425 = new int[] { 0, 1, 2, 3, 4, 5, 6, 14 };