2014-04-29 10:54:20 +10:00
|
|
|
package codechicken.nei;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.LinkedList;
|
|
|
|
|
import java.util.Map.Entry;
|
|
|
|
|
|
2025-08-22 15:12:42 +03:00
|
|
|
import org.lwjgl.input.Keyboard;
|
|
|
|
|
|
2014-04-29 10:54:20 +10:00
|
|
|
/**
|
|
|
|
|
* Good old down/held/up keystate tracker
|
|
|
|
|
*/
|
2022-06-24 12:32:13 +01:00
|
|
|
public class KeyManager {
|
2023-01-28 17:55:51 -08:00
|
|
|
|
2022-06-24 12:32:13 +01:00
|
|
|
public static interface IKeyStateTracker {
|
2023-01-28 17:55:51 -08:00
|
|
|
|
2014-04-29 10:54:20 +10:00
|
|
|
public void tickKeyStates();
|
|
|
|
|
}
|
2022-06-24 12:32:13 +01:00
|
|
|
|
|
|
|
|
public static class KeyState {
|
2023-01-28 17:55:51 -08:00
|
|
|
|
2014-04-29 10:54:20 +10:00
|
|
|
public boolean down;
|
|
|
|
|
public boolean held;
|
|
|
|
|
public boolean up;
|
|
|
|
|
}
|
2022-06-24 12:32:13 +01:00
|
|
|
|
2019-12-30 20:19:16 -08:00
|
|
|
public static HashMap<String, KeyState> keyStates = new HashMap<>();
|
|
|
|
|
public static LinkedList<IKeyStateTracker> trackers = new LinkedList<>();
|
2022-06-24 12:32:13 +01:00
|
|
|
|
|
|
|
|
public static void tickKeyStates() {
|
|
|
|
|
for (Entry<String, KeyState> entry : keyStates.entrySet()) {
|
2025-08-22 15:12:42 +03:00
|
|
|
final boolean down = Keyboard.isKeyDown(NEIClientConfig.getKeyBinding(entry.getKey()));
|
2022-08-19 15:03:42 +03:00
|
|
|
final KeyState state = entry.getValue();
|
|
|
|
|
|
2022-06-24 12:32:13 +01:00
|
|
|
if (down) {
|
2014-04-29 10:54:20 +10:00
|
|
|
state.down = !state.held;
|
|
|
|
|
state.up = false;
|
2022-06-24 12:32:13 +01:00
|
|
|
} else {
|
2014-04-29 10:54:20 +10:00
|
|
|
state.up = state.held;
|
|
|
|
|
state.down = false;
|
|
|
|
|
}
|
2022-08-19 15:03:42 +03:00
|
|
|
|
2014-04-29 10:54:20 +10:00
|
|
|
state.held = down;
|
|
|
|
|
}
|
2022-06-24 12:32:13 +01:00
|
|
|
|
|
|
|
|
for (IKeyStateTracker tracker : trackers) tracker.tickKeyStates();
|
2014-04-29 10:54:20 +10:00
|
|
|
}
|
|
|
|
|
}
|