Consolidated some Keyboard methods, map key codes using KeyEvent

This commit is contained in:
Pazaz 2022-04-23 14:10:49 -04:00
parent 9701d3d1c8
commit 4532188a18
5 changed files with 163 additions and 56 deletions

View file

@ -3,6 +3,9 @@ import java.awt.event.FocusEvent;
import java.awt.event.FocusListener; import java.awt.event.FocusListener;
import java.awt.event.KeyEvent; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
import java.lang.reflect.Method;
import java.util.Arrays;
import org.openrs2.deob.annotation.OriginalArg; import org.openrs2.deob.annotation.OriginalArg;
import org.openrs2.deob.annotation.OriginalClass; import org.openrs2.deob.annotation.OriginalClass;
import org.openrs2.deob.annotation.OriginalMember; import org.openrs2.deob.annotation.OriginalMember;
@ -11,8 +14,10 @@ import org.openrs2.deob.annotation.Pc;
@OriginalClass("client!uf") @OriginalClass("client!uf")
public final class Keyboard implements KeyListener, FocusListener { public final class Keyboard implements KeyListener, FocusListener {
public static final int KEY_CTRL = 80;
public static final int KEY_SHIFT = 81; public static final int KEY_SHIFT = 81;
public static final int KEY_CTRL = 82;
public static final int KEY_ENTER = 84;
public static final int KEY_BACK_SPACE = 85;
public static final int KEY_ALT = 86; public static final int KEY_ALT = 86;
public static final int KEY_LEFT = 96; public static final int KEY_LEFT = 96;
public static final int KEY_RIGHT = 97; public static final int KEY_RIGHT = 97;
@ -23,7 +28,103 @@ public final class Keyboard implements KeyListener, FocusListener {
public static final int[] eventQueue = new int[128]; public static final int[] eventQueue = new int[128];
@OriginalMember(owner = "client!pl", name = "c", descriptor = "[I") @OriginalMember(owner = "client!pl", name = "c", descriptor = "[I")
public static final int[] CODE_MAP = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, 85, 80, 84, -1, 91, -1, -1, -1, 81, 82, 86, -1, -1, -1, -1, -1, -1, -1, -1, 13, -1, -1, -1, -1, 83, 104, 105, 103, 102, 96, 98, 97, 99, -1, -1, -1, -1, -1, -1, -1, 25, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, -1, -1, 48, 68, 66, 50, 34, 51, 52, 53, 39, 54, 55, 56, 70, 69, 40, 41, 32, 35, 49, 36, 38, 67, 33, 65, 37, 64, -1, -1, -1, -1, -1, 228, 231, 227, 233, 224, 219, 225, 230, 226, 232, 89, 87, -1, 88, 229, 90, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, -1, -1, 101, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 100, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; public static final int[] CODE_MAP = new int[521];
static {
Arrays.fill(CODE_MAP, -1);
CODE_MAP[KeyEvent.VK_BACK_SPACE] = 85;
CODE_MAP[KeyEvent.VK_TAB] = 80;
CODE_MAP[KeyEvent.VK_ENTER] = 84;
//
CODE_MAP[KeyEvent.VK_CLEAR] = 91;
//
CODE_MAP[KeyEvent.VK_SHIFT] = 81;
CODE_MAP[KeyEvent.VK_CONTROL] = 82;
CODE_MAP[KeyEvent.VK_ALT] = 86;
//
CODE_MAP[KeyEvent.VK_ESCAPE] = 13;
//
CODE_MAP[KeyEvent.VK_SPACE] = 83;
CODE_MAP[KeyEvent.VK_PAGE_UP] = 104;
CODE_MAP[KeyEvent.VK_PAGE_DOWN] = 105;
CODE_MAP[KeyEvent.VK_END] = 103;
CODE_MAP[KeyEvent.VK_HOME] = 102;
CODE_MAP[KeyEvent.VK_LEFT] = 96;
CODE_MAP[KeyEvent.VK_UP] = 98;
CODE_MAP[KeyEvent.VK_RIGHT] = 97;
CODE_MAP[KeyEvent.VK_DOWN] = 99;
//
CODE_MAP[KeyEvent.VK_0] = 25;
CODE_MAP[KeyEvent.VK_1] = 16;
CODE_MAP[KeyEvent.VK_2] = 17;
CODE_MAP[KeyEvent.VK_3] = 18;
CODE_MAP[KeyEvent.VK_4] = 19;
CODE_MAP[KeyEvent.VK_5] = 20;
CODE_MAP[KeyEvent.VK_6] = 21;
CODE_MAP[KeyEvent.VK_7] = 22;
CODE_MAP[KeyEvent.VK_8] = 23;
CODE_MAP[KeyEvent.VK_9] = 24;
//
CODE_MAP[KeyEvent.VK_A] = 48;
CODE_MAP[KeyEvent.VK_B] = 68;
CODE_MAP[KeyEvent.VK_C] = 66;
CODE_MAP[KeyEvent.VK_D] = 50;
CODE_MAP[KeyEvent.VK_E] = 34;
CODE_MAP[KeyEvent.VK_F] = 51;
CODE_MAP[KeyEvent.VK_G] = 52;
CODE_MAP[KeyEvent.VK_H] = 53;
CODE_MAP[KeyEvent.VK_I] = 39;
CODE_MAP[KeyEvent.VK_J] = 54;
CODE_MAP[KeyEvent.VK_K] = 55;
CODE_MAP[KeyEvent.VK_L] = 56;
CODE_MAP[KeyEvent.VK_M] = 70;
CODE_MAP[KeyEvent.VK_N] = 69;
CODE_MAP[KeyEvent.VK_O] = 40;
CODE_MAP[KeyEvent.VK_P] = 41;
CODE_MAP[KeyEvent.VK_Q] = 32;
CODE_MAP[KeyEvent.VK_R] = 35;
CODE_MAP[KeyEvent.VK_S] = 49;
CODE_MAP[KeyEvent.VK_T] = 36;
CODE_MAP[KeyEvent.VK_U] = 38;
CODE_MAP[KeyEvent.VK_V] = 67;
CODE_MAP[KeyEvent.VK_W] = 33;
CODE_MAP[KeyEvent.VK_X] = 65;
CODE_MAP[KeyEvent.VK_Y] = 37;
CODE_MAP[KeyEvent.VK_Z] = 64;
//
CODE_MAP[KeyEvent.VK_NUMPAD0] = 228;
CODE_MAP[KeyEvent.VK_NUMPAD1] = 231;
CODE_MAP[KeyEvent.VK_NUMPAD2] = 227;
CODE_MAP[KeyEvent.VK_NUMPAD3] = 233;
CODE_MAP[KeyEvent.VK_NUMPAD4] = 224;
CODE_MAP[KeyEvent.VK_NUMPAD5] = 219;
CODE_MAP[KeyEvent.VK_NUMPAD6] = 225;
CODE_MAP[KeyEvent.VK_NUMPAD7] = 230;
CODE_MAP[KeyEvent.VK_NUMPAD8] = 226;
CODE_MAP[KeyEvent.VK_NUMPAD9] = 232;
CODE_MAP[KeyEvent.VK_MULTIPLY] = 89;
CODE_MAP[KeyEvent.VK_ADD] = 87;
//
CODE_MAP[KeyEvent.VK_SUBTRACT] = 88;
CODE_MAP[KeyEvent.VK_DECIMAL] = 229;
CODE_MAP[KeyEvent.VK_DIVIDE] = 90;
CODE_MAP[KeyEvent.VK_F1] = 1;
CODE_MAP[KeyEvent.VK_F2] = 2;
CODE_MAP[KeyEvent.VK_F3] = 3;
CODE_MAP[KeyEvent.VK_F4] = 4;
CODE_MAP[KeyEvent.VK_F5] = 5;
CODE_MAP[KeyEvent.VK_F6] = 6;
CODE_MAP[KeyEvent.VK_F7] = 7;
CODE_MAP[KeyEvent.VK_F8] = 8;
CODE_MAP[KeyEvent.VK_F9] = 9;
CODE_MAP[KeyEvent.VK_F10] = 10;
CODE_MAP[KeyEvent.VK_F11] = 11;
CODE_MAP[KeyEvent.VK_F12] = 12;
//
CODE_MAP[KeyEvent.VK_DELETE] = 101;
//
CODE_MAP[KeyEvent.VK_INSERT] = 100;
}
@OriginalMember(owner = "client!s", name = "e", descriptor = "[I") @OriginalMember(owner = "client!s", name = "e", descriptor = "[I")
public static final int[] typedCodeQueue = new int[128]; public static final int[] typedCodeQueue = new int[128];
@ -97,7 +198,7 @@ public final class Keyboard implements KeyListener, FocusListener {
@OriginalMember(owner = "client!c", name = "d", descriptor = "(I)Z") @OriginalMember(owner = "client!c", name = "d", descriptor = "(I)Z")
public static boolean nextKey() { public static boolean nextKey() {
@Pc(6) Keyboard local6 = instance; @Pc(6) Keyboard keyboard = instance;
synchronized (instance) { synchronized (instance) {
if (prevTypedQueueWriterIndex == typedQueueReaderIndex) { if (prevTypedQueueWriterIndex == typedQueueReaderIndex) {
return false; return false;
@ -123,6 +224,57 @@ public final class Keyboard implements KeyListener, FocusListener {
} }
} }
@OriginalMember(owner = "client!mf", name = "e", descriptor = "(I)V")
public static void init() {
if (SignLink.javaVendor.toLowerCase().contains("microsoft")) {
CODE_MAP[187] = 27;
CODE_MAP[223] = 28;
CODE_MAP[221] = 43;
CODE_MAP[188] = 71;
CODE_MAP[222] = 59;
CODE_MAP[192] = 58;
CODE_MAP[191] = 73;
CODE_MAP[219] = 42;
CODE_MAP[190] = 72;
CODE_MAP[186] = 57;
CODE_MAP[220] = 74;
CODE_MAP[189] = 26;
return;
}
if (SignLink.setFocusTraversalKeysEnabled == null) {
CODE_MAP[KeyEvent.VK_BACK_QUOTE] = 58;
CODE_MAP[KeyEvent.VK_QUOTE] = 59;
} else {
CODE_MAP[KeyEvent.VK_QUOTE] = 58;
CODE_MAP[KeyEvent.VK_BACK_QUOTE] = 28;
CODE_MAP[520] = 59;
}
CODE_MAP[KeyEvent.VK_MINUS] = 26;
CODE_MAP[KeyEvent.VK_EQUALS] = 27;
CODE_MAP[KeyEvent.VK_OPEN_BRACKET] = 42;
CODE_MAP[KeyEvent.VK_SEMICOLON] = 57;
CODE_MAP[KeyEvent.VK_CLOSE_BRACKET] = 43;
CODE_MAP[KeyEvent.VK_COMMA] = 71;
CODE_MAP[KeyEvent.VK_BACK_SLASH] = 74;
CODE_MAP[KeyEvent.VK_PERIOD] = 72;
CODE_MAP[KeyEvent.VK_SLASH] = 73;
}
@OriginalMember(owner = "client!bi", name = "a", descriptor = "(BLjava/awt/Component;)V")
public static void start(@OriginalArg(1) Component component) {
@Pc(10) Method method = SignLink.setFocusTraversalKeysEnabled;
if (method != null) {
try {
method.invoke(component, Boolean.FALSE);
} catch (@Pc(25) Throwable ex) {
}
}
component.addKeyListener(instance);
component.addFocusListener(instance);
}
@OriginalMember(owner = "client!uf", name = "keyPressed", descriptor = "(Ljava/awt/event/KeyEvent;)V") @OriginalMember(owner = "client!uf", name = "keyPressed", descriptor = "(Ljava/awt/event/KeyEvent;)V")
@Override @Override
public final synchronized void keyPressed(@OriginalArg(0) KeyEvent event) { public final synchronized void keyPressed(@OriginalArg(0) KeyEvent event) {
@ -140,6 +292,7 @@ public final class Keyboard implements KeyListener, FocusListener {
} else { } else {
code = -1; code = -1;
} }
if (eventQueueWriterIndex >= 0 && code >= 0) { if (eventQueueWriterIndex >= 0 && code >= 0) {
eventQueue[eventQueueWriterIndex] = code; eventQueue[eventQueueWriterIndex] = code;
eventQueueWriterIndex = eventQueueWriterIndex + 1 & 0x7F; eventQueueWriterIndex = eventQueueWriterIndex + 1 & 0x7F;
@ -147,6 +300,7 @@ public final class Keyboard implements KeyListener, FocusListener {
eventQueueWriterIndex = -1; eventQueueWriterIndex = -1;
} }
} }
if (code >= 0) { if (code >= 0) {
@Pc(68) int index = typedQueueWriterIndex + 1 & 0x7F; @Pc(68) int index = typedQueueWriterIndex + 1 & 0x7F;
if (index != typedQueueReaderIndex) { if (index != typedQueueReaderIndex) {
@ -155,8 +309,9 @@ public final class Keyboard implements KeyListener, FocusListener {
typedQueueWriterIndex = index; typedQueueWriterIndex = index;
} }
} }
int modifiers = event.getModifiers();
if ((modifiers & 0xA) != 0 || code == 85 || code == 10) { int modifiers = event.getModifiersEx();
if ((modifiers & 0xA) != 0 || code == KEY_BACK_SPACE || code == KEY_ENTER) {
event.consume(); event.consume();
} }
} }

View file

@ -115,42 +115,6 @@ public final class Static156 {
} }
} }
@OriginalMember(owner = "client!mf", name = "e", descriptor = "(I)V")
public static void init() {
if (SignLink.javaVendor.toLowerCase().indexOf("microsoft") != -1) {
Keyboard.CODE_MAP[187] = 27;
Keyboard.CODE_MAP[223] = 28;
Keyboard.CODE_MAP[221] = 43;
Keyboard.CODE_MAP[188] = 71;
Keyboard.CODE_MAP[222] = 59;
Keyboard.CODE_MAP[192] = 58;
Keyboard.CODE_MAP[191] = 73;
Keyboard.CODE_MAP[219] = 42;
Keyboard.CODE_MAP[190] = 72;
Keyboard.CODE_MAP[186] = 57;
Keyboard.CODE_MAP[220] = 74;
Keyboard.CODE_MAP[189] = 26;
return;
}
if (SignLink.setFocusTraversalKeysEnabled == null) {
Keyboard.CODE_MAP[192] = 58;
Keyboard.CODE_MAP[222] = 59;
} else {
Keyboard.CODE_MAP[222] = 58;
Keyboard.CODE_MAP[192] = 28;
Keyboard.CODE_MAP[520] = 59;
}
Keyboard.CODE_MAP[45] = 26;
Keyboard.CODE_MAP[61] = 27;
Keyboard.CODE_MAP[91] = 42;
Keyboard.CODE_MAP[59] = 57;
Keyboard.CODE_MAP[93] = 43;
Keyboard.CODE_MAP[44] = 71;
Keyboard.CODE_MAP[92] = 74;
Keyboard.CODE_MAP[46] = 72;
Keyboard.CODE_MAP[47] = 73;
}
@OriginalMember(owner = "client!mf", name = "a", descriptor = "()V") @OriginalMember(owner = "client!mf", name = "a", descriptor = "()V")
public static void method2959() { public static void method2959() {
@Pc(1) GL2 local1 = GlRenderer.gl; @Pc(1) GL2 local1 = GlRenderer.gl;

View file

@ -117,16 +117,4 @@ public final class Static19 {
return local19; return local19;
} }
@OriginalMember(owner = "client!bi", name = "a", descriptor = "(BLjava/awt/Component;)V")
public static void start(@OriginalArg(1) Component arg0) {
@Pc(10) Method local10 = SignLink.setFocusTraversalKeysEnabled;
if (local10 != null) {
try {
local10.invoke(arg0, Boolean.FALSE);
} catch (@Pc(25) Throwable local25) {
}
}
arg0.addKeyListener(Keyboard.instance);
arg0.addFocusListener(Keyboard.instance);
}
} }

View file

@ -99,7 +99,7 @@ public final class Static197 {
Static71.mouseWheel.method3291(GameShell.canvas); Static71.mouseWheel.method3291(GameShell.canvas);
} }
Static215.aClient1.addCanvas(); Static215.aClient1.addCanvas();
Static19.start(GameShell.canvas); Keyboard.start(GameShell.canvas);
Static88.start(GameShell.canvas); Static88.start(GameShell.canvas);
if (Static71.mouseWheel != null) { if (Static71.mouseWheel != null) {
Static71.mouseWheel.start(GameShell.canvas); Static71.mouseWheel.start(GameShell.canvas);

View file

@ -370,8 +370,8 @@ public final class client extends GameShell {
if ((SignLink.anInt5928 == 3 && Static83.modeWhere != 2) || GlobalConfig.SELECT_DEFAULT_WORLD) { if ((SignLink.anInt5928 == 3 && Static83.modeWhere != 2) || GlobalConfig.SELECT_DEFAULT_WORLD) {
Static125.worldId = Static187.worldListId; Static125.worldId = Static187.worldListId;
} }
Static156.init(); // keyboard Keyboard.init(); // keyboard
Static19.start(GameShell.canvas); // keyboard Keyboard.start(GameShell.canvas); // keyboard
Static88.start(GameShell.canvas); // mouse Static88.start(GameShell.canvas); // mouse
Static71.mouseWheel = Static44.create(); Static71.mouseWheel = Static44.create();
if (Static71.mouseWheel != null) { if (Static71.mouseWheel != null) {