1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
package NET.worlds.scape;
import NET.worlds.core.Std;
public class EventQueue {
private static final int keyDown = 1;
private static final int keyUp = 2;
private static final int keyChar = 3;
private static final int mouseDown = 4;
private static final int mouseUp = 5;
private static final int mouseMove = 6;
private static final int mouseDelta = 7;
private static final int mouseEnter = 8;
private static final int mouseExit = 9;
private static final int teleport = 10;
private char key;
private int type;
private int time;
private int x;
private int y;
private static EventQueue dequeueInfo = new EventQueue();
static {
nativeInit();
}
public static void pollForEvents(Camera eventEater) {
if (eventEater != null) {
int eventCount = getEventCount();
Event e;
while (eventCount-- > 0 && (e = dequeueInfo.dequeue()) != null) {
if (e.target == null) {
e.target = eventEater;
}
eventEater.deliver(e);
}
}
}
public static boolean redirectDrivingKeys(java.awt.Event e) {
boolean press;
if (!(press = e.id == 403) && e.id != 404) {
return false;
} else {
char newKey;
switch (e.key) {
case 27:
newKey = '\ue31b';
break;
case 1000:
newKey = '\ue324';
break;
case 1001:
newKey = '\ue323';
break;
case 1002:
newKey = '\ue321';
break;
case 1003:
newKey = '\ue322';
break;
case 1004:
newKey = '\ue326';
break;
case 1005:
newKey = '\ue328';
break;
case 1006:
newKey = '\ue325';
break;
case 1007:
newKey = '\ue327';
break;
default:
return false;
}
addEvent(newKey, press ? 1 : 2, Std.getTimeZero() + Std.getRealTime(), e.x, e.y);
return true;
}
}
private EventQueue() {
}
private Event dequeue() {
if (this.getNextEvent()) {
this.time = this.time - Std.getTimeZero();
switch (this.type) {
case 1:
return new KeyDownEvent(this.time, null, this.key);
case 2:
return new KeyUpEvent(this.time, null, this.key);
case 3:
return new KeyCharEvent(this.time, null, this.key);
case 4:
return new MouseDownEvent(this.time, null, this.key, this.x, this.y);
case 5:
return new MouseUpEvent(this.time, null, this.key, this.x, this.y);
case 6:
return new MouseMoveEvent(this.time, null, this.x, this.y);
case 7:
return new MouseDeltaEvent(this.time, null, this.x, this.y);
case 8:
return new MouseEnterEvent(this.time, null, this.x, this.y);
case 9:
return new MouseExitEvent(this.time, null, this.x, this.y);
default:
throw new Error("Illegal internal event type");
}
} else {
return null;
}
}
public static native void nativeInit();
private native boolean getNextEvent();
private static native int getEventCount();
private static native void addEvent(char var0, int var1, int var2, int var3, int var4);
}
|