public List <byte> GenerateBinaryCommand(Keyboard board) { var preArr = new List <byte>(); preArr.Add(0); //message key preArr.Add(1); //message key preArr.Add(2); //message key preArr.Add(3); //message key preArr.Add(4); //message type (load layout and mod data) // generate main key layout int commandType = 0; if (board.Commands[0] == "uniqueksetsubkey") { commandType = 1; } var arr = new List <byte>(); for (int k = 0; k < KeyDatas.Select(ele => ele.Z).Max() + 1; k++) { for (int i = 0; i < board.YCount; i++) { for (int j = 0; j < board.XCount; j++) { var result = KeyDatas.Where(ele => ele.X == j && ele.Y == i && ele.Z == k && ele.Command == commandType).ToList(); if (result.Count > 0) { arr.Add(result[0].Key.ValScan); arr.Add(result[0].Key.KeyType); } else { arr.Add(0); arr.Add(0); } } } } //TODO: add mod handling here while (arr.Count < board.MaxEEPROM) { arr.Add(0); } // end of main layout //TODO: generate sub layout var output = new List <byte>(); output.AddRange(preArr); output.AddRange(arr); return(output); }
protected override void DoCollect() { foreach (var data in collection) { var userInputKeys = GetKeyList(data); foreach (var inputKey in userInputKeys) { var keys = keyConverter.Convert(inputKey); foreach (var keyConvertItem in keys) { var state = keyConvertItem.State; //移动消息直接响应 if (state == UserInputState.PointerMove) { KeyDatas.Enqueue(MakeKeyData(inputKey, 0, Input.mousePosition)); break; } if (state == UserInputState.PointerRaycast) { ignoreHit.Clear(); RaycastHit hitTarget; if (!GetHitTarget(keyConvertItem.FloatParam, out hitTarget, inputKey)) { continue; } var target = hitTarget.transform.GetComponent <RayCastTarget>(); if (null == target) { continue; } //if (!target.KeyList.Contains(inputKey)) continue; var pointerData = MakeKeyData(inputKey, 0, hitTarget.point); SetRaycastTargetData(pointerData, target); KeyDatas.Enqueue(pointerData); } } } } }
protected override void DoCollect() { //没有按键按下的时候不执行收集操作 if (!Input.anyKey && !Input.anyKeyDown) { //return;//没有anyKeyUp,会导致问题,暂时不优化,有性能问题再考虑分离keyup事件 } foreach (var data in collection) { List <UserInputKey> userInputKeys = GetKeyList(data); foreach (UserInputKey inputKey in userInputKeys) { // 一个行为可以绑定到多个按键,比如按回车和小键盘的回车做同一件事 List <KeyConvertItem> keys = keyConverter.Convert(inputKey); foreach (var keyConvertItem in keys) { var state = keyConvertItem.State; //按键消息需要检测是否响应 Func <KeyCode, bool> keyAction = null; Func <string, bool> buttonAction = null; Func <string, Luminosity.IO.PlayerID, float> axisAction = null; switch (state) { case UserInputState.KeyDown: keyAction = Luminosity.IO.InputManager.GetKeyDown; break; case UserInputState.KeyHold: keyAction = Luminosity.IO.InputManager.GetKey; break; case UserInputState.KeyUp: keyAction = Luminosity.IO.InputManager.GetKeyUp; break; case UserInputState.ButtonDown: buttonAction = Luminosity.IO.InputManager.GetButtonDown; break; case UserInputState.ButtonUp: buttonAction = Luminosity.IO.InputManager.GetButtonUp; break; case UserInputState.ButtonHold: buttonAction = Luminosity.IO.InputManager.GetButton; break; case UserInputState.Axis: axisAction = Luminosity.IO.InputManager.GetAxis; break; case UserInputState.AxisRow: axisAction = Luminosity.IO.InputManager.GetAxisRaw; break; } if (null != keyAction) { if (!keyAction(keyConvertItem.Key)) { continue; } } if (null != buttonAction) { if (!buttonAction(keyConvertItem.InputKey)) { continue; } } float axis = 0; if (null != axisAction) { axis = axisAction(keyConvertItem.InputKey, Luminosity.IO.PlayerID.One); } var keydata = MakeKeyData(inputKey, axis); KeyDatas.Enqueue(keydata); // 只要有一个条件满足就如队列,后续条件就不判断了 break; } } } }