Add a mappable shake input

- mappable "shake" input

Co-authored-by: Shuken <shukenmg@iuvenisstudios.ga>
This commit is contained in:
shukenmg 2020-09-22 21:47:26 +08:00 committed by GitHub
parent 43786c12d9
commit 36346c1896
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 322 additions and 236 deletions

View file

@ -25,6 +25,16 @@
<!--On is "true"; off is "false". Default: true --> <!--On is "true"; off is "false". Default: true -->
<add key="EnableRumble" value="true" /> <add key="EnableRumble" value="true" />
<!--Enables a input when shaking a controller, only works with DS4 for now, replaces the touchpad input (Button 13 on DirectInput)-->
<!--On is "true"; off is "false". Default: false -->
<add key="EnableShakeInput" value="false" />
<!--How sensitve the shake detection should be. Default: 10-->
<add key="ShakeInputSensitivity" value="10" />
<!--How often should the shake input run in milliseconds. -->
<!--Don't set this lower than 15 -->
<!-- Default: 200 -->
<add key="ShakeInputDelay" value="200" />
<!--Swap A-B buttons; if on, this mimicks the (half of) Xbox layout by the button name, rather than by the physical layout.--> <!--Swap A-B buttons; if on, this mimicks the (half of) Xbox layout by the button name, rather than by the physical layout.-->
<!--Also swaps buttons when using "Also use for buttons/axes"--> <!--Also swaps buttons when using "Also use for buttons/axes"-->
<!--On is "true"; off is "false". Default: false --> <!--On is "true"; off is "false". Default: false -->

View file

