Skip to content

Commit 11067cb

Browse files
ScribblePancakeTAS
authored andcommitted
Improving performance of VirtualKeybindings
Closes #27
1 parent f9856b3 commit 11067cb

File tree

6 files changed

+30
-74
lines changed

6 files changed

+30
-74
lines changed

src/main/java/de/scribble/lp/tasmod/ClientProxy.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@ public class ClientProxy extends CommonProxy{
2525

2626
private static SavestateHandlerClient saveHandler;
2727

28-
private static VirtualKeybindings vkeys;
29-
30-
public static KeyBinding tickratezeroKey= new KeyBinding("Toggle Tick Advance", Keyboard.KEY_F8, "TASmod");
28+
public static KeyBinding tickratezeroKey= new KeyBinding("Tickrate 0 Key", Keyboard.KEY_F8, "TASmod");
3129

3230
public static KeyBinding tickAdvance= new KeyBinding("Advance Tick", Keyboard.KEY_F9, "TASmod");
3331

@@ -50,7 +48,6 @@ public void init(FMLInitializationEvent ev) {
5048
MinecraftForge.EVENT_BUS.register(new AimAssistEvents());
5149

5250
saveHandler=new SavestateHandlerClient();
53-
vkeys=new VirtualKeybindings();
5451

5552
ClientRegistry.registerKeyBinding(tickratezeroKey);
5653
ClientRegistry.registerKeyBinding(tickAdvance);
@@ -67,7 +64,4 @@ public static TutorialHandler getPlaybackTutorial() {
6764
public static SavestateHandlerClient getSaveHandler() {
6865
return saveHandler;
6966
}
70-
public static VirtualKeybindings getVkeys() {
71-
return vkeys;
72-
}
7367
}

src/main/java/de/scribble/lp/tasmod/mixin/MixinMinecraft.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import de.scribble.lp.tasmod.recording.InputRecorder;
2222
import de.scribble.lp.tasmod.tickratechanger.TickrateChangerClient;
2323
import de.scribble.lp.tasmod.ticksync.TickSync;
24+
import de.scribble.lp.tasmod.virtual.VirtualKeybindings;
2425
import de.scribble.lp.tasmod.virtual.VirtualMouseAndKeyboard;
2526
import net.minecraft.client.Minecraft;
2627
import net.minecraft.client.audio.MusicTicker;
@@ -216,7 +217,7 @@ public void redoentireRunGameLoop(CallbackInfo ci) throws IOException {
216217
// if(TickrateChangerClient.cooldownKeyAdvance>0) {
217218
// TickrateChangerClient.cooldownKeyAdvance--;
218219
// }
219-
ClientProxy.getVkeys().decreaseCooldowns();
220+
VirtualKeybindings.increaseCooldowntimer();
220221
TickrateChangerClient.INSTANCE.bypass();
221222
for (int j = 0; j < Math.min(10, this.timer.elapsedTicks); ++j)
222223
{

src/main/java/de/scribble/lp/tasmod/playback/InputPlayback.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import de.scribble.lp.tasmod.ClientProxy;
1616
import de.scribble.lp.tasmod.tutorial.TutorialHandler;
1717
import de.scribble.lp.tasmod.util.PointerNormalizer;
18+
import de.scribble.lp.tasmod.virtual.VirtualKeybindings;
1819
import de.scribble.lp.tasmod.virtual.VirtualKeyboardEvent;
1920
import de.scribble.lp.tasmod.virtual.VirtualMouseAndKeyboard;
2021
import de.scribble.lp.tasmod.virtual.VirtualMouseEvent;
@@ -136,7 +137,7 @@ public static void nextPlaybackTick() {
136137
if(!Display.isActive()) {
137138
stopPlayback();
138139
}
139-
if(ClientProxy.getVkeys().isKeyDown(ClientProxy.stopkey)) {
140+
if(VirtualKeybindings.isKeyDown(ClientProxy.stopkey)) {
140141
stopPlayback();
141142
}
142143
if(pausePlayback) {

src/main/java/de/scribble/lp/tasmod/recording/InputRecorder.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import de.scribble.lp.tasmod.ClientProxy;
1414
import de.scribble.lp.tasmod.tutorial.TutorialHandler;
1515
import de.scribble.lp.tasmod.util.PointerNormalizer;
16+
import de.scribble.lp.tasmod.virtual.VirtualKeybindings;
1617
import de.scribble.lp.tasmod.virtual.VirtualKeyboardEvent;
1718
import de.scribble.lp.tasmod.virtual.VirtualMouseAndKeyboard;
1819
import de.scribble.lp.tasmod.virtual.VirtualMouseEvent;
@@ -115,15 +116,11 @@ private static String getStartLocation() {
115116
* output
116117
*/
117118
public static void recordTick() {
118-
if (recording) {
119-
/* Key for stopping the recording */
120-
if (Keyboard.isKeyDown(Keyboard.KEY_N)) {
121-
stopRecording();
122-
}
123-
if (!Display.isActive()) {
119+
if(recording) {
120+
if(!Display.isActive()) {
124121
stopRecording();
125122
}
126-
if (ClientProxy.getVkeys().isKeyDown(ClientProxy.stopkey)) {
123+
if(VirtualKeybindings.isKeyDown(ClientProxy.stopkey)) {
127124
stopRecording();
128125
}
129126
if (pauseRecording) {

src/main/java/de/scribble/lp/tasmod/tickratechanger/TickrateChangerClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ public static void advanceTick() {
4545
* Bypasses the tick system
4646
*/
4747
public void bypass() {
48-
if (ClientProxy.getVkeys().isKeyDown(ClientProxy.tickratezeroKey)) {
48+
if (VirtualKeybindings.isKeyDown(ClientProxy.tickratezeroKey)) {
4949
pauseUnpauseGame();
50-
} else if (ClientProxy.getVkeys().isKeyDown(ClientProxy.tickAdvance)) {
50+
} else if (VirtualKeybindings.isKeyDown(ClientProxy.tickAdvance)) {
5151
advanceTick();
5252
}
5353
}
Lines changed: 19 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package de.scribble.lp.tasmod.virtual;
22

33
import java.util.ArrayList;
4+
import java.util.HashMap;
45
import java.util.List;
56
import java.util.Stack;
67

78
import org.lwjgl.input.Keyboard;
89

10+
import com.google.common.collect.Maps;
11+
912
import net.minecraft.client.settings.KeyBinding;
13+
import net.minecraft.util.IntHashMap;
1014

1115
/**
1216
* Transforms certain Minecraft keybindings to keybindings checked by LWJGL's isKeyDown method. <br>
@@ -16,69 +20,28 @@
1620
*/
1721
public class VirtualKeybindings {
1822
private static final int standardCooldown=10;
19-
List<KeyCooldown> keyList=new ArrayList<KeyCooldown>();
20-
21-
private void add(KeyBinding keybinding) {
22-
keyList.add(new KeyCooldown(keybinding, standardCooldown));
23-
}
23+
private static HashMap<KeyBinding, Long> cooldownHashMap=Maps.<KeyBinding, Long>newHashMap();
24+
private static long cooldowntimer=0;
2425

25-
public void decreaseCooldowns() {
26-
Stack<Integer> index=new Stack<Integer>();
27-
for(KeyCooldown key: keyList) {
28-
if(key.getCoooldown()==0) {
29-
index.add(keyList.indexOf(key));
30-
}else {
31-
key.cooldown--;
32-
}
33-
}
34-
for (int i = 0; i < index.size(); i++) {
35-
keyList.remove((int)index.pop());
36-
}
26+
public static void increaseCooldowntimer() {
27+
cooldowntimer++;
3728
}
3829

39-
public boolean isKeyDown(KeyBinding key) {
40-
boolean down=Keyboard.isKeyDown(key.getKeyCode());
30+
public static boolean isKeyDown(KeyBinding keybind) {
31+
boolean down=Keyboard.isKeyDown(keybind.getKeyCode());
4132
if(down) {
42-
for(KeyCooldown keys: keyList) {
43-
if(keys.getKeyName().contentEquals(key.getKeyDescription())) {
44-
return false;
33+
if(cooldownHashMap.containsKey(keybind)) {
34+
if(standardCooldown<=cooldowntimer-(long)cooldownHashMap.get(keybind)) {
35+
cooldownHashMap.put(keybind, cooldowntimer);
36+
return true;
4537
}
38+
return false;
39+
}else {
40+
cooldownHashMap.put(keybind, cooldowntimer);
41+
return true;
4642
}
47-
keyList.add(new KeyCooldown(key, standardCooldown));
4843
}
49-
return down;
44+
return false;
5045
}
5146

52-
class KeyCooldown{
53-
private KeyBinding key;
54-
private int standardCooldown;
55-
public int cooldown=0;
56-
57-
public KeyCooldown(KeyBinding key, int standardCooldown) {
58-
this.key=key;
59-
this.standardCooldown=standardCooldown;
60-
this.cooldown=standardCooldown;
61-
}
62-
63-
public int getCoooldown() {
64-
return cooldown;
65-
}
66-
67-
public void setPressed() {
68-
cooldown=standardCooldown;
69-
}
70-
71-
public int getKeycode() {
72-
return key.getKeyCode();
73-
}
74-
75-
public void decreaseCooldown() {
76-
if(cooldown>0) {
77-
cooldown--;
78-
}
79-
}
80-
public String getKeyName() {
81-
return key.getKeyDescription();
82-
}
83-
}
8447
}

0 commit comments

Comments
 (0)