2014-04-20 04:44:06 +02:00
|
|
|
package mekanism.client;
|
|
|
|
|
|
|
|
import net.minecraft.client.settings.KeyBinding;
|
2014-09-14 06:18:35 +02:00
|
|
|
import org.lwjgl.input.Keyboard;
|
|
|
|
import org.lwjgl.input.Mouse;
|
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
public abstract class MekKeyHandler {
|
|
|
|
public KeyBinding[] keyBindings;
|
|
|
|
public boolean[] keyDown;
|
|
|
|
public boolean[] repeatings;
|
|
|
|
public boolean isDummy;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Pass an array of keybindings and a repeat flag for each one
|
|
|
|
*
|
|
|
|
* @param bindings
|
|
|
|
* @param rep
|
|
|
|
*/
|
|
|
|
public MekKeyHandler(KeyBinding[] bindings, boolean[] rep) {
|
|
|
|
assert keyBindings.length
|
|
|
|
== repeatings.length: "You need to pass two arrays of identical length";
|
|
|
|
keyBindings = bindings;
|
|
|
|
repeatings = rep;
|
|
|
|
keyDown = new boolean[keyBindings.length];
|
|
|
|
}
|
2014-04-20 04:44:06 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
/**
|
|
|
|
* Register the keys into the system. You will do your own keyboard
|
|
|
|
* management elsewhere. No events will fire if you use this method
|
|
|
|
*
|
|
|
|
* @param bindings
|
|
|
|
*/
|
|
|
|
public MekKeyHandler(KeyBinding[] bindings) {
|
|
|
|
keyBindings = bindings;
|
|
|
|
isDummy = true;
|
|
|
|
}
|
2014-04-20 04:44:06 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
public static boolean getIsKeyPressed(KeyBinding keyBinding) {
|
|
|
|
int keyCode = keyBinding.getKeyCode();
|
|
|
|
return keyCode < 0 ? Mouse.isButtonDown(keyCode + 100)
|
|
|
|
: Keyboard.isKeyDown(keyCode);
|
|
|
|
}
|
2014-04-20 04:44:06 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
public KeyBinding[] getKeyBindings() {
|
|
|
|
return keyBindings;
|
|
|
|
}
|
2014-09-11 05:05:45 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
public void keyTick() {
|
|
|
|
for (int i = 0; i < keyBindings.length; i++) {
|
|
|
|
KeyBinding keyBinding = keyBindings[i];
|
|
|
|
boolean state = keyBinding.getIsKeyPressed();
|
2014-04-20 04:44:06 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
if (state != keyDown[i] || (state && repeatings[i])) {
|
|
|
|
if (state) {
|
|
|
|
keyDown(keyBinding, state == keyDown[i]);
|
|
|
|
} else {
|
|
|
|
keyUp(keyBinding);
|
|
|
|
}
|
2014-08-27 02:16:32 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
keyDown[i] = state;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-04-20 04:44:06 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
public abstract void keyDown(KeyBinding kb, boolean isRepeat);
|
2014-04-20 04:44:06 +02:00
|
|
|
|
2023-01-22 17:18:34 +01:00
|
|
|
public abstract void keyUp(KeyBinding kb);
|
2014-04-20 04:44:06 +02:00
|
|
|
}
|