6 using System.Collections.Generic;
43 this.KeyCode = keyCode;
44 this.KeyEvent = keyEvent;
47 public override bool Equals(
object obj)
54 KeyCodeEventPair compare = (KeyCodeEventPair)obj;
61 return (KeyCode.GetHashCode() * 100) ^ KeyEvent.GetHashCode();
72 private readonly KeyboardCallback callback;
73 private bool isRegistered;
77 this.keyCodeEvent = keyCodeEvent;
78 this.callback = callback;
89 keyboard.UnregisterKeyEvent(keyCodeEvent, callback);
105 private Dictionary<KeyCodeEventPair, List<KeyboardCallback>> registeredCallbacks
106 =
new Dictionary<KeyCodeEventPair, List<KeyboardCallback>>();
111 private List<KeyCodeEventPair> detectedKeyEvents =
new List<KeyCodeEventPair>();
116 private List<KeyCodeEventPair> pendingKeyEvents =
new List<KeyCodeEventPair>();
118 private void Update()
120 lock (detectedKeyEvents)
122 pendingKeyEvents.AddRange(detectedKeyEvents);
123 detectedKeyEvents.Clear();
129 bool eventTriggered =
false;
134 eventTriggered = Input.GetKey(keyCheck.
KeyCode);
137 eventTriggered = Input.GetKeyDown(keyCheck.
KeyCode);
140 eventTriggered = Input.GetKeyUp(keyCheck.
KeyCode);
146 pendingKeyEvents.Add(keyCheck);
150 for (
int eventIndex = 0; eventIndex < pendingKeyEvents.Count; eventIndex++)
152 HandleKeyEvent(pendingKeyEvents[eventIndex]);
154 pendingKeyEvents.Clear();
160 private void UnregisterKeyEvent(
KeyCodeEventPair keyCodeEvent, KeyboardCallback callback)
162 if (registeredCallbacks.ContainsKey(keyCodeEvent))
164 List<KeyboardCallback> callbackList = registeredCallbacks[keyCodeEvent];
166 if (callbackList.Remove(callback))
169 if (callbackList.Count == 0)
171 registeredCallbacks.Remove(keyCodeEvent);
182 List<KeyboardCallback> callbackList;
184 if (registeredCallbacks.TryGetValue(keyEventPair, out callbackList))
187 KeyboardCallback[] callbacksCopy = callbackList.ToArray();
188 foreach (KeyboardCallback callback
in callbacksCopy)
190 callback(keyEventPair);
195 #region Public Functions 201 if (!registeredCallbacks.ContainsKey(keycodeEvent))
203 registeredCallbacks.Add(keycodeEvent,
new List<KeyboardCallback>());
207 List<KeyboardCallback> callbackList = registeredCallbacks[keycodeEvent];
208 for (
int i = 0; i < callbackList.Count; i++)
210 if (callbackList[i] == callback)
213 Debug.LogError(
"Ignoring duplicate keyboard callback.");
218 callbackList.Add(callback);
230 lock (detectedKeyEvents)
232 detectedKeyEvents.Add(keycodeEvent);