/// <summary> /// 设置对应按键信息 /// </summary> /// <param name="key">组合后的按键数字,注意不可以复合组合</param> /// <param name="target">对应的数据对象</param> /// <param name="keyContactDataZone">按键分组(默认为常规)</param> public void SetKeyContactStruct(int key, KeyContactStruct target, EnumKeyContactDataZone keyContactDataZone = EnumKeyContactDataZone.Normal) { if (target.key == 0) target.key = key; if (!keyContactStructs.ContainsKey(keyContactDataZone)) keyContactStructs.Add(keyContactDataZone, new Dictionary<int, KeyContactStruct>()); if (keyContactStructs[keyContactDataZone].ContainsKey(key)) keyContactStructs[keyContactDataZone][key] = target; else keyContactStructs[keyContactDataZone].Add(key, target); }
/// <summary> /// 通过按键获取对应按键信息的数组 /// </summary> /// <param name="key">组合后的按键数字</param> /// <param name="selecter">选择器</param> /// <param name="keyContactDataZone">按键分组(默认为常规)</param> /// <returns></returns> public KeyContactStruct[] GetKeyContactStruct(int key, Func<KeyContactStruct, bool> selecter = null, EnumKeyContactDataZone keyContactDataZone = EnumKeyContactDataZone.Normal) { Func<int, KeyContactStruct> GetSpecificTarget = (_key) => { if (!keyContactStructs.ContainsKey(keyContactDataZone)) keyContactStructs.Add(keyContactDataZone, new Dictionary<int, KeyContactStruct>()); if (keyContactStructs[keyContactDataZone].ContainsKey(_key)) return keyContactStructs[keyContactDataZone][key]; else { KeyContactStruct tempKeyContactStruct = new KeyContactStruct(); tempKeyContactStruct.keyContactType = EnumKeyContactType.None; tempKeyContactStruct.id = -1; tempKeyContactStruct.key = _key; tempKeyContactStruct.name = ""; return tempKeyContactStruct; } }; List<KeyContactStruct> tempKeyContactStructs = new List<KeyContactStruct>(); if (key >= (int)EnumInputType.Start)//功能键 { tempKeyContactStructs.Add(GetSpecificTarget(key)); } else { //表示本功能键 除了L1 L2 R1 R2 左右摇杆外的其他键 int baseFunctionKey = key % 16; //附加功能键 L1 L2 R1 R2 int addFunctionKey = key - baseFunctionKey; bool l1 = ((addFunctionKey / L1) % 2) == 1;//是否按下了L1键 bool r1 = ((addFunctionKey / R1) % 2) == 1;//是否按下了R1键 bool l2 = ((addFunctionKey / L2) % 2) == 1;//是否按下了L2键 bool r2 = ((addFunctionKey / R2) % 2) == 1;//是否按下了R2键 if (l1) tempKeyContactStructs.Add(GetSpecificTarget(L1 + baseFunctionKey)); if (r1) tempKeyContactStructs.Add(GetSpecificTarget(R1 + baseFunctionKey)); if (l2) tempKeyContactStructs.Add(GetSpecificTarget(L2 + baseFunctionKey)); if (r2) tempKeyContactStructs.Add(GetSpecificTarget(R2 + baseFunctionKey)); if (!l1 && !l2 && !r1 && !r2) tempKeyContactStructs.Add(GetSpecificTarget(baseFunctionKey)); tempKeyContactStructs.RemoveAll(temp => temp.keyContactType == EnumKeyContactType.None); } if (selecter != null) tempKeyContactStructs.RemoveAll(temp => !selecter(temp)); return tempKeyContactStructs.ToArray(); }