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); local827 |= Static276.aClass3_Sub2_Sub7Array8[local353].method901(local381);
local838 |= local858.aBoolean278; 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]; Static262.anIntArray515[local353] = local858.anIntArray474[local374];
Static73.anIntArray183[local353] = arg0[local353].anInt5404; Static73.anIntArray183[local353] = arg0[local353].anInt5404;
local979 = local858.anIntArray473[local367]; local979 = local858.anIntArray473[local367];
@ -364,7 +364,7 @@ public final class Class59 {
local827 |= local1042.method901(local353); local827 |= local1042.method901(local353);
local838 |= arg3.aBoolean278; 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]; local360 = arg3.anIntArray473[arg1];
local451 = local360 >>> 16; local451 = local360 >>> 16;
local360 &= 0xFFFF; local360 &= 0xFFFF;
@ -395,7 +395,7 @@ public final class Class59 {
local827 |= local1154.method901(local979); local827 |= local1154.method901(local979);
local838 |= arg2.aBoolean278; 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]; local457 = arg2.anIntArray474[arg8];
local451 = arg2.anIntArray473[arg5]; local451 = arg2.anIntArray473[arg5];
local481 = local451 >>> 16; 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") @OriginalMember(owner = "client!ba", name = "B", descriptor = "I")
public static int timePerFrame = 20; public static int timePerFrame = 20;
public static int FIXED_UPDATE_RATE = 20;
@OriginalMember(owner = "client!cm", name = "b", descriptor = "Ljava/lang/Thread;") @OriginalMember(owner = "client!cm", name = "b", descriptor = "Ljava/lang/Thread;")
public static Thread thread; public static Thread thread;
@ -150,6 +152,7 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
if (signLink.eventQueue == null) { if (signLink.eventQueue == null) {
return; return;
} }
for (@Pc(19) int i = 0; i < 50 && signLink.eventQueue.peekEvent() != null; i++) { for (@Pc(19) int i = 0; i < 50 && signLink.eventQueue.peekEvent() != null; i++) {
Static231.sleep(1L); 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(); GraphicsConfiguration config = frame.getGraphicsConfiguration();
GraphicsDevice myScreen = config.getDevice(); GraphicsDevice myScreen = config.getDevice();
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
@ -467,13 +470,24 @@ public abstract class GameShell extends Applet implements Runnable, FocusListene
Static260.frameBuffer = Static131.create(canvasHeight, canvasWidth, canvas); Static260.frameBuffer = Static131.create(canvasHeight, canvasWidth, canvas);
this.mainInit(); this.mainInit();
timer = Static70.create(); timer = Static70.create();
while (killTime == 0L || killTime > MonotonicClock.currentTimeMillis()) {
logicCycles = timer.sleep(minimumDelay, timePerFrame); long lastUpdateTime = 0;
for (i = 0; i < logicCycles; i++) { long lastDrawTime = 0;
this.mainLoopWrapper(); 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(); this.mainRedrawWrapper();
flush(signLink, canvas); lastDrawTime = currentTime;
}
} }
} catch (@Pc(198) Exception ex) { } catch (@Pc(198) Exception ex) {
Static89.report(null, ex); Static89.report(null, ex);

View file

@ -40,4 +40,6 @@ public class GlobalConfig {
//endregion //endregion
public static boolean ANIMATED_SD_BACKGROUND = true; 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(192) int local192 = (local157 >> 1) + this.anInt1300;
@Pc(201) int local201 = (local157 + 1 >> 1) + this.anInt1300; @Pc(201) int local201 = (local157 + 1 >> 1) + this.anInt1300;
this.method1047(local192 * 128, local185 * 128); 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) { if (arg0 && !local256) {
return null; return null;
} }

View file

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

View file

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

View file

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

View file

@ -20,7 +20,7 @@ public final class Static204 {
public static LinkedList aClass69_113 = new LinkedList(); public static LinkedList aClass69_113 = new LinkedList();
@OriginalMember(owner = "client!qi", name = "v", descriptor = "Z") @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") @OriginalMember(owner = "client!qi", name = "x", descriptor = "[I")
public static final int[] anIntArray425 = new int[] { 0, 1, 2, 3, 4, 5, 6, 14 }; public static final int[] anIntArray425 = new int[] { 0, 1, 2, 3, 4, 5, 6, 14 };