/// <summary> /// Creates new instance of gamepad. /// </summary> /// <param name="id">GamepadState id, values are between 0-3.</param> internal Gamepad(ushort id) { if (id > 3) { throw new ArgumentException("Id value cannot be higher than 3."); } Id = id; XInputLib.Enable(true); UpdateState(); //Events are being registered after initial state is set, so they aren't triggered by initial state setup. RegisterButtonEvents(); }
/// <summary> /// Vibrates gamepad. /// </summary> /// <param name="leftMotorSpeed"> /// Speed of the left motor. Valid values are in the range 0 to 1. Zero signifies no motor use; 1 signifies /// 100 percent motor use. /// </param> /// <param name="rightMotorSpeed"> /// Speed of the Right motor. Valid values are in the range 0 to 65,535. Zero signifies no motor use; 65,535 signifies /// 100 percent motor use. /// </param> public void Vibrate(float leftMotorSpeed, float rightMotorSpeed) { if (leftMotorSpeed > 1 || rightMotorSpeed > 1) { throw new ArgumentException("Motor speeds must be between 0 and 1."); } var vibration = new Vibration { LeftMotorSpeed = (ushort)(leftMotorSpeed * 65535), RightMotorSpeed = (ushort)(rightMotorSpeed * 65535) }; XInputLib.SetState(Id, ref vibration); }
/// <summary> /// Updates gamepad state. /// </summary> public void UpdateState() { var state = new State(); if (XInputLib.GetState(Id, ref state) == 0) { if (!IsActive) { IsActive = true; } foreach (var button in Buttons.Values) { button.UpdateState(state); } } else { if (IsActive) { IsActive = false; } } }