public void ProcessJoystickEvent(JoyAxisEvent ev) { int id = ev.Which; if (IsJoystickInstanceValid(id)) { int index = sdl_instanceid_to_joysticks[id]; JoystickDevice<Sdl2JoystickDetails> joystick = (JoystickDevice<Sdl2JoystickDetails>)joysticks[index]; float value = ev.Value * RangeMultiplier; joystick.SetAxis(ev.Axis, value); joystick.Details.PacketNumber = Math.Max(0, unchecked(joystick.Details.PacketNumber + 1)); } else { Debug.Print("[SDL2] Invalid joystick id {0} in {1}", id, ev.Type); } }
public void Poll() { foreach (JoystickDevice <WinMMJoystick.WinMMJoyDetails> joystickDevice1 in this.sticks) { WinMMJoystick.JoyInfoEx pji = new WinMMJoystick.JoyInfoEx(); pji.Size = WinMMJoystick.JoyInfoEx.SizeInBytes; pji.Flags = WinMMJoystick.JoystickFlags.All; int num1 = (int)WinMMJoystick.UnsafeNativeMethods.joyGetPosEx(joystickDevice1.Id, ref pji); int count = joystickDevice1.Axis.Count; if ((joystickDevice1.Details.PovType & WinMMJoystick.PovType.Exists) != WinMMJoystick.PovType.None) { count -= 2; } int axis = 0; if (axis < count) { joystickDevice1.SetAxis((JoystickAxis)axis, joystickDevice1.Details.CalculateOffset((float)pji.XPos, axis)); ++axis; } if (axis < count) { joystickDevice1.SetAxis((JoystickAxis)axis, joystickDevice1.Details.CalculateOffset((float)pji.YPos, axis)); ++axis; } if (axis < count) { joystickDevice1.SetAxis((JoystickAxis)axis, joystickDevice1.Details.CalculateOffset((float)pji.ZPos, axis)); ++axis; } if (axis < count) { joystickDevice1.SetAxis((JoystickAxis)axis, joystickDevice1.Details.CalculateOffset((float)pji.RPos, axis)); ++axis; } if (axis < count) { joystickDevice1.SetAxis((JoystickAxis)axis, joystickDevice1.Details.CalculateOffset((float)pji.UPos, axis)); ++axis; } if (axis < count) { joystickDevice1.SetAxis((JoystickAxis)axis, joystickDevice1.Details.CalculateOffset((float)pji.VPos, axis)); ++axis; } if ((joystickDevice1.Details.PovType & WinMMJoystick.PovType.Exists) != WinMMJoystick.PovType.None) { float num2 = 0.0f; float num3 = 0.0f; if ((int)(ushort)pji.Pov != (int)ushort.MaxValue) { if (pji.Pov > 27000 || pji.Pov < 9000) { num3 = 1f; } if (pji.Pov > 0 && pji.Pov < 18000) { num2 = 1f; } if (pji.Pov > 9000 && pji.Pov < 27000) { num3 = -1f; } if (pji.Pov > 18000) { num2 = -1f; } } JoystickDevice <WinMMJoystick.WinMMJoyDetails> joystickDevice2 = joystickDevice1; int num4 = axis; int num5 = 1; int num6 = num4 + num5; double num7 = (double)num2; joystickDevice2.SetAxis((JoystickAxis)num4, (float)num7); JoystickDevice <WinMMJoystick.WinMMJoyDetails> joystickDevice3 = joystickDevice1; int num8 = num6; int num9 = 1; int num10 = num8 + num9; double num11 = (double)num3; joystickDevice3.SetAxis((JoystickAxis)num8, (float)num11); } for (int index = 0; index < joystickDevice1.Button.Count; ++index) { joystickDevice1.SetButton((JoystickButton)index, ((long)pji.Buttons & (long)(1 << index)) != 0L); } } }