Exemple #1
0
        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);
            }
        }
Exemple #2
0
 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);
			}
		}
Exemple #4
0
        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();
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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);
 }
Exemple #8
0
 public void UpdateState()
 {
     this.caps  = OpenTK.Input.Joystick.GetCapabilities(this.deviceIndex);
     this.state = OpenTK.Input.Joystick.GetState(this.deviceIndex);
 }