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); }