if (hotKeyMap == null) { Debug.LogWarning($"HotKeyMap is null"); returnfalse; }
if (hotKeyMap.currentKeyCodes.Count == 0) { returnfalse; }
if (hotKeyMap.currentKeyCodes.Count == 1) { if (hotKeyMap.hold) { if (Input.GetKey(hotKeyMap.currentKeyCodes[0])) { returntrue; } } else { if (Input.GetKeyDown(hotKeyMap.currentKeyCodes[0])) { returntrue; } }
returnfalse; } else { if (Input.GetKey(hotKeyMap.currentKeyCodes[0])) { var allKeyPressed = true;
foreach (KeyCode keyCode in hotKeyMap.currentKeyCodes) { if (keyCode == hotKeyMap.currentKeyCodes[0]) { continue; }
if (!Input.GetKey(keyCode)) { allKeyPressed = false; break; } }
return allKeyPressed; } }
returnfalse; }
///<summary> /// 设置热键 ///</summary> ///<param name="key"></param> ///<param name="keyCodes"></param> ///<param name="force"></param> ///<returns></returns> publicboolSetHotKey(HotKey key, List<KeyCode> keyCodes, bool force = false) { if (HotKeyMaps.TryGetValue(key, out HotKeyMap hotKeyMap)) { var res = CheckHotKeyRepeat(key, keyCodes); if (res.Item2 != null && force) { res.Item2.RestKeys(); hotKeyMap.currentKeyCodes = keyCodes; returntrue; } elseif (res.Item1) { hotKeyMap.currentKeyCodes = keyCodes; returntrue; } elseif (res.Item2!=null) { Debug.LogWarning($"{hotKeyMap.key} 与热键重复:{res.Item2.key}"); returnfalse; } }
returnfalse; }
///<summary> /// 检查热键是否重复 ///</summary> ///<param name="key"></param> ///<param name="keyCodes"></param> ///<returns>(结果,重复map)</returns> public (bool, HotKeyMap) CheckHotKeyRepeat(HotKey key, List<KeyCode> keyCodes) { if (HotKeyMaps.TryGetValue(key, out HotKeyMap hotKeyMap)) { var list = HotKeyMaps.Values.ToList(); foreach (var cur in list) { if (key == cur.key) { continue; }
if (cur.IsRepeat(keyCodes.ToList())) { return (true, cur); } } }