// 表示更新 // e.UserState: ゲームパッド入力値 private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { GamepadInput padInput = (GamepadInput)e.UserState; // アナログスティック for (int i = 0; i < 4; i++) { tb_stick[i].Text = padInput.val[i].ToString(); } // スタートボタン if (padInput.startButton) { buttonControl_Click(null, null); } }
// ゲームパッド入力処理 // return: 押されたボタン public GamepadInput Get() { GamepadInput ret = new GamepadInput(); if (!available) { return(ret); } // キャプチャするデバイスを取得 try { joystick.Acquire(); joystick.Poll(); } catch { joystick?.Dispose(); joystick = null; MessageBox.Show("ゲームパッドが抜けました"); available = false; return(ret); } // ゲームパッドのデータ取得 var jState = joystick.GetCurrentState(); // 取得できない場合、処理終了 if (jState == null) { return(ret); } // アナログスティックの値 ret.val[0] = jState.X; ret.val[1] = jState.Y; ret.val[2] = jState.Z; ret.val[3] = jState.RotationZ; // スタートボタンの立下り bool button = jState.Buttons[START_BUTTON - 1]; ret.startButton = (!startButtonOld && button) ? true : false; startButtonOld = button; return(ret); }