+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Diagnostics;\r
-using SharpDX;\r
-using SharpDX.DirectInput;\r
-\r
-namespace FDK\r
-{\r
- public class CInputMouse : IInputDevice, IDisposable\r
- {\r
- // 定数\r
-\r
- public const int nマウスの最大ボタン数 = 8;\r
-\r
-\r
- // コンストラクタ\r
-\r
- public CInputMouse( IntPtr hWnd, DirectInput directInput )\r
- {\r
- this.e入力デバイス種別 = E入力デバイス種別.Mouse;\r
- this.GUID = "";\r
- this.ID = 0;\r
- try\r
- {\r
- this.devMouse = new Mouse( directInput );\r
- this.devMouse.SetCooperativeLevel( hWnd, CooperativeLevel.Foreground | CooperativeLevel.NonExclusive );\r
- this.devMouse.Properties.BufferSize = 0x20;\r
- Trace.TraceInformation( this.devMouse.Information.ProductName + " を生成しました。" );\r
- }\r
- catch\r
- {\r
- if( this.devMouse != null )\r
- {\r
- this.devMouse.Dispose();\r
- this.devMouse = null;\r
- }\r
- Trace.TraceWarning( "Mouse デバイスの生成に失敗しました。" );\r
- throw;\r
- }\r
- try\r
- {\r
- this.devMouse.Acquire();\r
- }\r
- catch\r
- {\r
- }\r
-\r
- for( int i = 0; i < this.bMouseState.Length; i++ )\r
- this.bMouseState[ i ] = false;\r
-\r
- //this.timer = new CTimer( CTimer.E種別.MultiMedia );\r
- this.list入力イベント = new List<STInputEvent>( 32 );\r
- }\r
-\r
-\r
- // メソッド\r
-\r
- #region [ IInputDevice 実装 ]\r
- //-----------------\r
- public E入力デバイス種別 e入力デバイス種別 { get; private set; }\r
- public string GUID { get; private set; }\r
- public int ID { get; private set; }\r
- public List<STInputEvent> list入力イベント { get; private set; }\r
-\r
- public void tポーリング( bool bWindowがアクティブ中, bool bバッファ入力を使用する )\r
- {\r
- for( int i = 0; i < 8; i++ )\r
- {\r
- this.bMousePushDown[ i ] = false;\r
- this.bMousePullUp[ i ] = false;\r
- }\r
-\r
- if( bWindowがアクティブ中 && ( this.devMouse != null ) )\r
- {\r
- this.devMouse.Acquire();\r
- this.devMouse.Poll();\r
-\r
- // this.list入力イベント = new List<STInputEvent>( 32 );\r
- this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new();\r
-\r
- if( bバッファ入力を使用する )\r
- {\r
- #region [ a.バッファ入力 ]\r
- //-----------------------------\r
- var bufferedData = this.devMouse.GetBufferedData();\r
- //if( Result.Last.IsSuccess && bufferedData != null )\r
- {\r
- foreach( MouseUpdate data in bufferedData )\r
- {\r
- var mouseButton = new[] {\r
- MouseOffset.Buttons0,\r
- MouseOffset.Buttons1,\r
- MouseOffset.Buttons2,\r
- MouseOffset.Buttons3,\r
- MouseOffset.Buttons4,\r
- MouseOffset.Buttons5,\r
- MouseOffset.Buttons6,\r
- MouseOffset.Buttons7,\r
- };\r
-\r
- for( int k = 0; k < 8; k++ )\r
- {\r
- //if( data.IsPressed( k ) )\r
- if( data.Offset == mouseButton[ k ] && ( ( data.Value & 0x80 ) != 0 ) )\r
- {\r
- STInputEvent item = new STInputEvent()\r
- {\r
- nKey = k,\r
- b押された = true,\r
- b離された = false,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.Timestamp ),\r
- nVelocity = CInput管理.n通常音量\r
- };\r
- this.list入力イベント.Add( item );\r
-\r
- this.bMouseState[ k ] = true;\r
- this.bMousePushDown[ k ] = true;\r
- }\r
- else if( data.Offset == mouseButton[ k ] && this.bMouseState[ k ] == true && ( ( data.Value & 0x80 ) == 0 ) )\r
- //else if( data.IsReleased( k ) )\r
- {\r
- STInputEvent item = new STInputEvent()\r
- {\r
- nKey = k,\r
- b押された = false,\r
- b離された = true,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.Timestamp ),\r
- nVelocity = CInput管理.n通常音量\r
- };\r
- this.list入力イベント.Add( item );\r
-\r
- this.bMouseState[ k ] = false;\r
- this.bMousePullUp[ k ] = true;\r
- }\r
- }\r
- }\r
- }\r
- //-----------------------------\r
- #endregion\r
- }\r
- else\r
- {\r
- #region [ b.状態入力 ]\r
- //-----------------------------\r
- MouseState currentState = this.devMouse.GetCurrentState();\r
- //if( Result.Last.IsSuccess && currentState != null )\r
- {\r
- bool[] buttons = currentState.Buttons;\r
-\r
- for( int j = 0; ( j < buttons.Length ) && ( j < 8 ); j++ )\r
- {\r
- if( this.bMouseState[ j ] == false && buttons[ j ] == true )\r
- {\r
- var ev = new STInputEvent() {\r
- nKey = j,\r
- b押された = true,\r
- b離された = false,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。\r
- nVelocity = CInput管理.n通常音量,\r
- };\r
- this.list入力イベント.Add( ev );\r
-\r
- this.bMouseState[ j ] = true;\r
- this.bMousePushDown[ j ] = true;\r
- }\r
- else if( this.bMouseState[ j ] == true && buttons[ j ] == false )\r
- {\r
- var ev = new STInputEvent() {\r
- nKey = j,\r
- b押された = false,\r
- b離された = true,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。\r
- nVelocity = CInput管理.n通常音量,\r
- };\r
- this.list入力イベント.Add( ev );\r
-\r
- this.bMouseState[ j ] = false;\r
- this.bMousePullUp[ j ] = true;\r
- }\r
- }\r
- }\r
- //-----------------------------\r
- #endregion\r
- }\r
- }\r
- }\r
- public bool bキーが押された( int nButton )\r
- {\r
- return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && this.bMousePushDown[ nButton ] );\r
- }\r
- public bool bキーが押されている( int nButton )\r
- {\r
- return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && this.bMouseState[ nButton ] );\r
- }\r
- public bool bキーが離された( int nButton )\r
- {\r
- return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && this.bMousePullUp[ nButton ] );\r
- }\r
- public bool bキーが離されている( int nButton )\r
- {\r
- return ( ( ( 0 <= nButton ) && ( nButton < 8 ) ) && !this.bMouseState[ nButton ] );\r
- }\r
- //-----------------\r
- #endregion\r
-\r
- #region [ IDisposable 実装 ]\r
- //-----------------\r
- public void Dispose()\r
- {\r
- if( !this.bDispose完了済み )\r
- {\r
- if( this.devMouse != null )\r
- {\r
- this.devMouse.Dispose();\r
- this.devMouse = null;\r
- }\r
- //if( this.timer != null )\r
- //{\r
- // this.timer.Dispose();\r
- // this.timer = null;\r
- //}\r
- if ( this.list入力イベント != null )\r
- {\r
- this.list入力イベント = null;\r
- }\r
- this.bDispose完了済み = true;\r
- }\r
- }\r
- //-----------------\r
- #endregion\r
-\r
-\r
- // その他\r
-\r
- #region [ private ]\r
- //-----------------\r
- private bool bDispose完了済み;\r
- private bool[] bMousePullUp = new bool[ 8 ];\r
- private bool[] bMousePushDown = new bool[ 8 ];\r
- private bool[] bMouseState = new bool[ 8 ];\r
- private Mouse devMouse;\r
- //private CTimer timer;\r
- //-----------------\r
- #endregion\r
- }\r
-}\r