private void CleanInputLocks() { //remove "dead" locks int lowestLockState = int.MaxValue; for (int i = InputLocks.Count - 1; i >= 0; i--) { InputLock iLock = InputLocks[i]; if (IsOwnerAlive(iLock.Owner)) { //try lowest lock if ((int)iLock.Type < lowestLockState) { lowestLockState = (int)iLock.Type; } } else { //remove it InputLocks.RemoveAt(i); } } //drop to new lowest lock state if (lowestLockState < int.MaxValue) { ApplyInputLock((InputLockType)lowestLockState); } else { DoUnlock(); } }
public static InputLock LockControls(InputLockType type, object token) { var iLock = new InputLock(type, token); Instance.AddInputLock(iLock); return(iLock); }
private void AddInputLock(InputLock iLock) { if (InputLockState == null || iLock.Type < InputLockState.Value) { ApplyInputLock(iLock.Type); } InputLocks.Add(iLock); }
private void RemoveInputLock(InputLock iLock) { InputLocks.Remove(iLock); if (InputLocks.Count > 0) { CleanInputLocks(); } else { DoUnlock(); } }