summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/EventQueue.java
diff options
context:
space:
mode:
Diffstat (limited to 'NET/worlds/scape/EventQueue.java')
-rw-r--r--NET/worlds/scape/EventQueue.java125
1 files changed, 125 insertions, 0 deletions
diff --git a/NET/worlds/scape/EventQueue.java b/NET/worlds/scape/EventQueue.java
new file mode 100644
index 0000000..83008d3
--- /dev/null
+++ b/NET/worlds/scape/EventQueue.java
@@ -0,0 +1,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);
+}