Skip to content

Commit

Permalink
fixes and improvements to Remapper mouse input
Browse files Browse the repository at this point in the history
  • Loading branch information
komefai committed Feb 9, 2018
1 parent fd700cd commit 2ec5033
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 55 deletions.
67 changes: 39 additions & 28 deletions PS4Macro/Classes/Remapping/Remapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ public enum AnalogStick

public class Remapper
{
private const int MOUSE_CENTER_X = 500;
private const int MOUSE_CENTER_Y = 500;
private const int MOUSE_RELEASE_TIME = 50;

// Delegates
public delegate void OnMouseAxisChangedDelegate(byte x, byte y);
public OnMouseAxisChangedDelegate OnMouseAxisChanged { get; set; }
Expand All @@ -68,8 +72,8 @@ public class Remapper
public bool EnableMouseInput { get; set; }
public double MouseSensitivity { get; set; }
public double MouseDecayRate { get; set; }
public double MouseReleaseDelay { get; set; }
public double MouseDeadzone { get; set; }
public double MouseDecayThreshold { get; set; }
public double MouseAnalogDeadzone { get; set; }
public AnalogStick MouseMovementAnalog { get; set; }
public int LeftMouseMapping { get; set; }
public int RightMouseMapping { get; set; }
Expand All @@ -90,8 +94,8 @@ public Remapper()
EnableMouseInput = false;
MouseSensitivity = 1;
MouseDecayRate = 10;
MouseReleaseDelay = 50;
MouseDeadzone = 0.1;
MouseDecayThreshold = 0.1;
MouseAnalogDeadzone = 14.25;
MouseMovementAnalog = AnalogStick.Right;
LeftMouseMapping = 11; // R2
RightMouseMapping = 10; // L2
Expand Down Expand Up @@ -222,22 +226,22 @@ public void OnReceiveData(ref DualShockState state)
MouseSpeedX /= MouseDecayRate;
MouseSpeedY /= MouseDecayRate;

// Stop joystick if within deadzone
if (Math.Abs(MouseSpeedX) < MouseDeadzone || Math.Abs(MouseSpeedY) < MouseDeadzone)
// Stop decaying joystick if below threshold
if (Math.Abs(MouseSpeedX) < MouseDecayThreshold || Math.Abs(MouseSpeedY) < MouseDecayThreshold)
{
// Reset mouse speed
MouseSpeedX = 0;
MouseSpeedY = 0;
if (Math.Abs(MouseSpeedX) < MouseDecayThreshold) MouseSpeedX = 0;
if (Math.Abs(MouseSpeedY) < MouseDecayThreshold) MouseSpeedY = 0;

// Start release timer
if (MouseReleaseTimer == null)
{
MouseReleaseTimer = new System.Timers.Timer(MouseReleaseDelay);
MouseReleaseTimer = new System.Timers.Timer(MOUSE_RELEASE_TIME);
MouseReleaseTimer.Start();
MouseReleaseTimer.Elapsed += (s, e) =>
{
// Recenter cursor
RemapperUtility.SetCursorPosition(500, 500);
RemapperUtility.SetCursorPosition(MOUSE_CENTER_X, MOUSE_CENTER_Y);
// Reset cursor overflow
CursorOverflowX = 0;
Expand All @@ -256,10 +260,11 @@ public void OnReceiveData(ref DualShockState state)
const double max = 255;
string analogProperty = MouseMovementAnalog == AnalogStick.Left ? "L" : "R";

// Scale speed to joystick
double rx = 128 + (MouseSpeedX * 127);
double ry = 128 + (MouseSpeedY * 127);

// Scale speed to analog values
double positiveSpeed = 128 + MouseAnalogDeadzone;
double negativeSpeed = 128 - MouseAnalogDeadzone;
double rx = ((MouseSpeedX > 0) ? positiveSpeed : ((MouseSpeedX < 0) ? negativeSpeed : 128)) + (MouseSpeedX * 127);
double ry = ((MouseSpeedY > 0) ? positiveSpeed : ((MouseSpeedY < 0) ? negativeSpeed : 128)) + (MouseSpeedY * 127);
byte scaledX = (byte)((rx < min) ? min : (rx > max) ? max : rx);
byte scaledY = (byte)((ry < min) ? min : (ry > max) ? max : ry);

Expand Down Expand Up @@ -379,14 +384,21 @@ public void OnMouseEvent(object sender, GlobalMouseHookEventArgs e)
// Mouse move
else if (e.MouseState == GlobalMouseHook.MouseState.Move)
{
var rawX = e.MouseData.Point.X;
var rawY = e.MouseData.Point.Y;

// Ignore if at center
if (rawX == MOUSE_CENTER_X && rawY == MOUSE_CENTER_Y)
return;

#region Store mouse stroke
var newStroke = new MouseStroke()
{
Timestamp = DateTime.Now,
RawData = e,
DidMoved = true,
X = e.MouseData.Point.X + CursorOverflowX,
Y = e.MouseData.Point.Y + CursorOverflowY
X = rawX + CursorOverflowX,
Y = rawY + CursorOverflowY
};

if (CurrentMouseStroke != null)
Expand All @@ -400,41 +412,40 @@ public void OnMouseEvent(object sender, GlobalMouseHookEventArgs e)
#endregion

#region Adjust cursor position
var x = e.MouseData.Point.X;
var y = e.MouseData.Point.Y;

var tmpX = rawX;
var tmpY = rawY;
var didSetPosition = false;
var workingArea = Screen.PrimaryScreen.WorkingArea;

if (x >= workingArea.Width)
if (tmpX >= workingArea.Width)
{
CursorOverflowX += workingArea.Width;
x = 0;
tmpX = 0;
didSetPosition = true;
}
else if (x <= 0)
else if (tmpX <= 0)
{
CursorOverflowX -= workingArea.Width;
x = workingArea.Width;
tmpX = workingArea.Width;
didSetPosition = true;
}

if (y >= workingArea.Height)
if (tmpY >= workingArea.Height)
{
CursorOverflowY += workingArea.Height;
y = 0;
tmpY = 0;
didSetPosition = true;
}
else if (y <= 0)
else if (tmpY <= 0)
{
CursorOverflowY -= workingArea.Height;
y = workingArea.Height;
tmpY = workingArea.Height;
didSetPosition = true;
}

if (didSetPosition)
{
RemapperUtility.SetCursorPosition(x, y);
//RemapperUtility.SetCursorPosition(tmpX, tmpY);
e.Handled = true;
}
#endregion
Expand Down
63 changes: 42 additions & 21 deletions PS4Macro/Forms/RemapperForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 5 additions & 6 deletions PS4Macro/Forms/RemapperForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -257,9 +257,8 @@ private void RemapperForm_Load(object sender, EventArgs e)
enableMouseCheckBox.Checked = Remapper.EnableMouseInput;
sensitivityNumericUpDown.Value = (decimal)Remapper.MouseSensitivity;
decayRateNumericUpDown.Value = (decimal)Remapper.MouseDecayRate;
releaseDelayNumericUpDown.Value = (decimal)Remapper.MouseReleaseDelay;
sensitivityNumericUpDown.Value = (decimal)Remapper.MouseSensitivity;
deadzoneNumericUpDown.Value = (decimal)Remapper.MouseDeadzone;
decayThresholdNumericUpDown.Value = (decimal)Remapper.MouseDecayThreshold;
deadzoneNumericUpDown.Value = (decimal)Remapper.MouseAnalogDeadzone;
leftStickRadioButton.Checked = Remapper.MouseMovementAnalog == AnalogStick.Left;
rightStickRadioButton.Checked = Remapper.MouseMovementAnalog == AnalogStick.Right;
leftMouseComboBox.SelectedIndex = Remapper.LeftMouseMapping;
Expand Down Expand Up @@ -376,14 +375,14 @@ private void decayRateNumericUpDown_ValueChanged(object sender, EventArgs e)
Remapper.MouseDecayRate = (double)decayRateNumericUpDown.Value;
}

private void releaseDelayNumericUpDown_ValueChanged(object sender, EventArgs e)
private void decayThresholdNumericUpDown_ValueChanged(object sender, EventArgs e)
{
Remapper.MouseReleaseDelay = (int)releaseDelayNumericUpDown.Value;
Remapper.MouseDecayThreshold = (int)decayThresholdNumericUpDown.Value;
}

private void deadzoneNumericUpDown_ValueChanged(object sender, EventArgs e)
{
Remapper.MouseDeadzone = (double)deadzoneNumericUpDown.Value;
Remapper.MouseAnalogDeadzone = (double)deadzoneNumericUpDown.Value;
}

private void leftStickRadioButton_CheckedChanged(object sender, EventArgs e)
Expand Down

0 comments on commit 2ec5033

Please sign in to comment.