|
@@ -4,6 +4,7 @@ using OpenTK.Input;
|
|
|
using Ryujinx.Graphics.Gal;
|
|
using Ryujinx.Graphics.Gal;
|
|
|
using Ryujinx.HLE;
|
|
using Ryujinx.HLE;
|
|
|
using Ryujinx.HLE.Input;
|
|
using Ryujinx.HLE.Input;
|
|
|
|
|
+using Ryujinx.UI.Input;
|
|
|
using System;
|
|
using System;
|
|
|
using System.Threading;
|
|
using System.Threading;
|
|
|
|
|
|
|
@@ -16,9 +17,6 @@ namespace Ryujinx
|
|
|
private const int TouchScreenWidth = 1280;
|
|
private const int TouchScreenWidth = 1280;
|
|
|
private const int TouchScreenHeight = 720;
|
|
private const int TouchScreenHeight = 720;
|
|
|
|
|
|
|
|
- private const float TouchScreenRatioX = (float)TouchScreenWidth / TouchScreenHeight;
|
|
|
|
|
- private const float TouchScreenRatioY = (float)TouchScreenHeight / TouchScreenWidth;
|
|
|
|
|
-
|
|
|
|
|
private const int TargetFPS = 60;
|
|
private const int TargetFPS = 60;
|
|
|
|
|
|
|
|
private Switch Ns;
|
|
private Switch Ns;
|
|
@@ -49,10 +47,6 @@ namespace Ryujinx
|
|
|
Location = new Point(
|
|
Location = new Point(
|
|
|
(DisplayDevice.Default.Width / 2) - (Width / 2),
|
|
(DisplayDevice.Default.Width / 2) - (Width / 2),
|
|
|
(DisplayDevice.Default.Height / 2) - (Height / 2));
|
|
(DisplayDevice.Default.Height / 2) - (Height / 2));
|
|
|
-
|
|
|
|
|
- ResizeEvent = false;
|
|
|
|
|
-
|
|
|
|
|
- TitleEvent = false;
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void RenderLoop()
|
|
private void RenderLoop()
|
|
@@ -127,60 +121,9 @@ namespace Ryujinx
|
|
|
Title = NewTitle;
|
|
Title = NewTitle;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private bool IsGamePadButtonPressedFromString(GamePadState GamePad, string Button)
|
|
|
|
|
- {
|
|
|
|
|
- if (Button.ToUpper() == "LTRIGGER" || Button.ToUpper() == "RTRIGGER")
|
|
|
|
|
- {
|
|
|
|
|
- return GetGamePadTriggerFromString(GamePad, Button) >= Config.GamePadTriggerThreshold;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- return (GetGamePadButtonFromString(GamePad, Button) == ButtonState.Pressed);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private ButtonState GetGamePadButtonFromString(GamePadState GamePad, string Button)
|
|
|
|
|
- {
|
|
|
|
|
- switch (Button.ToUpper())
|
|
|
|
|
- {
|
|
|
|
|
- case "A": return GamePad.Buttons.A;
|
|
|
|
|
- case "B": return GamePad.Buttons.B;
|
|
|
|
|
- case "X": return GamePad.Buttons.X;
|
|
|
|
|
- case "Y": return GamePad.Buttons.Y;
|
|
|
|
|
- case "LSTICK": return GamePad.Buttons.LeftStick;
|
|
|
|
|
- case "RSTICK": return GamePad.Buttons.RightStick;
|
|
|
|
|
- case "LSHOULDER": return GamePad.Buttons.LeftShoulder;
|
|
|
|
|
- case "RSHOULDER": return GamePad.Buttons.RightShoulder;
|
|
|
|
|
- case "DPADUP": return GamePad.DPad.Up;
|
|
|
|
|
- case "DPADDOWN": return GamePad.DPad.Down;
|
|
|
|
|
- case "DPADLEFT": return GamePad.DPad.Left;
|
|
|
|
|
- case "DPADRIGHT": return GamePad.DPad.Right;
|
|
|
|
|
- case "START": return GamePad.Buttons.Start;
|
|
|
|
|
- case "BACK": return GamePad.Buttons.Back;
|
|
|
|
|
- default: throw new ArgumentException();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- private float GetGamePadTriggerFromString(GamePadState GamePad, string Trigger)
|
|
|
|
|
- {
|
|
|
|
|
- switch (Trigger.ToUpper())
|
|
|
|
|
- {
|
|
|
|
|
- case "LTRIGGER": return GamePad.Triggers.Left;
|
|
|
|
|
- case "RTRIGGER": return GamePad.Triggers.Right;
|
|
|
|
|
- default: throw new ArgumentException();
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- private Vector2 GetJoystickAxisFromString(GamePadState GamePad, string Joystick)
|
|
|
|
|
- {
|
|
|
|
|
- switch (Joystick.ToUpper())
|
|
|
|
|
- {
|
|
|
|
|
- case "LJOYSTICK": return GamePad.ThumbSticks.Left;
|
|
|
|
|
- case "RJOYSTICK": return new Vector2(-GamePad.ThumbSticks.Right.Y, -GamePad.ThumbSticks.Right.X);
|
|
|
|
|
- default: throw new ArgumentException();
|
|
|
|
|
|
|
+ //Polling becomes expensive if it's not slept
|
|
|
|
|
+ Thread.Sleep(1);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -190,95 +133,37 @@ namespace Ryujinx
|
|
|
HidJoystickPosition LeftJoystick;
|
|
HidJoystickPosition LeftJoystick;
|
|
|
HidJoystickPosition RightJoystick;
|
|
HidJoystickPosition RightJoystick;
|
|
|
|
|
|
|
|
- int LeftJoystickDX = 0;
|
|
|
|
|
- int LeftJoystickDY = 0;
|
|
|
|
|
- int RightJoystickDX = 0;
|
|
|
|
|
- int RightJoystickDY = 0;
|
|
|
|
|
- float AnalogStickDeadzone = Config.GamePadDeadzone;
|
|
|
|
|
|
|
+ int LeftJoystickDX = 0;
|
|
|
|
|
+ int LeftJoystickDY = 0;
|
|
|
|
|
+ int RightJoystickDX = 0;
|
|
|
|
|
+ int RightJoystickDY = 0;
|
|
|
|
|
|
|
|
//Keyboard Input
|
|
//Keyboard Input
|
|
|
if (Keyboard.HasValue)
|
|
if (Keyboard.HasValue)
|
|
|
{
|
|
{
|
|
|
KeyboardState Keyboard = this.Keyboard.Value;
|
|
KeyboardState Keyboard = this.Keyboard.Value;
|
|
|
|
|
|
|
|
- if (Keyboard[Key.Escape]) this.Exit();
|
|
|
|
|
-
|
|
|
|
|
- //LeftJoystick
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.StickUp]) LeftJoystickDY = short.MaxValue;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.StickDown]) LeftJoystickDY = -short.MaxValue;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.StickLeft]) LeftJoystickDX = -short.MaxValue;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.StickRight]) LeftJoystickDX = short.MaxValue;
|
|
|
|
|
-
|
|
|
|
|
- //LeftButtons
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.StickButton]) CurrentButton |= HidControllerButtons.KEY_LSTICK;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.DPadUp]) CurrentButton |= HidControllerButtons.KEY_DUP;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.DPadDown]) CurrentButton |= HidControllerButtons.KEY_DDOWN;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.DPadLeft]) CurrentButton |= HidControllerButtons.KEY_DLEFT;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.DPadRight]) CurrentButton |= HidControllerButtons.KEY_DRIGHT;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.ButtonMinus]) CurrentButton |= HidControllerButtons.KEY_MINUS;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.ButtonL]) CurrentButton |= HidControllerButtons.KEY_L;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Left.ButtonZL]) CurrentButton |= HidControllerButtons.KEY_ZL;
|
|
|
|
|
-
|
|
|
|
|
- //RightJoystick
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.StickUp]) RightJoystickDY = short.MaxValue;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.StickDown]) RightJoystickDY = -short.MaxValue;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.StickLeft]) RightJoystickDX = -short.MaxValue;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.StickRight]) RightJoystickDX = short.MaxValue;
|
|
|
|
|
-
|
|
|
|
|
- //RightButtons
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.StickButton]) CurrentButton |= HidControllerButtons.KEY_RSTICK;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonA]) CurrentButton |= HidControllerButtons.KEY_A;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonB]) CurrentButton |= HidControllerButtons.KEY_B;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonX]) CurrentButton |= HidControllerButtons.KEY_X;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonY]) CurrentButton |= HidControllerButtons.KEY_Y;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonPlus]) CurrentButton |= HidControllerButtons.KEY_PLUS;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonR]) CurrentButton |= HidControllerButtons.KEY_R;
|
|
|
|
|
- if (Keyboard[(Key)Config.JoyConKeyboard.Right.ButtonZR]) CurrentButton |= HidControllerButtons.KEY_ZR;
|
|
|
|
|
|
|
+ CurrentButton = Config.JoyConKeyboard.GetButtons(Keyboard);
|
|
|
|
|
+
|
|
|
|
|
+ (LeftJoystickDX, LeftJoystickDY) = Config.JoyConKeyboard.GetLeftStick(Keyboard);
|
|
|
|
|
+
|
|
|
|
|
+ (RightJoystickDX, RightJoystickDY) = Config.JoyConKeyboard.GetRightStick(Keyboard);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//Controller Input
|
|
//Controller Input
|
|
|
- if (Config.GamePadEnable)
|
|
|
|
|
|
|
+ CurrentButton |= Config.JoyConController.GetButtons();
|
|
|
|
|
+
|
|
|
|
|
+ //Keyboard has priority stick-wise
|
|
|
|
|
+ if (LeftJoystickDX == 0 && LeftJoystickDY == 0)
|
|
|
{
|
|
{
|
|
|
- GamePadState GamePad = OpenTK.Input.GamePad.GetState(Config.GamePadIndex);
|
|
|
|
|
- //LeftButtons
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.DPadUp)) CurrentButton |= HidControllerButtons.KEY_DUP;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.DPadDown)) CurrentButton |= HidControllerButtons.KEY_DDOWN;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.DPadLeft)) CurrentButton |= HidControllerButtons.KEY_DLEFT;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.DPadRight)) CurrentButton |= HidControllerButtons.KEY_DRIGHT;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.StickButton)) CurrentButton |= HidControllerButtons.KEY_LSTICK;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.ButtonMinus)) CurrentButton |= HidControllerButtons.KEY_MINUS;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.ButtonL)) CurrentButton |= HidControllerButtons.KEY_L;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Left.ButtonZL)) CurrentButton |= HidControllerButtons.KEY_ZL;
|
|
|
|
|
-
|
|
|
|
|
- //RightButtons
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonA)) CurrentButton |= HidControllerButtons.KEY_A;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonB)) CurrentButton |= HidControllerButtons.KEY_B;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonX)) CurrentButton |= HidControllerButtons.KEY_X;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonY)) CurrentButton |= HidControllerButtons.KEY_Y;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.StickButton)) CurrentButton |= HidControllerButtons.KEY_RSTICK;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonPlus)) CurrentButton |= HidControllerButtons.KEY_PLUS;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonR)) CurrentButton |= HidControllerButtons.KEY_R;
|
|
|
|
|
- if (IsGamePadButtonPressedFromString(GamePad, Config.JoyConController.Right.ButtonZR)) CurrentButton |= HidControllerButtons.KEY_ZR;
|
|
|
|
|
-
|
|
|
|
|
- //LeftJoystick
|
|
|
|
|
- if (GetJoystickAxisFromString(GamePad, Config.JoyConController.Left.Stick).X >= AnalogStickDeadzone
|
|
|
|
|
- || GetJoystickAxisFromString(GamePad, Config.JoyConController.Left.Stick).X <= -AnalogStickDeadzone)
|
|
|
|
|
- LeftJoystickDX = (int)(GetJoystickAxisFromString(GamePad, Config.JoyConController.Left.Stick).X * short.MaxValue);
|
|
|
|
|
-
|
|
|
|
|
- if (GetJoystickAxisFromString(GamePad, Config.JoyConController.Left.Stick).Y >= AnalogStickDeadzone
|
|
|
|
|
- || GetJoystickAxisFromString(GamePad, Config.JoyConController.Left.Stick).Y <= -AnalogStickDeadzone)
|
|
|
|
|
- LeftJoystickDY = (int)(GetJoystickAxisFromString(GamePad, Config.JoyConController.Left.Stick).Y * short.MaxValue);
|
|
|
|
|
-
|
|
|
|
|
- //RightJoystick
|
|
|
|
|
- if (GetJoystickAxisFromString(GamePad, Config.JoyConController.Right.Stick).X >= AnalogStickDeadzone
|
|
|
|
|
- || GetJoystickAxisFromString(GamePad, Config.JoyConController.Right.Stick).X <= -AnalogStickDeadzone)
|
|
|
|
|
- RightJoystickDX = (int)(GetJoystickAxisFromString(GamePad, Config.JoyConController.Right.Stick).X * short.MaxValue);
|
|
|
|
|
-
|
|
|
|
|
- if (GetJoystickAxisFromString(GamePad, Config.JoyConController.Right.Stick).Y >= AnalogStickDeadzone
|
|
|
|
|
- || GetJoystickAxisFromString(GamePad, Config.JoyConController.Right.Stick).Y <= -AnalogStickDeadzone)
|
|
|
|
|
- RightJoystickDY = (int)(GetJoystickAxisFromString(GamePad, Config.JoyConController.Right.Stick).Y * short.MaxValue);
|
|
|
|
|
|
|
+ (LeftJoystickDX, LeftJoystickDY) = Config.JoyConController.GetLeftStick();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (RightJoystickDX == 0 && RightJoystickDY == 0)
|
|
|
|
|
+ {
|
|
|
|
|
+ (RightJoystickDX, RightJoystickDY) = Config.JoyConController.GetRightStick();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
LeftJoystick = new HidJoystickPosition
|
|
LeftJoystick = new HidJoystickPosition
|
|
|
{
|
|
{
|
|
|
DX = LeftJoystickDX,
|
|
DX = LeftJoystickDX,
|
|
@@ -302,13 +187,13 @@ namespace Ryujinx
|
|
|
int ScrnWidth = Width;
|
|
int ScrnWidth = Width;
|
|
|
int ScrnHeight = Height;
|
|
int ScrnHeight = Height;
|
|
|
|
|
|
|
|
- if (Width > Height * TouchScreenRatioX)
|
|
|
|
|
|
|
+ if (Width > (Height * TouchScreenWidth) / TouchScreenHeight)
|
|
|
{
|
|
{
|
|
|
- ScrnWidth = (int)(Height * TouchScreenRatioX);
|
|
|
|
|
|
|
+ ScrnWidth = (Height * TouchScreenWidth) / TouchScreenHeight;
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- ScrnHeight = (int)(Width * TouchScreenRatioY);
|
|
|
|
|
|
|
+ ScrnHeight = (Width * TouchScreenHeight) / TouchScreenWidth;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
int StartX = (Width - ScrnWidth) >> 1;
|
|
int StartX = (Width - ScrnWidth) >> 1;
|
|
@@ -325,8 +210,8 @@ namespace Ryujinx
|
|
|
int ScrnMouseX = Mouse.X - StartX;
|
|
int ScrnMouseX = Mouse.X - StartX;
|
|
|
int ScrnMouseY = Mouse.Y - StartY;
|
|
int ScrnMouseY = Mouse.Y - StartY;
|
|
|
|
|
|
|
|
- int MX = (int)(((float)ScrnMouseX / ScrnWidth) * TouchScreenWidth);
|
|
|
|
|
- int MY = (int)(((float)ScrnMouseY / ScrnHeight) * TouchScreenHeight);
|
|
|
|
|
|
|
+ int MX = (ScrnMouseX * TouchScreenWidth) / ScrnWidth;
|
|
|
|
|
+ int MY = (ScrnMouseY * TouchScreenHeight) / ScrnHeight;
|
|
|
|
|
|
|
|
HidTouchPoint CurrentPoint = new HidTouchPoint
|
|
HidTouchPoint CurrentPoint = new HidTouchPoint
|
|
|
{
|
|
{
|
|
@@ -397,6 +282,29 @@ namespace Ryujinx
|
|
|
|
|
|
|
|
protected override void OnKeyDown(KeyboardKeyEventArgs e)
|
|
protected override void OnKeyDown(KeyboardKeyEventArgs e)
|
|
|
{
|
|
{
|
|
|
|
|
+ bool ToggleFullscreen = e.Key == Key.F11 ||
|
|
|
|
|
+ (e.Modifiers.HasFlag(KeyModifiers.Alt) && e.Key == Key.Enter);
|
|
|
|
|
+
|
|
|
|
|
+ if (WindowState == WindowState.Fullscreen)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (e.Key == Key.Escape || ToggleFullscreen)
|
|
|
|
|
+ {
|
|
|
|
|
+ WindowState = WindowState.Normal;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ if (e.Key == Key.Escape)
|
|
|
|
|
+ {
|
|
|
|
|
+ Exit();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (ToggleFullscreen)
|
|
|
|
|
+ {
|
|
|
|
|
+ WindowState = WindowState.Fullscreen;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
Keyboard = e.Keyboard;
|
|
Keyboard = e.Keyboard;
|
|
|
}
|
|
}
|
|
|
|
|
|