More usage of cached data

This commit is contained in:
Travis Nickles 2017-04-21 06:29:25 -07:00
parent 9173ab72fe
commit 03029b32c0
2 changed files with 60 additions and 36 deletions

View File

@ -271,7 +271,7 @@ namespace DS4Windows
if (gkp.previous.scanCodeCount != 0) // use the last type of VK/SC if (gkp.previous.scanCodeCount != 0) // use the last type of VK/SC
InputMethods.performSCKeyRelease(kvpKey); InputMethods.performSCKeyRelease(kvpKey);
else else
InputMethods.performKeyRelease(kvpKey); InputMethods.performKeyRelease(kvpKey);
} }
else if (gkp.current.vkCount + gkp.current.scanCodeCount != 0 && gkp.previous.vkCount + gkp.previous.scanCodeCount == 0) else if (gkp.current.vkCount + gkp.current.scanCodeCount != 0 && gkp.previous.vkCount + gkp.previous.scanCodeCount == 0)
{ {
@ -627,16 +627,6 @@ namespace DS4Windows
{ {
dState.L2 = 0; dState.L2 = 0;
} }
/*if (cState.L2 > l2Deadzone)
{
dState.L2 = (byte)(((dState.L2 - l2Deadzone) / (double)(255 - l2Deadzone)) * 255);
}
else
{
dState.L2 = 0;
}
*/
} }
byte r2Deadzone = getR2Deadzone(device); byte r2Deadzone = getR2Deadzone(device);
@ -713,6 +703,22 @@ namespace DS4Windows
return result; return result;
} }
private static bool ShiftTrigger2(int trigger, int device, DS4State cState, DS4StateExposed eState, Mouse tp, DS4StateFieldMapping fieldMapping)
{
bool result = false;
if (trigger == 0)
{
result = false;
}
else
{
DS4Controls ds = shiftTriggerMapping[trigger];
result = getBoolMapping2(device, ds, cState, eState, tp, fieldMapping);
}
return result;
}
private static X360Controls getX360ControlsByName(string key) private static X360Controls getX360ControlsByName(string key)
{ {
X360Controls x3c; X360Controls x3c;
@ -804,7 +810,7 @@ namespace DS4Windows
object action = null; object action = null;
DS4ControlSettings.ActionType actionType = 0; DS4ControlSettings.ActionType actionType = 0;
DS4KeyType keyType = DS4KeyType.None; DS4KeyType keyType = DS4KeyType.None;
if (dcs.shiftAction != null && ShiftTrigger(dcs.shiftTrigger, device, cState, eState, tp)) if (dcs.shiftAction != null && ShiftTrigger2(dcs.shiftTrigger, device, cState, eState, tp, fieldMapping))
{ {
action = dcs.shiftAction; action = dcs.shiftAction;
actionType = dcs.shiftActionType; actionType = dcs.shiftActionType;
@ -841,10 +847,12 @@ namespace DS4Windows
SyntheticState.KeyPresses kp; SyntheticState.KeyPresses kp;
if (!deviceState.keyPresses.TryGetValue(value, out kp)) if (!deviceState.keyPresses.TryGetValue(value, out kp))
deviceState.keyPresses[value] = kp = new SyntheticState.KeyPresses(); deviceState.keyPresses[value] = kp = new SyntheticState.KeyPresses();
if (keyType.HasFlag(DS4KeyType.ScanCode)) if (keyType.HasFlag(DS4KeyType.ScanCode))
kp.current.scanCodeCount++; kp.current.scanCodeCount++;
else else
kp.current.vkCount++; kp.current.vkCount++;
if (keyType.HasFlag(DS4KeyType.Toggle)) if (keyType.HasFlag(DS4KeyType.Toggle))
{ {
if (!pressedonce[value]) if (!pressedonce[value])
@ -1054,9 +1062,9 @@ namespace DS4Windows
if (usingExtra == DS4Controls.None || usingExtra == dcs.control) if (usingExtra == DS4Controls.None || usingExtra == dcs.control)
{ {
bool shiftE = !string.IsNullOrEmpty(dcs.shiftExtras) && dcs.shiftExtras != "0,0,0,0,0,0,0,0" && ShiftTrigger(dcs.shiftTrigger, device, cState, eState, tp); bool shiftE = !string.IsNullOrEmpty(dcs.shiftExtras) && dcs.shiftExtras != "0,0,0,0,0,0,0,0" && ShiftTrigger2(dcs.shiftTrigger, device, cState, eState, tp, fieldMapping);
bool regE = !string.IsNullOrEmpty(dcs.extras) && dcs.extras != "0,0,0,0,0,0,0,0"; bool regE = !string.IsNullOrEmpty(dcs.extras) && dcs.extras != "0,0,0,0,0,0,0,0";
if ((regE || shiftE) && getBoolActionMapping(device, dcs.control, cState, eState, tp)) if ((regE || shiftE) && getBoolActionMapping2(device, dcs.control, cState, eState, tp, fieldMapping))
{ {
usingExtra = dcs.control; usingExtra = dcs.control;
string p; string p;
@ -1133,28 +1141,28 @@ namespace DS4Windows
if (macroControl[23]) MappedState.RY = 255; if (macroControl[23]) MappedState.RY = 255;
if (macroControl[24]) MappedState.RY = 0; if (macroControl[24]) MappedState.RY = 0;
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.LXNeg), device, cState, eState, tp), DS4Controls.LXNeg)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LXNeg), device, cState, eState, tp, fieldMapping), DS4Controls.LXNeg))
tempControlDict.Add(DS4Controls.LXNeg, DS4Controls.LXNeg); tempControlDict.Add(DS4Controls.LXNeg, DS4Controls.LXNeg);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.LXPos), device, cState, eState, tp), DS4Controls.LXPos)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LXPos), device, cState, eState, tp, fieldMapping), DS4Controls.LXPos))
tempControlDict.Add(DS4Controls.LXPos, DS4Controls.LXPos); tempControlDict.Add(DS4Controls.LXPos, DS4Controls.LXPos);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.LYNeg), device, cState, eState, tp), DS4Controls.LYNeg)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LYNeg), device, cState, eState, tp, fieldMapping), DS4Controls.LYNeg))
tempControlDict.Add(DS4Controls.LYNeg, DS4Controls.LYNeg); tempControlDict.Add(DS4Controls.LYNeg, DS4Controls.LYNeg);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.LYPos), device, cState, eState, tp), DS4Controls.LYPos)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.LYPos), device, cState, eState, tp, fieldMapping), DS4Controls.LYPos))
tempControlDict.Add(DS4Controls.LYPos, DS4Controls.LYPos); tempControlDict.Add(DS4Controls.LYPos, DS4Controls.LYPos);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.RXNeg), device, cState, eState, tp), DS4Controls.RXNeg)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RXNeg), device, cState, eState, tp, fieldMapping), DS4Controls.RXNeg))
tempControlDict.Add(DS4Controls.RXNeg, DS4Controls.RXNeg); tempControlDict.Add(DS4Controls.RXNeg, DS4Controls.RXNeg);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.RXPos), device, cState, eState, tp), DS4Controls.RXPos)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RXPos), device, cState, eState, tp, fieldMapping), DS4Controls.RXPos))
tempControlDict.Add(DS4Controls.RXPos, DS4Controls.RXPos); tempControlDict.Add(DS4Controls.RXPos, DS4Controls.RXPos);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.RYNeg), device, cState, eState, tp), DS4Controls.RYNeg)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RYNeg), device, cState, eState, tp, fieldMapping), DS4Controls.RYNeg))
tempControlDict.Add(DS4Controls.RYNeg, DS4Controls.RYNeg); tempControlDict.Add(DS4Controls.RYNeg, DS4Controls.RYNeg);
if (IfAxisIsNotModified(device, ShiftTrigger(GetDS4STrigger(device, DS4Controls.RYPos), device, cState, eState, tp), DS4Controls.RYPos)) if (IfAxisIsNotModified(device, ShiftTrigger2(GetDS4STrigger(device, DS4Controls.RYPos), device, cState, eState, tp, fieldMapping), DS4Controls.RYPos))
tempControlDict.Add(DS4Controls.RYPos, DS4Controls.RYPos); tempControlDict.Add(DS4Controls.RYPos, DS4Controls.RYPos);
Dictionary<DS4Controls, DS4Controls>.KeyCollection controlKeys = tempControlDict.Keys; Dictionary<DS4Controls, DS4Controls>.KeyCollection controlKeys = tempControlDict.Keys;
@ -1369,7 +1377,7 @@ namespace DS4Windows
for (int i = 0, arlen = action.trigger.Count; i < arlen; i++) for (int i = 0, arlen = action.trigger.Count; i < arlen; i++)
{ {
DS4Controls dc = action.trigger[i]; DS4Controls dc = action.trigger[i];
if (!getBoolMapping(device, dc, cState, eState, tp)) if (!getBoolMapping2(device, dc, cState, eState, tp, fieldMapping))
{ {
subtriggeractivated = false; subtriggeractivated = false;
break; break;
@ -1393,7 +1401,7 @@ namespace DS4Windows
for (int i = 0, arlen = action.trigger.Count; i < arlen; i++) for (int i = 0, arlen = action.trigger.Count; i < arlen; i++)
{ {
DS4Controls dc = action.trigger[i]; DS4Controls dc = action.trigger[i];
if (!getBoolMapping(device, dc, cState, eState, tp)) if (!getBoolMapping2(device, dc, cState, eState, tp, fieldMapping))
{ {
subtriggeractivated = false; subtriggeractivated = false;
break; break;
@ -1412,7 +1420,7 @@ namespace DS4Windows
for (int i = 0, arlen = action.trigger.Count; i < arlen; i++) for (int i = 0, arlen = action.trigger.Count; i < arlen; i++)
{ {
DS4Controls dc = action.trigger[i]; DS4Controls dc = action.trigger[i];
if (!getBoolMapping(device, dc, cState, eState, tp)) if (!getBoolMapping2(device, dc, cState, eState, tp, fieldMapping))
{ {
subtriggeractivated = false; subtriggeractivated = false;
break; break;
@ -1434,7 +1442,7 @@ namespace DS4Windows
for (int i = 0, arlen = action.trigger.Count; i < arlen; i++) for (int i = 0, arlen = action.trigger.Count; i < arlen; i++)
{ {
DS4Controls dc = action.trigger[i]; DS4Controls dc = action.trigger[i];
if (!getBoolMapping(device, dc, cState, eState, tp)) if (!getBoolMapping2(device, dc, cState, eState, tp, fieldMapping))
{ {
triggeractivated = false; triggeractivated = false;
break; break;
@ -1450,7 +1458,7 @@ namespace DS4Windows
for (int i = 0, arlen = action.uTrigger.Count; i < arlen; i++) for (int i = 0, arlen = action.uTrigger.Count; i < arlen; i++)
{ {
DS4Controls dc = action.uTrigger[i]; DS4Controls dc = action.uTrigger[i];
if (!getBoolMapping(device, dc, cState, eState, tp)) if (!getBoolMapping2(device, dc, cState, eState, tp, fieldMapping))
{ {
utriggeractivated = false; utriggeractivated = false;
break; break;
@ -1674,10 +1682,14 @@ namespace DS4Windows
string[] dets = action.details.Split(','); string[] dets = action.details.Split(',');
DS4Device d = ctrl.DS4Controllers[device]; DS4Device d = ctrl.DS4Controllers[device];
//cus //cus
if (getBoolMapping(device, action.trigger[0], cState, eState, tp) && !getBoolMapping(device, action.trigger[0], d.getPreviousState(), eState, tp))
{//pressed down bool activeCur = getBoolMapping2(device, action.trigger[0], cState, eState, tp, fieldMapping);
bool activePrev = getBoolMapping2(device, action.trigger[0], d.getPreviousState(), eState, tp, fieldMapping);
if (activeCur && !activePrev)
{
// pressed down
pastTime = DateTime.UtcNow; pastTime = DateTime.UtcNow;
if (DateTime.UtcNow <= (firstTap + TimeSpan.FromMilliseconds(150))) if (pastTime <= (firstTap + TimeSpan.FromMilliseconds(150)))
{ {
tappedOnce = false; tappedOnce = false;
secondtouchbegin = true; secondtouchbegin = true;
@ -1685,8 +1697,9 @@ namespace DS4Windows
else else
firstTouch = true; firstTouch = true;
} }
else if (!getBoolMapping(device, action.trigger[0], cState, eState, tp) && getBoolMapping(device, action.trigger[0], d.getPreviousState(), eState, tp)) else if (!activeCur && activePrev)
{//released {
// released
if (secondtouchbegin) if (secondtouchbegin)
{ {
firstTouch = false; firstTouch = false;
@ -1793,7 +1806,7 @@ namespace DS4Windows
for (int i = 0, uTrigLen = action.uTrigger.Count; i < uTrigLen; i++) for (int i = 0, uTrigLen = action.uTrigger.Count; i < uTrigLen; i++)
{ {
DS4Controls dc = action.uTrigger[i]; DS4Controls dc = action.uTrigger[i];
if (!getBoolMapping(device, dc, cState, eState, tp)) if (!getBoolMapping2(device, dc, cState, eState, tp, fieldMapping))
{ {
utriggeractivated = false; utriggeractivated = false;
break; break;
@ -1985,6 +1998,7 @@ namespace DS4Windows
for (int i = 0, arlength = keydown.Length; i < arlength; i++) for (int i = 0, arlength = keydown.Length; i < arlength; i++)
{ {
if (keydown[i]) if (keydown[i])
{
if (i == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP); //anything above 255 is not a keyvalue if (i == 256) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_LEFTUP); //anything above 255 is not a keyvalue
else if (i == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTUP); else if (i == 257) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_RIGHTUP);
else if (i == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEUP); else if (i == 258) InputMethods.MouseEvent(InputMethods.MOUSEEVENTF_MIDDLEUP);
@ -2019,7 +2033,9 @@ namespace DS4Windows
InputMethods.performSCKeyRelease((ushort)i); InputMethods.performSCKeyRelease((ushort)i);
else else
InputMethods.performKeyRelease((ushort)i); InputMethods.performKeyRelease((ushort)i);
}
} }
DS4LightBar.forcedFlash[device] = 0; DS4LightBar.forcedFlash[device] = 0;
DS4LightBar.forcelight[device] = false; DS4LightBar.forcelight[device] = false;
Program.rootHub.DS4Controllers[device].setRumble(0, 0); Program.rootHub.DS4Controllers[device].setRumble(0, 0);
@ -2037,6 +2053,7 @@ namespace DS4Windows
{ {
if ((macro.StartsWith("164/9/9/164") || macro.StartsWith("18/9/9/18")) && !altTabDone) if ((macro.StartsWith("164/9/9/164") || macro.StartsWith("18/9/9/18")) && !altTabDone)
AltTabSwappingRelease(); AltTabSwappingRelease();
if (control != DS4Controls.None) if (control != DS4Controls.None)
macrodone[DS4ControltoInt(control)] = false; macrodone[DS4ControltoInt(control)] = false;
} }
@ -2187,7 +2204,7 @@ namespace DS4Windows
} }
} }
if (MouseAccel[device]) if (getMouseAccel(device))
{ {
if (value > 0) if (value > 0)
{ {
@ -2243,11 +2260,14 @@ namespace DS4Windows
public static bool compare(byte b1, byte b2) public static bool compare(byte b1, byte b2)
{ {
bool result = true;
if (Math.Abs(b1 - b2) > 10) if (Math.Abs(b1 - b2) > 10)
{ {
return false; result = false;
} }
return true;
return result;
} }
public static byte getByteMapping(int device, DS4Controls control, DS4State cState, DS4StateExposed eState, Mouse tp) public static byte getByteMapping(int device, DS4Controls control, DS4State cState, DS4StateExposed eState, Mouse tp)

View File

@ -464,6 +464,10 @@ namespace DS4Windows
return m_Config.RSSens[index]; return m_Config.RSSens[index];
} }
public static bool[] MouseAccel => m_Config.mouseAccel; public static bool[] MouseAccel => m_Config.mouseAccel;
public static bool getMouseAccel(int device)
{
return m_Config.mouseAccel[device];
}
public static string[] LaunchProgram => m_Config.launchProgram; public static string[] LaunchProgram => m_Config.launchProgram;
public static string[] ProfilePath => m_Config.profilePath; public static string[] ProfilePath => m_Config.profilePath;
public static bool[] DistanceProfiles = m_Config.distanceProfiles; public static bool[] DistanceProfiles = m_Config.distanceProfiles;