コード例 #1
0
        protected override void OnUpdateFrame(FrameEventArgs e)
        {
            HidControllerKeys CurrentButton = 0;
            JoystickPosition  LeftJoystick;
            JoystickPosition  RightJoystick;


            if (Keyboard[OpenTK.Input.Key.Escape])
            {
                this.Exit();
            }

            //RightJoystick
            int LeftJoystickDX = 0;
            int LeftJoystickDY = 0;

            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.StickUp])
            {
                LeftJoystickDY = short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.StickDown])
            {
                LeftJoystickDY = -short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.StickLeft])
            {
                LeftJoystickDX = -short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.StickRight])
            {
                LeftJoystickDX = short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.StickButton])
            {
                CurrentButton |= HidControllerKeys.KEY_LSTICK;
            }

            //LeftButtons
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.DPadUp])
            {
                CurrentButton |= HidControllerKeys.KEY_DUP;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.DPadDown])
            {
                CurrentButton |= HidControllerKeys.KEY_DDOWN;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.DPadLeft])
            {
                CurrentButton |= HidControllerKeys.KEY_DLEFT;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.DPadRight])
            {
                CurrentButton |= HidControllerKeys.KEY_DRIGHT;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.ButtonMinus])
            {
                CurrentButton |= HidControllerKeys.KEY_MINUS;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.ButtonL])
            {
                CurrentButton |= HidControllerKeys.KEY_L;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Left.ButtonZL])
            {
                CurrentButton |= HidControllerKeys.KEY_ZL;
            }

            //RightJoystick
            int RightJoystickDX = 0;
            int RightJoystickDY = 0;

            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.StickUp])
            {
                RightJoystickDY = short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.StickDown])
            {
                RightJoystickDY = -short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.StickLeft])
            {
                RightJoystickDX = -short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.StickRight])
            {
                RightJoystickDX = short.MaxValue;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.StickButton])
            {
                CurrentButton |= HidControllerKeys.KEY_RSTICK;
            }

            //RightButtons
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonA])
            {
                CurrentButton |= HidControllerKeys.KEY_A;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonB])
            {
                CurrentButton |= HidControllerKeys.KEY_B;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonX])
            {
                CurrentButton |= HidControllerKeys.KEY_X;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonY])
            {
                CurrentButton |= HidControllerKeys.KEY_Y;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonPlus])
            {
                CurrentButton |= HidControllerKeys.KEY_PLUS;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonR])
            {
                CurrentButton |= HidControllerKeys.KEY_R;
            }
            if (Keyboard[(OpenTK.Input.Key)Config.FakeJoyCon.Right.ButtonZR])
            {
                CurrentButton |= HidControllerKeys.KEY_ZR;
            }

            LeftJoystick = new JoystickPosition
            {
                DX = LeftJoystickDX,
                DY = LeftJoystickDY
            };

            RightJoystick = new JoystickPosition
            {
                DX = RightJoystickDX,
                DY = RightJoystickDY
            };

            //Get screen touch position from left mouse click
            //Opentk always captures mouse events, even if out of focus, so check if window is focused.
            if (Mouse != null && Focused)
            {
                if (Mouse.GetState().LeftButton == OpenTK.Input.ButtonState.Pressed)
                {
                    HidTouchScreenEntryTouch CurrentPoint = new HidTouchScreenEntryTouch
                    {
                        Timestamp = (uint)Environment.TickCount,
                        X         = (uint)Mouse.X,
                        Y         = (uint)Mouse.Y,

                        //Placeholder values till more data is acquired
                        DiameterX = 10,
                        DiameterY = 10,
                        Angle     = 90,

                        //Only support single touch
                        TouchIndex = 0,
                    };
                    if (Mouse.X > -1 && Mouse.Y > -1)
                    {
                        Ns.SendTouchScreenEntry(CurrentPoint);
                    }
                }
            }

            //We just need one pair of JoyCon because it's emulate by the keyboard.
            Ns.SendControllerButtons(HidControllerID.CONTROLLER_HANDHELD, HidControllerLayouts.Main, CurrentButton, LeftJoystick, RightJoystick);
        }