summaryrefslogtreecommitdiff
path: root/NET/worlds/scape/EventQueue.java
blob: 83008d367ff63baf91125f2550690ee2bb8e9609 (plain) (blame)
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);
}