diff options
| author | Fuwn <[email protected]> | 2026-02-12 22:33:32 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-12 22:33:32 -0800 |
| commit | c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 (patch) | |
| tree | df9f48bf128a6c0186a8e91857d6ff30fe0e9f18 /NET/worlds/scape/EventQueue.java | |
| download | worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip | |
Initial commit
Diffstat (limited to 'NET/worlds/scape/EventQueue.java')
| -rw-r--r-- | NET/worlds/scape/EventQueue.java | 125 |
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); +} |