Simplify DeltaValueMode

This commit is contained in:
Kamil Trzciński 2022-11-27 10:01:27 +01:00
parent 4c016b33b9
commit 6da5a9796c
3 changed files with 31 additions and 43 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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
);
}
}