protected void JoypadConnectionEvent(IJoypad j, bool connected) { JoypadConnection?.Invoke(this, new JoypadConnectionEventArgs { Connected = connected, Joypad = j }); }
/// <summary>Assigns a specific joypad.</summary> /// <param name="joypadIndex">The idnex of the joypad to assign.</param> /// <param name="joypad">The joypad instance to use, or null to unassign.</param> public IJoypad SetJoypad(int joypadIndex, IJoypad joypad) { joypad = joypad ?? DummyJoypad.Instance; switch (joypadIndex) { case 0: return(SwapJoypad(ref joypad0, joypad)); case 1: return(SwapJoypad(ref joypad1, joypad)); case 2: return(SwapJoypad(ref joypad2, joypad)); case 3: return(SwapJoypad(ref joypad3, joypad)); default: throw new ArgumentOutOfRangeException(nameof(joypad)); } }
private static IJoypad SwapJoypad(ref IJoypad storage, IJoypad newValue) { var oldValue = Interlocked.Exchange(ref storage, newValue); return(oldValue is DummyJoypad ? null : oldValue); }