public static void SetJoystickCallback(JoystickCallback callback) { lock (Lock) { CallbackCache[nameof(SetJoystickCallback)] = callback; } SetJoystickCallback(callback == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(callback)); }
internal static void UpdateData() { JoystickCallback?.Invoke(); if (SimData.s_halNewDataSem != IntPtr.Zero) { throw new ArgumentOutOfRangeException(); // TODO:: FIX //SimulatorHAL.HALSemaphore.giveMultiWait(SimData.s_halNewDataSem); } }
/// <summary> /// Sets the joystick callback for the current window. /// </summary> /// <param name="func"> /// The new joystick callback function. See <see cref="JoystickCallback" />. /// </param> /// <param name="pollInterval"> /// Joystick polling interval in milliseconds. /// </param> /// <remarks> /// <para> /// <b>glutJoystickFunc</b> sets the joystick callback for the current window. /// </para> /// <para> /// The joystick callback is called either due to polling of the joystick at the /// uniform timer interval specified by <i>pollInterval</i> (in milliseconds) or /// in response to calling <see cref="glutForceJoystickFunc" />. If the /// <i>pollInterval</i> is non-positive, no joystick polling is performed and the /// GLUT application must frequently (usually from an idle callback) call /// <b>glutForceJoystickFunc</b>. /// </para> /// <para> /// The joystick buttons are reported by the callback's <i>buttonMask</i> /// parameter. The constants <see cref="GLUT_JOYSTICK_BUTTON_A" /> (0x1), /// <see cref="GLUT_JOYSTICK_BUTTON_B" /> (0x2), /// <see cref="GLUT_JOYSTICK_BUTTON_C" /> (0x4), and /// <see cref="GLUT_JOYSTICK_BUTTON_D" /> (0x8) are provided for programming /// convience. /// </para> /// <para> /// The <i>x</i>, <i>y</i>, and <i>z</i> callback parameters report the X, Y, and /// Z axes of the joystick. The joystick is centered at (0, 0, 0). X, Y, and Z /// are scaled to range between -1000 and 1000. Moving the joystick left reports /// negative X; right reports positive X. Pulling the stick towards you reports /// negative Y; push the stick away from you reports positive Y. If the joystick /// has a third axis (rudder or up/down), down reports negative Z; up reports /// positive Z. /// </para> /// <para> /// Passing a <c>null</c> to <b>glutJoystickFunc</b> disables the generation of /// joystick callbacks. Without a joystick callback registered, /// <b>glutForceJoystickFunc</b> does nothing. /// </para> /// <para> /// When a new window is created, no joystick callback is initially registered. /// </para> /// <para> /// <b>LIMITATIONS</b> /// </para> /// <para> /// The GLUT joystick callback only reports the first 3 axes and 32 buttons. /// GLUT supports only a single joystick. /// </para> /// <para> /// <b>X IMPLEMENTATION NOTES</b> /// </para> /// <para> /// The GLUT 3.7 implementation of GLUT for X11 supports the joystick API, but not /// joystick input. A future implementation of GLUT for X11 may add joystick /// support. /// </para> /// <para> /// <b>WIN32 IMPLEMENTATION NOTES</b> /// </para> /// <para> /// The GLUT 3.7 implementation of GLUT for Win32 supports the joystick API and /// joystick input, but does so through the dated <c>joySetCapture</c> and /// <c>joyGetPosEx</c> Win32 Multimedia API. The GLUT 3.7 joystick support for /// Win32 has all the limitations of the Win32 Multimedia API joystick support. /// A future implementation of GLUT for Win32 may use DirectInput. /// </para> /// <para> /// <b>GLUT IMPLEMENTATION NOTES FOR NON-ANALOG JOYSTICKS</b> /// </para> /// <para> /// If the connected joystick does not return (x, y, z) as a continuous range (for /// example, an 8 position Atari 2600 joystick), the implementation should report /// the most extreme (x, y, z) location. That is, if a 2D joystick is pushed to /// the upper left, report (-1000, 1000, 0). /// </para> /// </remarks> /// <seealso cref="JoystickCallback" /> /// <seealso cref="glutButtonBoxFunc" /> /// <seealso cref="glutDeviceGet" /> /// <seealso cref="glutForceJoystickFunc" /> /// <seealso cref="glutMotionFunc" /> /// <seealso cref="glutMouseFunc" /> /// <seealso cref="glutSpaceballButtonFunc" /> /// <seealso cref="glutSpaceballMotionFunc" /> /// <seealso cref="glutTabletButtonFunc" /> // GLUTAPI void APIENTRY glutJoystickFunc(void (GLUTCALLBACK *func)(unsigned int buttonMask, int x, int y, int z), int pollInterval); public static void glutJoystickFunc([In] JoystickCallback func, int pollInterval) { joystickCallback = func; __glutJoystickFunc(joystickCallback, pollInterval); }
private static extern void __glutJoystickFunc(JoystickCallback func, int pollInterval);