diff --git a/SteamController/Devices/SteamAction.cs b/SteamController/Devices/SteamAction.cs index f9d3720..eac99c8 100644 --- a/SteamController/Devices/SteamAction.cs +++ b/SteamController/Devices/SteamAction.cs @@ -262,6 +262,14 @@ namespace SteamController.Devices } } + public enum DeltaValueMode + { + Absolute, + AbsoluteTime, + Delta, + DeltaTime + } + public class SteamAxis : SteamAction { public const short VirtualLeftThreshold = short.MinValue / 2; @@ -275,6 +283,7 @@ namespace SteamController.Devices public SteamButton? VirtualRight { get; internal set; } public short Deadzone { get; internal set; } public short MinChange { get; internal set; } + public DeltaValueMode DeltaValueMode { get; internal set; } = DeltaValueMode.Absolute; public short Value { @@ -298,45 +307,39 @@ namespace SteamController.Devices public bool Active { - get - { - return ActiveButton?.Value ?? true; - } + get { return ActiveButton?.Value ?? true; } } - public enum ScaledMode + public double DeltaValue { - Absolute, - AbsoluteTime, - Delta, - DeltaTime + get { return GetDeltaValue(-1, 1, DeltaValueMode); } } - public double Scaled(double min, double max, ScaledMode mode) + public double GetDeltaValue(double min, double max, DeltaValueMode mode) { int value = 0; switch (mode) { - case ScaledMode.Absolute: + case DeltaValueMode.Absolute: if (Math.Abs(Value) < Deadzone) return 0.0; value = Value; break; - case ScaledMode.AbsoluteTime: + case DeltaValueMode.AbsoluteTime: if (Math.Abs(Value) < Deadzone) return 0.0; value = (int)(Value * DeltaTime); break; - case ScaledMode.Delta: + case DeltaValueMode.Delta: value = Value - LastValue; if (Math.Abs(Value) < MinChange) return 0.0; break; - case ScaledMode.DeltaTime: + case DeltaValueMode.DeltaTime: value = Value - LastValue; if (Math.Abs(Value) < MinChange) return 0.0; @@ -351,21 +354,6 @@ namespace SteamController.Devices return factor * (max - min) + min; } - public double Scaled(double range, ScaledMode mode) - { - return Scaled(-range, range, mode); - } - - public int Scaled(int min, int max, ScaledMode mode) - { - return (int)Scaled((double)min, (double)max, mode); - } - - public int Scaled(int range, ScaledMode mode) - { - return Scaled(-range, range, mode); - } - internal override void Reset() { rawLastValue = rawValue; diff --git a/SteamController/Devices/SteamButtons.cs b/SteamController/Devices/SteamButtons.cs index d37b6b4..7b4e83b 100644 --- a/SteamController/Devices/SteamButtons.cs +++ b/SteamController/Devices/SteamButtons.cs @@ -40,10 +40,10 @@ namespace SteamController.Devices public readonly SteamButton BtnVirtualLeftThumbLeft = new SteamButton(); public readonly SteamButton BtnVirtualLeftThumbRight = new SteamButton(); - public readonly SteamAxis LPadX = new SteamAxis(0x10); - public readonly SteamAxis LPadY = new SteamAxis(0x12); - public readonly SteamAxis RPadX = new SteamAxis(0x14) { LizardMouse = true }; - public readonly SteamAxis RPadY = new SteamAxis(0x16) { LizardMouse = true }; + public readonly SteamAxis LPadX = new SteamAxis(0x10) { DeltaValueMode = Devices.DeltaValueMode.Delta }; + public readonly SteamAxis LPadY = new SteamAxis(0x12) { DeltaValueMode = Devices.DeltaValueMode.Delta }; + public readonly SteamAxis RPadX = new SteamAxis(0x14) { LizardMouse = true, DeltaValueMode = Devices.DeltaValueMode.Delta }; + public readonly SteamAxis RPadY = new SteamAxis(0x16) { LizardMouse = true, DeltaValueMode = Devices.DeltaValueMode.Delta }; public readonly SteamAxis AccelX = new SteamAxis(0x18); public readonly SteamAxis AccelY = new SteamAxis(0x1A); public readonly SteamAxis AccelZ = new SteamAxis(0x1C); @@ -52,10 +52,10 @@ namespace SteamController.Devices public readonly SteamAxis GyroRoll = new SteamAxis(0x22); public readonly SteamAxis LeftTrigger = new SteamAxis(0x2C); public readonly SteamAxis RightTrigger = new SteamAxis(0x2E); - public readonly SteamAxis LeftThumbX = new SteamAxis(0x30) { Deadzone = 5000, MinChange = 10 }; - public readonly SteamAxis LeftThumbY = new SteamAxis(0x32) { Deadzone = 5000, MinChange = 10 }; - public readonly SteamAxis RightThumbX = new SteamAxis(0x34) { Deadzone = 5000, MinChange = 10 }; - public readonly SteamAxis RightThumbY = new SteamAxis(0x36) { Deadzone = 5000, MinChange = 10 }; + public readonly SteamAxis LeftThumbX = new SteamAxis(0x30) { Deadzone = 5000, MinChange = 10, DeltaValueMode = Devices.DeltaValueMode.AbsoluteTime }; + public readonly SteamAxis LeftThumbY = new SteamAxis(0x32) { Deadzone = 5000, MinChange = 10, DeltaValueMode = Devices.DeltaValueMode.AbsoluteTime }; + public readonly SteamAxis RightThumbX = new SteamAxis(0x34) { Deadzone = 5000, MinChange = 10, DeltaValueMode = Devices.DeltaValueMode.AbsoluteTime }; + public readonly SteamAxis RightThumbY = new SteamAxis(0x36) { Deadzone = 5000, MinChange = 10, DeltaValueMode = Devices.DeltaValueMode.AbsoluteTime }; public readonly SteamAxis LPadPressure = new SteamAxis(0x38); public readonly SteamAxis RPadPressure = new SteamAxis(0x38); diff --git a/SteamController/Profiles/DefaultGuideShortcutsProfile.cs b/SteamController/Profiles/DefaultGuideShortcutsProfile.cs index 1693bb1..4d8d3c1 100644 --- a/SteamController/Profiles/DefaultGuideShortcutsProfile.cs +++ b/SteamController/Profiles/DefaultGuideShortcutsProfile.cs @@ -115,11 +115,11 @@ namespace SteamController.Profiles { if (c.Steam.LPadX) { - c.Mouse.HorizontalScroll(c.Steam.LPadX.Scaled(Context.PadToWhellSensitivity, Devices.SteamAxis.ScaledMode.Delta)); + c.Mouse.HorizontalScroll(c.Steam.LPadX.DeltaValue * Context.PadToWhellSensitivity); } if (c.Steam.LPadY) { - c.Mouse.VerticalScroll(c.Steam.LPadY.Scaled(Context.PadToWhellSensitivity, Devices.SteamAxis.ScaledMode.Delta)); + c.Mouse.VerticalScroll(c.Steam.LPadY.DeltaValue * Context.PadToWhellSensitivity); } } @@ -128,8 +128,8 @@ namespace SteamController.Profiles if (c.Steam.RightThumbX || c.Steam.RightThumbY) { c.Mouse.MoveBy( - c.Steam.RightThumbX.Scaled(Context.JoystickToMouseSensitivity, Devices.SteamAxis.ScaledMode.AbsoluteTime), - -c.Steam.RightThumbY.Scaled(Context.JoystickToMouseSensitivity, Devices.SteamAxis.ScaledMode.AbsoluteTime) + c.Steam.RightThumbX.DeltaValue * Context.JoystickToMouseSensitivity, + -c.Steam.RightThumbY.DeltaValue * Context.JoystickToMouseSensitivity ); } } @@ -150,8 +150,8 @@ namespace SteamController.Profiles if (c.Steam.RPadX || c.Steam.RPadY) { c.Mouse.MoveBy( - c.Steam.RPadX.Scaled(Context.PadToMouseSensitivity, Devices.SteamAxis.ScaledMode.Delta), - -c.Steam.RPadY.Scaled(Context.PadToMouseSensitivity, Devices.SteamAxis.ScaledMode.Delta) + c.Steam.RPadX.DeltaValue * Context.PadToMouseSensitivity, + -c.Steam.RPadY.DeltaValue * Context.PadToMouseSensitivity ); } }