/// <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); }
//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 ); } } }