@ -7,7 +7,7 @@ namespace BetterJoyForCemu {
const string PATH = "settings"; const string PATH = "settings";
static Dictionary<string, string> variables = new Dictionary<string, string>(); static Dictionary<string, string> variables = new Dictionary<string, string>();
const int settingsNum = 10; // currently - ProgressiveScan, StartInTray + special buttons const int settingsNum = 11; // currently - ProgressiveScan, StartInTray + special buttons
public static string GetDefaultValue(string s) { public static string GetDefaultValue(string s) {
switch (s) { switch (s) {
@ -21,15 +21,36 @@ namespace BetterJoyForCemu {
return "0"; return "0";
} }
// Helper function to count how many lines are in a file
// https://www.dotnetperls.com/line-count
static long CountLinesInFile(string f) {
// Zero based count
long count = -1;
using (StreamReader r = new StreamReader(f)) {
string line;
while ((line = r.ReadLine()) != null) {
count++;
}
}
return count;
}
public static void Init(List<KeyValuePair<string, float[]>> caliData) { public static void Init(List<KeyValuePair<string, float[]>> caliData) {
foreach (string s in new string[] { "ProgressiveScan", "StartInTray", "capture", "home", "sl_l", "sl_r", "sr_l", "sr_r", "reset_mouse", "active_gyro" }) foreach (string s in new string[] { "ProgressiveScan", "StartInTray", "capture", "home", "sl_l", "sl_r", "sr_l", "sr_r", "shake", "reset_mouse", "active_gyro" })
variables[s] = GetDefaultValue(s); variables[s] = GetDefaultValue(s);
if (File.Exists(PATH)) { if (File.Exists(PATH)) {
int lineNO = 0;
// Reset settings file if old settings
if (CountLinesInFile(PATH) < settingsNum) {
File.Delete(PATH);
Init(caliData);
return;
}
using (StreamReader file = new StreamReader(PATH)) { using (StreamReader file = new StreamReader(PATH)) {
string line = String.Empty; string line = String.Empty;
int lineNO = 0;
while ((line = file.ReadLine()) != null) { while ((line = file.ReadLine()) != null) {
string[] vs = line.Split(); string[] vs = line.Split();
try { try {
@ -52,14 +73,6 @@ namespace BetterJoyForCemu {
} catch { } } catch { }
lineNO++; lineNO++;
} }
}
// if old settings
if (lineNO < settingsNum) {
File.Delete(PATH);
Init(caliData);
} }
} else { } else {
using (StreamWriter file = new StreamWriter(PATH)) { using (StreamWriter file = new StreamWriter(PATH)) {

View file

@ -31,6 +31,7 @@ namespace BetterJoyForCemu {
THREADING, THREADING,
IMU, IMU,
RUMBLE, RUMBLE,
SHAKE,
}; };
public DebugType debug_type = DebugType.NONE; public DebugType debug_type = DebugType.NONE;
public bool isLeft; public bool isLeft;
@ -574,6 +575,38 @@ namespace BetterJoyForCemu {
return ret; return ret;
} }
private readonly Stopwatch shakeTimer = Stopwatch.StartNew(); //Setup a timer for measuring shake in milliseconds
private long shakedTime = 0;
private bool hasShaked;
void DetectShake() {
if (form.shakeInputEnabled) {
long currentShakeTime = shakeTimer.ElapsedMilliseconds;
// Shake detection logic
bool isShaking = GetAccel().LengthSquared() >= form.shakeSesitivity;
if (isShaking && currentShakeTime >= shakedTime + form.shakeDelay || isShaking && shakedTime == 0) {
shakedTime = currentShakeTime;
hasShaked = true;
// Mapped shake key down
Simulate(Config.Value("shake"), false, false);
DebugPrint("Shaked at time: " + shakedTime.ToString(), DebugType.SHAKE);
}
// If controller was shaked then release mapped key after a small delay to simulate a button press, then reset hasShaked
if (hasShaked && currentShakeTime >= shakedTime + 10) {
// Mapped shake key up
Simulate(Config.Value("shake"), false, true);
DebugPrint("Shake completed", DebugType.SHAKE);
hasShaked = false;
}
} else {
shakeTimer.Stop();
return;
}
}
bool dragToggle = Boolean.Parse(ConfigurationManager.AppSettings["DragToggle"]); bool dragToggle = Boolean.Parse(ConfigurationManager.AppSettings["DragToggle"]);
Dictionary<int, bool> mouse_toggle_btn = new Dictionary<int, bool>(); Dictionary<int, bool> mouse_toggle_btn = new Dictionary<int, bool>();
private void Simulate(string s, bool click = true, bool up = false) { private void Simulate(string s, bool click = true, bool up = false) {
@ -655,6 +688,8 @@ namespace BetterJoyForCemu {
} }
} }
DetectShake();
if (buttons_down[(int)Button.CAPTURE]) if (buttons_down[(int)Button.CAPTURE])
Simulate(Config.Value("capture")); Simulate(Config.Value("capture"));
if (buttons_down[(int)Button.HOME]) if (buttons_down[(int)Button.HOME])

View file

@ -22,6 +22,9 @@ namespace BetterJoyForCemu {
private Timer countDown; private Timer countDown;
private int count; private int count;
public List<int> xG, yG, zG, xA, yA, zA; public List<int> xG, yG, zG, xA, yA, zA;
public bool shakeInputEnabled = Boolean.Parse(ConfigurationManager.AppSettings["EnableShakeInput"]);
public float shakeSesitivity = float.Parse(ConfigurationManager.AppSettings["ShakeInputSensitivity"]);
public float shakeDelay = float.Parse(ConfigurationManager.AppSettings["ShakeInputDelay"]);
public MainForm() { public MainForm() {
xG = new List<int>(); yG = new List<int>(); zG = new List<int>(); xG = new List<int>(); yG = new List<int>(); zG = new List<int>();

View file

@ -79,226 +79,248 @@ namespace BetterJoyForCemu {
/// the contents of this method with the code editor. /// the contents of this method with the code editor.
/// </summary> /// </summary>
private void InitializeComponent() { private void InitializeComponent() {
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Reassign)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Reassign));
this.btn_capture = new BetterJoyForCemu.SplitButton(); this.btn_capture = new BetterJoyForCemu.SplitButton();
this.lbl_capture = new System.Windows.Forms.Label(); this.lbl_capture = new System.Windows.Forms.Label();
this.lbl_home = new System.Windows.Forms.Label(); this.lbl_home = new System.Windows.Forms.Label();
this.btn_home = new BetterJoyForCemu.SplitButton(); this.btn_home = new BetterJoyForCemu.SplitButton();
this.lbl_sl_l = new System.Windows.Forms.Label(); this.lbl_sl_l = new System.Windows.Forms.Label();
this.btn_sl_l = new BetterJoyForCemu.SplitButton(); this.btn_sl_l = new BetterJoyForCemu.SplitButton();
this.lbl_sr_l = new System.Windows.Forms.Label(); this.lbl_sr_l = new System.Windows.Forms.Label();
this.btn_sr_l = new BetterJoyForCemu.SplitButton(); this.btn_sr_l = new BetterJoyForCemu.SplitButton();
this.lbl_sl_r = new System.Windows.Forms.Label(); this.lbl_sl_r = new System.Windows.Forms.Label();
this.btn_sl_r = new BetterJoyForCemu.SplitButton(); this.btn_sl_r = new BetterJoyForCemu.SplitButton();
this.lbl_sr_r = new System.Windows.Forms.Label(); this.lbl_sr_r = new System.Windows.Forms.Label();
this.btn_sr_r = new BetterJoyForCemu.SplitButton(); this.btn_sr_r = new BetterJoyForCemu.SplitButton();
this.btn_close = new Button(); this.btn_close = new System.Windows.Forms.Button();
this.btn_apply = new Button(); this.btn_apply = new System.Windows.Forms.Button();
this.tip_reassign = new System.Windows.Forms.ToolTip(this.components); this.tip_reassign = new System.Windows.Forms.ToolTip(this.components);
this.lbl_reset_mouse = new System.Windows.Forms.Label(); this.lbl_reset_mouse = new System.Windows.Forms.Label();
this.btn_reset_mouse = new BetterJoyForCemu.SplitButton(); this.btn_reset_mouse = new BetterJoyForCemu.SplitButton();
this.lbl_activate_gyro = new System.Windows.Forms.Label(); this.lbl_activate_gyro = new System.Windows.Forms.Label();
this.btn_active_gyro = new SplitButton(); this.btn_active_gyro = new BetterJoyForCemu.SplitButton();
this.SuspendLayout(); this.lbl_shake = new System.Windows.Forms.Label();
// this.btn_shake = new BetterJoyForCemu.SplitButton();
// btn_capture this.SuspendLayout();
// //
this.btn_capture.Location = new System.Drawing.Point(105, 12); // btn_capture
this.btn_capture.Name = "btn_capture"; //
this.btn_capture.Size = new System.Drawing.Size(75, 23); this.btn_capture.Location = new System.Drawing.Point(105, 12);
this.btn_capture.TabIndex = 0; this.btn_capture.Name = "btn_capture";
this.btn_capture.UseVisualStyleBackColor = true; this.btn_capture.Size = new System.Drawing.Size(75, 23);
// this.btn_capture.TabIndex = 0;
// lbl_capture this.btn_capture.UseVisualStyleBackColor = true;
// //
this.lbl_capture.AutoSize = true; // lbl_capture
this.lbl_capture.Location = new System.Drawing.Point(15, 17); //
this.lbl_capture.Name = "lbl_capture"; this.lbl_capture.AutoSize = true;
this.lbl_capture.Size = new System.Drawing.Size(44, 13); this.lbl_capture.Location = new System.Drawing.Point(15, 17);
this.lbl_capture.TabIndex = 2; this.lbl_capture.Name = "lbl_capture";
this.lbl_capture.Text = "Capture"; this.lbl_capture.Size = new System.Drawing.Size(44, 13);
this.lbl_capture.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_capture.TabIndex = 2;
// this.lbl_capture.Text = "Capture";
// lbl_home this.lbl_capture.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.lbl_home.AutoSize = true; // lbl_home
this.lbl_home.Location = new System.Drawing.Point(15, 46); //
this.lbl_home.Name = "lbl_home"; this.lbl_home.AutoSize = true;
this.lbl_home.Size = new System.Drawing.Size(35, 13); this.lbl_home.Location = new System.Drawing.Point(15, 46);
this.lbl_home.TabIndex = 4; this.lbl_home.Name = "lbl_home";
this.lbl_home.Text = "Home"; this.lbl_home.Size = new System.Drawing.Size(35, 13);
this.lbl_home.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_home.TabIndex = 4;
// this.lbl_home.Text = "Home";
// btn_home this.lbl_home.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_home.Location = new System.Drawing.Point(105, 41); // btn_home
this.btn_home.Name = "btn_home"; //
this.btn_home.Size = new System.Drawing.Size(75, 23); this.btn_home.Location = new System.Drawing.Point(105, 41);
this.btn_home.TabIndex = 3; this.btn_home.Name = "btn_home";
this.btn_home.UseVisualStyleBackColor = true; this.btn_home.Size = new System.Drawing.Size(75, 23);
// this.btn_home.TabIndex = 3;
// lbl_sl_l this.btn_home.UseVisualStyleBackColor = true;
// //
this.lbl_sl_l.AutoSize = true; // lbl_sl_l
this.lbl_sl_l.Location = new System.Drawing.Point(15, 75); //
this.lbl_sl_l.Name = "lbl_sl_l"; this.lbl_sl_l.AutoSize = true;
this.lbl_sl_l.Size = new System.Drawing.Size(78, 13); this.lbl_sl_l.Location = new System.Drawing.Point(15, 75);
this.lbl_sl_l.TabIndex = 6; this.lbl_sl_l.Name = "lbl_sl_l";
this.lbl_sl_l.Text = "SL Left Joycon"; this.lbl_sl_l.Size = new System.Drawing.Size(78, 13);
this.lbl_sl_l.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_sl_l.TabIndex = 6;
// this.lbl_sl_l.Text = "SL Left Joycon";
// btn_sl_l this.lbl_sl_l.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_sl_l.Location = new System.Drawing.Point(105, 70); // btn_sl_l
this.btn_sl_l.Name = "btn_sl_l"; //
this.btn_sl_l.Size = new System.Drawing.Size(75, 23); this.btn_sl_l.Location = new System.Drawing.Point(105, 70);
this.btn_sl_l.TabIndex = 5; this.btn_sl_l.Name = "btn_sl_l";
this.btn_sl_l.UseVisualStyleBackColor = true; this.btn_sl_l.Size = new System.Drawing.Size(75, 23);
// this.btn_sl_l.TabIndex = 5;
// lbl_sr_l this.btn_sl_l.UseVisualStyleBackColor = true;
// //
this.lbl_sr_l.AutoSize = true; // lbl_sr_l
this.lbl_sr_l.Location = new System.Drawing.Point(15, 104); //
this.lbl_sr_l.Name = "lbl_sr_l"; this.lbl_sr_l.AutoSize = true;
this.lbl_sr_l.Size = new System.Drawing.Size(80, 13); this.lbl_sr_l.Location = new System.Drawing.Point(15, 104);
this.lbl_sr_l.TabIndex = 8; this.lbl_sr_l.Name = "lbl_sr_l";
this.lbl_sr_l.Text = "SR Left Joycon"; this.lbl_sr_l.Size = new System.Drawing.Size(80, 13);
this.lbl_sr_l.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_sr_l.TabIndex = 8;
// this.lbl_sr_l.Text = "SR Left Joycon";
// btn_sr_l this.lbl_sr_l.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_sr_l.Location = new System.Drawing.Point(105, 99); // btn_sr_l
this.btn_sr_l.Name = "btn_sr_l"; //
this.btn_sr_l.Size = new System.Drawing.Size(75, 23); this.btn_sr_l.Location = new System.Drawing.Point(105, 99);
this.btn_sr_l.TabIndex = 7; this.btn_sr_l.Name = "btn_sr_l";
this.btn_sr_l.UseVisualStyleBackColor = true; this.btn_sr_l.Size = new System.Drawing.Size(75, 23);
// this.btn_sr_l.TabIndex = 7;
// lbl_sl_r this.btn_sr_l.UseVisualStyleBackColor = true;
// //
this.lbl_sl_r.AutoSize = true; // lbl_sl_r
this.lbl_sl_r.Location = new System.Drawing.Point(15, 133); //
this.lbl_sl_r.Name = "lbl_sl_r"; this.lbl_sl_r.AutoSize = true;
this.lbl_sl_r.Size = new System.Drawing.Size(85, 13); this.lbl_sl_r.Location = new System.Drawing.Point(15, 133);
this.lbl_sl_r.TabIndex = 10; this.lbl_sl_r.Name = "lbl_sl_r";
this.lbl_sl_r.Text = "SL Right Joycon"; this.lbl_sl_r.Size = new System.Drawing.Size(85, 13);
this.lbl_sl_r.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_sl_r.TabIndex = 10;
// this.lbl_sl_r.Text = "SL Right Joycon";
// btn_sl_r this.lbl_sl_r.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_sl_r.Location = new System.Drawing.Point(105, 128); // btn_sl_r
this.btn_sl_r.Name = "btn_sl_r"; //
this.btn_sl_r.Size = new System.Drawing.Size(75, 23); this.btn_sl_r.Location = new System.Drawing.Point(105, 128);
this.btn_sl_r.TabIndex = 9; this.btn_sl_r.Name = "btn_sl_r";
this.btn_sl_r.UseVisualStyleBackColor = true; this.btn_sl_r.Size = new System.Drawing.Size(75, 23);
// this.btn_sl_r.TabIndex = 9;
// lbl_sr_r this.btn_sl_r.UseVisualStyleBackColor = true;
// //
this.lbl_sr_r.AutoSize = true; // lbl_sr_r
this.lbl_sr_r.Location = new System.Drawing.Point(15, 162); //
this.lbl_sr_r.Name = "lbl_sr_r"; this.lbl_sr_r.AutoSize = true;
this.lbl_sr_r.Size = new System.Drawing.Size(87, 13); this.lbl_sr_r.Location = new System.Drawing.Point(15, 162);
this.lbl_sr_r.TabIndex = 12; this.lbl_sr_r.Name = "lbl_sr_r";
this.lbl_sr_r.Text = "SR Right Joycon"; this.lbl_sr_r.Size = new System.Drawing.Size(87, 13);
this.lbl_sr_r.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_sr_r.TabIndex = 12;
// this.lbl_sr_r.Text = "SR Right Joycon";
// btn_sr_r this.lbl_sr_r.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_sr_r.Location = new System.Drawing.Point(105, 157); // btn_sr_r
this.btn_sr_r.Name = "btn_sr_r"; //
this.btn_sr_r.Size = new System.Drawing.Size(75, 23); this.btn_sr_r.Location = new System.Drawing.Point(105, 157);
this.btn_sr_r.TabIndex = 11; this.btn_sr_r.Name = "btn_sr_r";
this.btn_sr_r.UseVisualStyleBackColor = true; this.btn_sr_r.Size = new System.Drawing.Size(75, 23);
// this.btn_sr_r.TabIndex = 11;
// btn_close this.btn_sr_r.UseVisualStyleBackColor = true;
// //
this.btn_close.Location = new System.Drawing.Point(15, 257); // btn_close
this.btn_close.Name = "btn_close"; //
this.btn_close.Size = new System.Drawing.Size(75, 23); this.btn_close.Location = new System.Drawing.Point(15, 289);
this.btn_close.TabIndex = 13; this.btn_close.Name = "btn_close";
this.btn_close.Text = "Okay"; this.btn_close.Size = new System.Drawing.Size(75, 23);
this.btn_close.UseVisualStyleBackColor = true; this.btn_close.TabIndex = 13;
this.btn_close.Click += new System.EventHandler(this.btn_close_Click); this.btn_close.Text = "Okay";
// this.btn_close.UseVisualStyleBackColor = true;
// btn_apply this.btn_close.Click += new System.EventHandler(this.btn_close_Click);
// //
this.btn_apply.Location = new System.Drawing.Point(105, 257); // btn_apply
this.btn_apply.Name = "btn_apply"; //
this.btn_apply.Size = new System.Drawing.Size(75, 23); this.btn_apply.Location = new System.Drawing.Point(105, 289);
this.btn_apply.TabIndex = 14; this.btn_apply.Name = "btn_apply";
this.btn_apply.Text = "Apply"; this.btn_apply.Size = new System.Drawing.Size(75, 23);
this.btn_apply.UseVisualStyleBackColor = true; this.btn_apply.TabIndex = 14;
this.btn_apply.Click += new System.EventHandler(this.btn_apply_Click); this.btn_apply.Text = "Apply";
// this.btn_apply.UseVisualStyleBackColor = true;
// lbl_reset_mouse this.btn_apply.Click += new System.EventHandler(this.btn_apply_Click);
// //
this.lbl_reset_mouse.AutoSize = true; // lbl_reset_mouse
this.lbl_reset_mouse.Location = new System.Drawing.Point(15, 191); //
this.lbl_reset_mouse.Name = "lbl_reset_mouse"; this.lbl_reset_mouse.AutoSize = true;
this.lbl_reset_mouse.Size = new System.Drawing.Size(80, 13); this.lbl_reset_mouse.Location = new System.Drawing.Point(15, 223);
this.lbl_reset_mouse.TabIndex = 16; this.lbl_reset_mouse.Name = "lbl_reset_mouse";
this.lbl_reset_mouse.Text = "Re-Centre Gyro"; this.lbl_reset_mouse.Size = new System.Drawing.Size(80, 13);
this.lbl_reset_mouse.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_reset_mouse.TabIndex = 16;
// this.lbl_reset_mouse.Text = "Re-Centre Gyro";
// btn_reset_mouse this.lbl_reset_mouse.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_reset_mouse.Location = new System.Drawing.Point(105, 186); // btn_reset_mouse
this.btn_reset_mouse.Name = "btn_reset_mouse"; //
this.btn_reset_mouse.Size = new System.Drawing.Size(75, 23); this.btn_reset_mouse.Location = new System.Drawing.Point(105, 218);
this.btn_reset_mouse.TabIndex = 15; this.btn_reset_mouse.Name = "btn_reset_mouse";
this.btn_reset_mouse.UseVisualStyleBackColor = true; this.btn_reset_mouse.Size = new System.Drawing.Size(75, 23);
// this.btn_reset_mouse.TabIndex = 15;
// lbl_activate_gyro this.btn_reset_mouse.UseVisualStyleBackColor = true;
// //
this.lbl_activate_gyro.AutoSize = true; // lbl_activate_gyro
this.lbl_activate_gyro.Location = new System.Drawing.Point(14, 220); //
this.lbl_activate_gyro.Name = "lbl_activate_gyro"; this.lbl_activate_gyro.AutoSize = true;
this.lbl_activate_gyro.Size = new System.Drawing.Size(71, 13); this.lbl_activate_gyro.Location = new System.Drawing.Point(14, 252);
this.lbl_activate_gyro.TabIndex = 17; this.lbl_activate_gyro.Name = "lbl_activate_gyro";
this.lbl_activate_gyro.Text = "Activate Gyro"; this.lbl_activate_gyro.Size = new System.Drawing.Size(71, 13);
this.lbl_activate_gyro.TextAlign = System.Drawing.ContentAlignment.TopCenter; this.lbl_activate_gyro.TabIndex = 17;
// this.lbl_activate_gyro.Text = "Activate Gyro";
// btn_active_gyro this.lbl_activate_gyro.TextAlign = System.Drawing.ContentAlignment.TopCenter;
// //
this.btn_active_gyro.Location = new System.Drawing.Point(105, 215); // btn_active_gyro
this.btn_active_gyro.Name = "btn_active_gyro"; //
this.btn_active_gyro.Size = new System.Drawing.Size(75, 23); this.btn_active_gyro.Location = new System.Drawing.Point(105, 247);
this.btn_active_gyro.TabIndex = 18; this.btn_active_gyro.Name = "btn_active_gyro";
this.btn_active_gyro.UseVisualStyleBackColor = true; this.btn_active_gyro.Size = new System.Drawing.Size(75, 23);
// this.btn_active_gyro.TabIndex = 18;
// Reassign this.btn_active_gyro.UseVisualStyleBackColor = true;
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); // label1
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; //
this.ClientSize = new System.Drawing.Size(192, 292); this.lbl_shake.AutoSize = true;
this.Controls.Add(this.btn_active_gyro); this.lbl_shake.Location = new System.Drawing.Point(15, 191);
this.Controls.Add(this.lbl_activate_gyro); this.lbl_shake.Name = "lbl_shake";
this.Controls.Add(this.lbl_reset_mouse); this.lbl_shake.Size = new System.Drawing.Size(87, 13);
this.Controls.Add(this.btn_reset_mouse); this.lbl_shake.TabIndex = 20;
this.Controls.Add(this.btn_apply); this.lbl_shake.Text = "Shake Input";
this.Controls.Add(this.btn_close); this.lbl_shake.TextAlign = System.Drawing.ContentAlignment.TopCenter;
this.Controls.Add(this.lbl_sr_r); //
this.Controls.Add(this.btn_sr_r); // splitButton1
this.Controls.Add(this.lbl_sl_r); //
this.Controls.Add(this.btn_sl_r); this.btn_shake.Location = new System.Drawing.Point(105, 186);
this.Controls.Add(this.lbl_sr_l); this.btn_shake.Name = "btn_shake";
this.Controls.Add(this.btn_sr_l); this.btn_shake.Size = new System.Drawing.Size(75, 23);
this.Controls.Add(this.lbl_sl_l); this.btn_shake.TabIndex = 19;
this.Controls.Add(this.btn_sl_l); this.btn_shake.UseVisualStyleBackColor = true;
this.Controls.Add(this.lbl_home); //
this.Controls.Add(this.btn_home); // Reassign
this.Controls.Add(this.lbl_capture); //
this.Controls.Add(this.btn_capture); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.ClientSize = new System.Drawing.Size(192, 338);
this.MaximizeBox = false; this.Controls.Add(this.lbl_shake);
this.MinimizeBox = false; this.Controls.Add(this.btn_shake);
this.Name = "Reassign"; this.Controls.Add(this.btn_active_gyro);
this.Text = "Map Special Buttons"; this.Controls.Add(this.lbl_activate_gyro);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Reassign_FormClosing); this.Controls.Add(this.lbl_reset_mouse);
this.Load += new System.EventHandler(this.Reassign_Load); this.Controls.Add(this.btn_reset_mouse);
this.ResumeLayout(false); this.Controls.Add(this.btn_apply);
this.PerformLayout(); this.Controls.Add(this.btn_close);
this.Controls.Add(this.lbl_sr_r);
this.Controls.Add(this.btn_sr_r);
this.Controls.Add(this.lbl_sl_r);
this.Controls.Add(this.btn_sl_r);
this.Controls.Add(this.lbl_sr_l);
this.Controls.Add(this.btn_sr_l);
this.Controls.Add(this.lbl_sl_l);
this.Controls.Add(this.btn_sl_l);
this.Controls.Add(this.lbl_home);
this.Controls.Add(this.btn_home);
this.Controls.Add(this.lbl_capture);
this.Controls.Add(this.btn_capture);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Reassign";
this.Text = "Map Special Buttons";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Reassign_FormClosing);
this.Load += new System.EventHandler(this.Reassign_Load);
this.ResumeLayout(false);
this.PerformLayout();
} }
@ -323,5 +345,7 @@ namespace BetterJoyForCemu {
private SplitButton btn_reset_mouse; private SplitButton btn_reset_mouse;
private Label lbl_activate_gyro; private Label lbl_activate_gyro;
private SplitButton btn_active_gyro; private SplitButton btn_active_gyro;
} private Label lbl_shake;
} private SplitButton btn_shake;
}
}

View file

@ -29,7 +29,7 @@ namespace BetterJoyForCemu {
menu_joy_buttons.ItemClicked += Menu_joy_buttons_ItemClicked; menu_joy_buttons.ItemClicked += Menu_joy_buttons_ItemClicked;
foreach (SplitButton c in new SplitButton[] { btn_capture, btn_home, btn_sl_l, btn_sl_r, btn_sr_l, btn_sr_r, btn_reset_mouse, btn_active_gyro }) { foreach (SplitButton c in new SplitButton[] { btn_capture, btn_home, btn_sl_l, btn_sl_r, btn_sr_l, btn_sr_r, btn_shake, btn_reset_mouse, btn_active_gyro }) {
c.Tag = c.Name.Substring(4); c.Tag = c.Name.Substring(4);
GetPrettyName(c); GetPrettyName(c);

View file

@ -24,7 +24,8 @@ Go to the [Releases tab](https://github.com/Davidobot/BetterJoy/releases/)!
1. Install drivers 1. Install drivers
1. Read the READMEs (they're there for a reason!) 1. Read the READMEs (they're there for a reason!)
1. Run *Drivers/ViGEmBus_Setup_1.16.116.exe* 1. Run *Drivers/ViGEmBus_Setup_1.16.116.exe*
2. Run *BetterJoyForCemu.exe* 2. Run *BetterJoyForCemu.exe*
1. Run as Administrator if your keyboard/mouse button mappings don't work
3. Connect your controllers. 3. Connect your controllers.
4. Start Cemu and ensure CemuHook has the controller selected. 4. Start Cemu and ensure CemuHook has the controller selected.
1. If using Joycons, CemuHook will detect two controllers - each will give all buttons, but choosing one over the other just chooses preference for which hand to use for gyro controls. 1. If using Joycons, CemuHook will detect two controllers - each will give all buttons, but choosing one over the other just chooses preference for which hand to use for gyro controls.