public void UpdateState() { this.caps = OpenTK.Input.Joystick.GetCapabilities(this.deviceIndex); this.state = OpenTK.Input.Joystick.GetState(this.deviceIndex); // Due to OpenTK sometimes reporting the wrong hat count, adjust its value when required { int highestInputHat = 0; if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat3).Position != OpenTK.Input.HatPosition.Centered) { highestInputHat = 4; } else if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat2).Position != OpenTK.Input.HatPosition.Centered) { highestInputHat = 3; } else if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat1).Position != OpenTK.Input.HatPosition.Centered) { highestInputHat = 2; } else if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat0).Position != OpenTK.Input.HatPosition.Centered) { highestInputHat = 1; } this.detectedHatCount = Math.Max(this.detectedHatCount, highestInputHat); } }
public Joystick(int Index) { this._Index = Index; this._Joy = OpenTK.Input.Joystick.GetState(this._Index); this.LeftAxisChange = new AxisEvent(this.OnLeftChange); this.RightAxisChange = new AxisEvent(this.OnRightChange); this.JoystickButtonPress = new ButtonPress(this.OnButtonPress); this._Pressed = new List <JoystickButton>(); this._Time = new System.Timers.Timer(10); this._Time.Elapsed += new System.Timers.ElapsedEventHandler(this.TimerTick); this._Time.Start(); }
public void UpdateState() { this.caps = OpenTK.Input.Joystick.GetCapabilities(this.deviceIndex); this.state = OpenTK.Input.Joystick.GetState(this.deviceIndex); // Due to OpenTK sometimes reporting the wrong hat count, adjust its value when required { int highestInputHat = 0; if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat3).Position != OpenTK.Input.HatPosition.Centered) highestInputHat = 4; else if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat2).Position != OpenTK.Input.HatPosition.Centered) highestInputHat = 3; else if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat1).Position != OpenTK.Input.HatPosition.Centered) highestInputHat = 2; else if (this.state.GetHat(OpenTK.Input.JoystickHat.Hat0).Position != OpenTK.Input.HatPosition.Centered) highestInputHat = 1; this.detectedHatCount = Math.Max(this.detectedHatCount, highestInputHat); } }
private void TimerTick(object sender, System.Timers.ElapsedEventArgs e) { this._Joy = OpenTK.Input.Joystick.GetState(this._Index); if (!_Joy.IsConnected) { return; } AxisState Left = this.GetLeftAxis(); if (Left.Status == AxisStateStatus.Angle) { LeftAxisChange.Invoke(Left.Angle); } AxisState Right = this.GetRightAxis(); if (Right.Status == AxisStateStatus.Angle) { RightAxisChange.Invoke(Right.Angle); } ButtonPressCheck(); }
private AxisState GetRightAxis() { this._Joy = OpenTK.Input.Joystick.GetState(this._Index); AxisState State = new AxisState(); if (Math.Abs(this._Joy.GetAxis(OpenTK.Input.JoystickAxis.Axis3)) > 0.004 || Math.Abs(this._Joy.GetAxis(OpenTK.Input.JoystickAxis.Axis2)) > 0.004) { Vertex V = new Vertex(this._Joy.GetAxis(OpenTK.Input.JoystickAxis.Axis2), this._Joy.GetAxis(OpenTK.Input.JoystickAxis.Axis3)); if (Vertex.Distance(V, new Vertex()) < 0.25f) { State.Status = AxisStateStatus.None; } else { State.Status = AxisStateStatus.Angle; State.Angle = -(Math.Atan2(this._Joy.GetAxis(OpenTK.Input.JoystickAxis.Axis3), this._Joy.GetAxis(OpenTK.Input.JoystickAxis.Axis2)) * (360 / (Math.PI * 2)) - 180); } } else { State.Status = AxisStateStatus.None; } return(State); }
public void tポーリング(bool bWindowがアクティブ中) { #region [ bButtonフラグ初期化 ] for (int i = 0; i < 256; i++) { this.bButtonPushDown[i] = false; this.bButtonPullUp[i] = false; } #endregion if (bWindowがアクティブ中) { this.list入力イベント.Clear(); #region [ 入力 ] OpenTK.Input.JoystickState ButtonState = OpenTK.Input.Joystick.GetState(ID); if (ButtonState.IsConnected) { #region [X軸] if (ButtonState.GetAxis(0) < -0.5) //JoystickAxisがない?ので数値指定 { if (this.bButtonState[0] == false) { STInputEvent ev = new STInputEvent() { nKey = 0, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[0] = true; this.bButtonPushDown[0] = true; } } else { if (this.bButtonState[0] == true) { STInputEvent ev = new STInputEvent() { nKey = 0, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[0] = false; this.bButtonPullUp[0] = true; } } if (ButtonState.GetAxis(0) > 0.5) { if (this.bButtonState[1] == false) { STInputEvent ev = new STInputEvent() { nKey = 1, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[1] = true; this.bButtonPushDown[1] = true; } } else { if (this.bButtonState[1] == true) { STInputEvent ev = new STInputEvent() { nKey = 1, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[1] = false; this.bButtonPullUp[1] = true; } } #endregion #region [Y軸] if (ButtonState.GetAxis(1) < -0.5) //JoystickAxisがない?ので数値指定 { if (this.bButtonState[2] == false) { STInputEvent ev = new STInputEvent() { nKey = 2, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[2] = true; this.bButtonPushDown[2] = true; } } else { if (this.bButtonState[2] == true) { STInputEvent ev = new STInputEvent() { nKey = 2, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[2] = false; this.bButtonPullUp[2] = true; } } if (ButtonState.GetAxis(1) > 0.5) { if (this.bButtonState[3] == false) { STInputEvent ev = new STInputEvent() { nKey = 3, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[3] = true; this.bButtonPushDown[3] = true; } } else { if (this.bButtonState[3] == true) { STInputEvent ev = new STInputEvent() { nKey = 3, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[3] = false; this.bButtonPullUp[3] = true; } } #endregion #region [Z軸] if (ButtonState.GetAxis(2) < -0.5) //JoystickAxisがない?ので数値指定 { if (this.bButtonState[4] == false) { STInputEvent ev = new STInputEvent() { nKey = 4, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[4] = true; this.bButtonPushDown[4] = true; } } else { if (this.bButtonState[4] == true) { STInputEvent ev = new STInputEvent() { nKey = 4, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[4] = false; this.bButtonPullUp[4] = true; } } if (ButtonState.GetAxis(2) > 0.5) { if (this.bButtonState[5] == false) { STInputEvent ev = new STInputEvent() { nKey = 5, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[5] = true; this.bButtonPushDown[5] = true; } } else { if (this.bButtonState[5] == true) { STInputEvent ev = new STInputEvent() { nKey = 5, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[5] = false; this.bButtonPullUp[5] = true; } } #endregion #region [Z軸回転] if (ButtonState.GetAxis(3) < -0.5) //JoystickAxisがない?ので数値指定 { if (this.bButtonState[6] == false) { STInputEvent ev = new STInputEvent() { nKey = 6, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[6] = true; this.bButtonPushDown[6] = true; } } else { if (this.bButtonState[6] == true) { STInputEvent ev = new STInputEvent() { nKey = 6, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[6] = false; this.bButtonPullUp[6] = true; } } if (ButtonState.GetAxis(3) > 0.5) { if (this.bButtonState[7] == false) { STInputEvent ev = new STInputEvent() { nKey = 7, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[7] = true; this.bButtonPushDown[7] = true; } } else { if (this.bButtonState[7] == true) { STInputEvent ev = new STInputEvent() { nKey = 7, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(ev); this.bButtonState[7] = false; this.bButtonPullUp[7] = true; } } #endregion #region [POV] OpenTK.Input.JoystickHatState hatState = ButtonState.GetHat(OpenTK.Input.JoystickHat.Hat0); for (int i = 0; i < Enum.GetNames(typeof(OpenTK.Input.HatPosition)).Length; i++) { if (hatState.Position == (OpenTK.Input.HatPosition)i + 1) { if (this.bButtonState[8 + 128 + i] == false) { STInputEvent stevent = new STInputEvent() { nKey = 8 + 128 + i, //Debug.WriteLine( "POVS:" + povs[ 0 ].ToString( CultureInfo.CurrentCulture ) + ", " +stevent.nKey ); b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(stevent); this.bButtonState[stevent.nKey] = true; this.bButtonPushDown[stevent.nKey] = true; } } else { if (this.bButtonState[8 + 128 + i] == true) { STInputEvent stevent = new STInputEvent() { nKey = 8 + 128 + i, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = 0 }; this.list入力イベント.Add(stevent); this.bButtonState[stevent.nKey] = false; this.bButtonPullUp[stevent.nKey] = true; } } } #endregion #region [Button] for (int index = 0; index < 128; index++) { if (ButtonState.IsButtonDown(index)) { if (this.bButtonState[8 + index] == false) { STInputEvent item = new STInputEvent() { nKey = 8 + index, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(item); this.bButtonState[8 + index] = true; this.bButtonPushDown[8 + index] = true; } } else { if (this.bButtonState[8 + index] == true) { STInputEvent item = new STInputEvent() { nKey = 8 + index, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(item); this.bButtonState[8 + index] = false; this.bButtonPullUp[8 + index] = true; } } } #endregion } #endregion } }
public void UpdateState() { this.caps = OpenTK.Input.Joystick.GetCapabilities(this.deviceIndex); this.state = OpenTK.Input.Joystick.GetState(this.deviceIndex); }