예제 #1
0
        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);
        }
예제 #2
0
        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);
                        }
                    }
                }
            }
        }
예제 #3
0
        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;
                    }
                }
            }
        }