private WaitLock StartWait(KeyCode keyCode = KeyCode.Space) { var waitLock = new WaitLock(); StartCoroutine(WaitForInput(waitLock, keyCode)); return(waitLock); }
private IEnumerator WaitForInput(WaitLock waitLock, KeyCode keyCode = KeyCode.Space) { ShowWaitIcon(); yield return(new WaitForEndOfFrame()); yield return(new WaitUntil(() => Input.GetKeyUp(keyCode))); HideWaitIcon(); waitLock.Complete = true; }
private static void DecrementReference(string key, WaitLock waitLock) { lock (_referenceCountLock) { waitLock.NumberOfReferences--; if (waitLock.NumberOfReferences <= 0) { keys.Remove(key); } } }
private static WaitLock GetAndIncrementReference(string key) { lock (_referenceCountLock) { WaitLock waitLock = null; if (!keys.TryGetValue(key, out waitLock)) { waitLock = new WaitLock(); keys.Add(key, waitLock); } waitLock.NumberOfReferences++; return(waitLock); } }
public static void On(string key, Action action) { WaitLock waitLock = GetAndIncrementReference(key); try { lock (waitLock) { action(); } } finally { DecrementReference(key, waitLock); } }