Calculate stick angles for each state change

This commit is contained in:
Travis Nickles 2017-04-16 02:54:34 -07:00
parent 92b4e2da24
commit 6c83ca2470
3 changed files with 32 additions and 21 deletions

View File

@ -510,11 +510,10 @@ namespace DS4Windows
CheckForHotkeys(ind, cState, pState); CheckForHotkeys(ind, cState, pState);
if (eastertime) if (eastertime)
EasterTime(ind); EasterTime(ind);
/*if (LSCurve[ind] != 0 || RSCurve[ind] != 0 || LSDeadzone[ind] != 0 || RSDeadzone[ind] != 0 ||
L2Deadzone[ind] != 0 || R2Deadzone[ind] != 0 || LSSens[ind] != 0 || RSSens[ind] != 0 ||
L2Sens[ind] != 0 || R2Sens[ind] != 0) //if a curve or deadzone is in place
*/
cState = Mapping.SetCurveAndDeadzone(ind, cState); cState = Mapping.SetCurveAndDeadzone(ind, cState);
cState.calculateStickAngles();
if (!recordingMacro && (!string.IsNullOrEmpty(tempprofilename[ind]) || if (!recordingMacro && (!string.IsNullOrEmpty(tempprofilename[ind]) ||
containsCustomAction(ind) || containsCustomExtras(ind) || getProfileActionCount(ind) > 0)) containsCustomAction(ind) || containsCustomExtras(ind) || getProfileActionCount(ind) > 0))
{ {

View File

@ -431,6 +431,7 @@ namespace DS4Windows
curvey = Math.Min(y, (y / max) * multimax); curvey = Math.Min(y, (y / max) * multimax);
} }
} }
dState.LX = (byte)Math.Round(curvex, 0); dState.LX = (byte)Math.Round(curvex, 0);
dState.LY = (byte)Math.Round(curvey, 0); dState.LY = (byte)Math.Round(curvey, 0);
} }
@ -464,6 +465,7 @@ namespace DS4Windows
curvey = Math.Min(y, (y / max) * multimax); curvey = Math.Min(y, (y / max) * multimax);
} }
} }
dState.RX = (byte)Math.Round(curvex, 0); dState.RX = (byte)Math.Round(curvex, 0);
dState.RY = (byte)Math.Round(curvey, 0); dState.RY = (byte)Math.Round(curvey, 0);
} }
@ -2555,8 +2557,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.LX - 127), -(cState.LY - 127)); double angle = cState.LSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.LX < 127 && (angle >= 210 && angle <= 330); result = cState.LX < 127 && (angle >= 210 && angle <= 330);
} }
else else
@ -2570,8 +2571,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.LX - 127), -(cState.LY - 127)); double angle = cState.LSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.LY < 127 && (angle >= 300 || angle <= 60); result = cState.LY < 127 && (angle >= 300 || angle <= 60);
} }
else else
@ -2585,8 +2585,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.RX - 127), -(cState.RY - 127)); double angle = cState.RSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.RX < 127 && (angle >= 210 && angle <= 330); result = cState.RX < 127 && (angle >= 210 && angle <= 330);
} }
else else
@ -2600,8 +2599,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.RX - 127), -(cState.RY - 127)); double angle = cState.RSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.RY < 127 && (angle >= 300 || angle <= 60); result = cState.RY < 127 && (angle >= 300 || angle <= 60);
} }
else else
@ -2615,8 +2613,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.LX - 127), -(cState.LY - 127)); double angle = cState.LSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.LX > 127 && (angle >= 30 && angle <= 150); result = cState.LX > 127 && (angle >= 30 && angle <= 150);
} }
else else
@ -2630,8 +2627,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.LX - 127), -(cState.LY - 127)); double angle = cState.LSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.LY > 127 && (angle >= 120 && angle <= 240); result = cState.LY > 127 && (angle >= 120 && angle <= 240);
} }
else else
@ -2645,8 +2641,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.RX - 127), -(cState.RY - 127)); double angle = cState.RSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.RX > 127 && (angle >= 30 && angle <= 150); result = cState.RX > 127 && (angle >= 30 && angle <= 150);
} }
else else
@ -2660,8 +2655,7 @@ namespace DS4Windows
{ {
if (!analog) if (!analog)
{ {
double angle = Math.Atan2((cState.RX - 127), -(cState.RY - 127)); double angle = cState.RSAngle;
angle = (angle >= 0 ? angle : (2 * Math.PI + angle)) * 180 / Math.PI;
result = cState.RY > 127 && (angle >= 120 && angle <= 240); result = cState.RY > 127 && (angle >= 120 && angle <= 240);
} }
else else

View File

@ -17,6 +17,8 @@ namespace DS4Windows
public byte FrameCounter; // 0, 1, 2...62, 63, 0.... public byte FrameCounter; // 0, 1, 2...62, 63, 0....
public byte TouchPacketCounter; // we break these out automatically public byte TouchPacketCounter; // we break these out automatically
public byte Battery; // 0 for charging, 10/20/30/40/50/60/70/80/90/100 for percentage of full public byte Battery; // 0 for charging, 10/20/30/40/50/60/70/80/90/100 for percentage of full
public double LSAngle;
public double RSAngle;
public DS4State() public DS4State()
{ {
@ -29,6 +31,8 @@ namespace DS4Windows
FrameCounter = 255; // only actually has 6 bits, so this is a null indicator FrameCounter = 255; // only actually has 6 bits, so this is a null indicator
TouchPacketCounter = 255; // 8 bits, no great junk value TouchPacketCounter = 255; // 8 bits, no great junk value
Battery = 0; Battery = 0;
LSAngle = 0.0;
RSAngle = 0.0;
} }
public DS4State(DS4State state) public DS4State(DS4State state)
@ -65,6 +69,8 @@ namespace DS4Windows
RY = state.RY; RY = state.RY;
FrameCounter = state.FrameCounter; FrameCounter = state.FrameCounter;
Battery = state.Battery; Battery = state.Battery;
LSAngle = state.LSAngle;
RSAngle = state.RSAngle;
} }
public DS4State Clone() public DS4State Clone()
@ -106,7 +112,19 @@ namespace DS4Windows
state.RY = RY; state.RY = RY;
state.FrameCounter = FrameCounter; state.FrameCounter = FrameCounter;
state.Battery = Battery; state.Battery = Battery;
state.LSAngle = LSAngle;
state.RSAngle = RSAngle;
} }
public void calculateStickAngles()
{
double lsangle = Math.Atan2((LX - 127), -(LY - 127));
lsangle = (lsangle >= 0 ? lsangle : (2 * Math.PI + lsangle)) * 180 / Math.PI;
LSAngle = lsangle;
double rsangle = Math.Atan2((RX - 127), -(RY - 127));
rsangle = (rsangle >= 0 ? rsangle : (2 * Math.PI + rsangle)) * 180 / Math.PI;
RSAngle = rsangle;
}
} }
} }