public void SetLeftTriggerState(DualSenseTriggerState state) { flags1 |= Flags1.LeftTrigger; fixed(byte *p = leftTriggerParams) { SetTriggerState(state, ref leftTriggerMode, p); } }
public void SetRightTriggerState(DualSenseTriggerState state) { flags1 |= Flags1.RightTrigger; fixed(byte *p = rightTriggerParams) { SetTriggerState(state, ref rightTriggerMode, p); } }
private void SetTriggerState(DualSenseTriggerState state, ref byte triggerMode, byte *triggerParams) { switch (state.EffectType) { case DualSenseTriggerEffectType.NoResistance: triggerMode = 0x00; ClearTriggerParams(triggerParams); break; case DualSenseTriggerEffectType.ContinuousResistance: triggerMode = 0x01; ClearTriggerParams(triggerParams); triggerParams[0] = state.Continuous.StartPosition; triggerParams[1] = state.Continuous.Force; break; case DualSenseTriggerEffectType.SectionResistance: triggerMode = 0x02; ClearTriggerParams(triggerParams); triggerParams[0] = state.Section.StartPosition; triggerParams[1] = state.Section.EndPosition; triggerParams[2] = state.Section.Force; break; case DualSenseTriggerEffectType.EffectEx: triggerMode = 0x26; ClearTriggerParams(triggerParams); triggerParams[0] = (byte)(0xff - state.EffectEx.StartPosition); triggerParams[1] = (byte)(state.EffectEx.KeepEffect ? 0x02 : 0x00); triggerParams[3] = state.EffectEx.BeginForce; triggerParams[4] = state.EffectEx.MiddleForce; triggerParams[5] = state.EffectEx.EndForce; triggerParams[8] = state.EffectEx.Frequency; break; case DualSenseTriggerEffectType.Calibrate: triggerMode = 0xFC; ClearTriggerParams(triggerParams); break; default: throw new ArgumentOutOfRangeException(); } }