Ejemplo n.º 1
0
        /// <summary>
        /// 必要に応じて軸ボタンの上げ下げイベントを発生する
        /// </summary>
        /// <param name="target">軸ボタン番号 0=-X 1=+X ... 5=+Z</param>
        /// <param name="data"></param>
        /// <param name="currentMode">直前のボタン状態 true=押されていた</param>
        /// <returns>上げ下げイベント発生時true</returns>
        private bool bDoUpDownCore(int target, RawBufferedData data, bool lastMode)
        {
            if (this.bButtonState[target] == lastMode)
            {
                STInputEvent e = new STInputEvent()
                {
                    nKey       = target,
                    b押された      = !lastMode,
                    nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換(data.Timestamp),
                };
                this.list入力イベント.Add(e);

                this.bButtonState[target] = !lastMode;
                if (lastMode)
                {
                    this.bButtonPullUp[target] = true;
                }
                else
                {
                    this.bButtonPushDown[target] = true;
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
        //private CTimer timer;

        private void bButtonUpDown(RawBufferedData data, int axisdata, int target, int contrary)                // #26871 2011.12.3 軸の反転に対応するためにリファクタ
        {
            int targetsign = (target < contrary) ? -1 : 1;

            if (Math.Abs(axisdata) > 500 && (targetsign == Math.Sign(axisdata)))                                        // 軸の最大値の半分を超えていて、かつ
            {
                if (bDoUpDownCore(target, data, false))                                                                 // 直前までは超えていなければ、今回ON
                {
                    //Debug.WriteLine( "X-ON " + data.TimeStamp + " " + axisdata );
                }
                else
                {
                    //Debug.WriteLine( "X-ONx " + data.TimeStamp + " " + axisdata );
                }
                bDoUpDownCore(contrary, data, true);                                                                    // X軸+ == ON から X軸-のONレンジに来たら、X軸+はOFF
            }
            else if ((axisdata <= 0 && targetsign <= 0) || (axisdata >= 0 && targetsign >= 0))                          // 軸の最大値の半分を超えておらず、かつ
            {
                //Debug.WriteLine( "X-OFF? " + data.TimeStamp + " " + axisdata );
                if (bDoUpDownCore(target, data, true))                                                                                                          // 直前までは超えていたのならば、今回OFF
                {
                    //Debug.WriteLine( "X-OFF " + data.TimeStamp + " " + axisdata );
                }
                else if (bDoUpDownCore(contrary, data, true))                                                                                           // X軸+ == ON から X軸-のOFFレンジにきたら、X軸+はOFF
                {
                    //Debug.WriteLine( "X-OFFx " + data.TimeStamp + " " + axisdata );
                }
            }
        }