using System.Collections.Generic;\r
using System.Text;\r
using System.Diagnostics;\r
-using SlimDX;\r
-using SlimDX.DirectInput;\r
+using SharpDX;\r
+using SharpDX.DirectInput;\r
\r
namespace FDK\r
{\r
this.devJoystick.Properties.BufferSize = 32;\r
Trace.TraceInformation( this.devJoystick.Information.InstanceName + "を生成しました。" );\r
}\r
- catch( DirectInputException )\r
+ catch\r
{\r
if( this.devJoystick != null )\r
{\r
}\r
foreach( DeviceObjectInstance instance in this.devJoystick.GetObjects() )\r
{\r
- if( ( instance.ObjectType & ObjectDeviceType.Axis ) != ObjectDeviceType.All )\r
+ if( ( instance.ObjectId.Flags & DeviceObjectTypeFlags.Axis ) != DeviceObjectTypeFlags.All )\r
{\r
- this.devJoystick.GetObjectPropertiesById( (int) instance.ObjectType ).SetRange( -1000, 1000 );\r
- this.devJoystick.GetObjectPropertiesById( (int) instance.ObjectType ).DeadZone = 5000; // 50%をデッドゾーンに設定\r
+ this.devJoystick.GetObjectPropertiesById( instance.ObjectId ).Range = new InputRange( -1000, 1000 );\r
+ this.devJoystick.GetObjectPropertiesById( instance.ObjectId ).DeadZone = 5000; // 50%をデッドゾーンに設定\r
// 軸をON/OFFの2値で使うならこれで十分\r
}\r
}\r
{\r
this.devJoystick.Acquire();\r
}\r
- catch( DirectInputException )\r
+ catch\r
{\r
}\r
\r
}\r
#endregion\r
\r
- if ( ( bWindowがアクティブ中 && !this.devJoystick.Acquire().IsFailure ) && !this.devJoystick.Poll().IsFailure )\r
+ if ( bWindowがアクティブ中 )\r
{\r
+ this.devJoystick.Acquire();\r
+ this.devJoystick.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
#region [ a.バッファ入力 ]\r
//-----------------------------\r
var bufferedData = this.devJoystick.GetBufferedData();\r
- if( Result.Last.IsSuccess && bufferedData != null )\r
+ //if( Result.Last.IsSuccess && bufferedData != null )\r
{\r
- foreach ( JoystickState data in bufferedData )\r
+ foreach ( JoystickUpdate data in bufferedData )\r
{\r
#if false\r
//if ( 0 < data.X && data.X < 128 && 0 < data.Y && data.Y < 128 && 0 < data.Z && data.Z < 128 )\r
Trace.TraceInformation( "TS={0}: IsPressed={1}, IsReleased={2}", data.TimeStamp, pp2, pp3 );\r
}\r
#endif\r
- switch ( data.JoystickDeviceType )\r
+ switch ( data.Offset )\r
{\r
- case (int)JoystickDeviceType.X:\r
+ case JoystickOffset.X:\r
#region [ X軸- ]\r
//-----------------------------\r
- bButtonUpDown( data, data.X, 0, 1 );\r
+ bButtonUpDown( data, data.Value, 0, 1 );\r
//-----------------------------\r
#endregion\r
#region [ X軸+ ]\r
//-----------------------------\r
- bButtonUpDown( data, data.X, 1, 0 );\r
+ bButtonUpDown( data, data.Value, 1, 0 );\r
//-----------------------------\r
#endregion\r
break;\r
- case (int)JoystickDeviceType.Y:\r
+ case JoystickOffset.Y:\r
#region [ Y軸- ]\r
//-----------------------------\r
- bButtonUpDown( data, data.Y, 2, 3 );\r
+ bButtonUpDown( data, data.Value, 2, 3 );\r
//-----------------------------\r
#endregion\r
#region [ Y軸+ ]\r
//-----------------------------\r
- bButtonUpDown( data, data.Y, 3, 2 );\r
+ bButtonUpDown( data, data.Value, 3, 2 );\r
+ //-----------------------------\r
#endregion\r
break;\r
- case (int)JoystickDeviceType.Z:\r
+ case JoystickOffset.Z:\r
#region [ Z軸- ]\r
//-----------------------------\r
- bButtonUpDown( data, data.Z, 4, 5 );\r
+ bButtonUpDown( data, data.Value, 4, 5 );\r
//-----------------------------\r
#endregion\r
#region [ Z軸+ ]\r
//-----------------------------\r
- bButtonUpDown( data, data.Z, 5, 4 );\r
+ bButtonUpDown( data, data.Value, 5, 4 );\r
+ //-----------------------------\r
#endregion\r
break;\r
- case (int)JoystickDeviceType.POV0:\r
- case (int)JoystickDeviceType.POV1:\r
- case (int)JoystickDeviceType.POV2:\r
- case (int)JoystickDeviceType.POV3:\r
- // #24341 2011.3.12 yyagi: POV support\r
- // #26880 2011.12.6 yyagi: improve to support "pullup" of POV buttons\r
+ // #24341 2011.3.12 yyagi: POV support\r
+ // #26880 2011.12.6 yyagi: improve to support "pullup" of POV buttons\r
+ case JoystickOffset.PointOfViewControllers0:\r
#region [ POV HAT 4/8way ]\r
- int[] povs = data.GetPointOfViewControllers();\r
- if ( povs != null )\r
- {\r
- STInputEvent e = new STInputEvent();\r
- int p = ( (int) data.JoystickDeviceType - (int) JoystickDeviceType.POV0 ) / ( (int) JoystickDeviceType.POV1 - (int) JoystickDeviceType.POV0 ); // p = 0,1,2,3\r
- // #31030 2013.3.25 yyagi; p is not 0123 but 048.. Sop must be divided into 4 ( POV1 - POV0 == 4).\r
- int nPovDegree = povs[ p ];\r
- int nWay = ( nPovDegree + 2250 ) / 4500;\r
- if ( nWay == 8 ) nWay = 0;\r
- //Debug.WriteLine( "POVS:" + povs[ 0 ].ToString( CultureInfo.CurrentCulture ) + ", " +stevent.nKey );\r
-//Debug.WriteLine( "nPovDegree=" + nPovDegree );\r
- if ( nPovDegree == -1 )\r
- {\r
- e.nKey = 6 + 128 + this.nPovState[ p ];\r
- this.nPovState[ p ] = -1;\r
-//Debug.WriteLine( "POVS離された" + data.TimeStamp + " " + e.nKey );\r
- e.b押された = false;\r
- e.nVelocity = 0;\r
- this.bButtonState[ e.nKey ] = false;\r
- this.bButtonPullUp[ e.nKey ] = true;\r
- } else {\r
- this.nPovState[ p ] = nWay;\r
- e.nKey = 6 + 128 + nWay;\r
- e.b押された = true;\r
- e.nVelocity = CInput管理.n通常音量;\r
- this.bButtonState[ e.nKey ] = true;\r
- this.bButtonPushDown[ e.nKey ] = true;\r
-//Debug.WriteLine( "POVS押された" + data.TimeStamp + " " + e.nKey );\r
- }\r
- //e.nTimeStamp = data.TimeStamp;\r
- e.nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.TimeStamp );\r
- this.list入力イベント.Add( e );\r
- }\r
+ POVの処理( 0, data.Value );\r
+ #endregion\r
+ break;\r
+ case JoystickOffset.PointOfViewControllers1:\r
+ #region [ POV HAT 4/8way ]\r
+ POVの処理( 1, data.Value );\r
+ #endregion\r
+ break;\r
+ case JoystickOffset.PointOfViewControllers2:\r
+ #region [ POV HAT 4/8way ]\r
+ POVの処理( 2, data.Value );\r
+ #endregion\r
+ break;\r
+ case JoystickOffset.PointOfViewControllers3:\r
+ #region [ POV HAT 4/8way ]\r
+ POVの処理( 3, data.Value );\r
#endregion\r
break;\r
default:\r
#region [ ボタン ]\r
//-----------------------------\r
- for ( int i = 0; i < 32; i++ )\r
+\r
+ //for ( int i = 0; i < 32; i++ )\r
+ if( data.Offset >= JoystickOffset.Buttons0 && data.Offset <= JoystickOffset.Buttons31 )\r
{\r
- if ( data.IsPressed( i ) )\r
+ int i = data.Offset - JoystickOffset.Buttons0;\r
+\r
+ if ( ( data.Value & 0x80 ) != 0 )\r
{\r
STInputEvent e = new STInputEvent()\r
{\r
nKey = 6 + i,\r
b押された = true,\r
b離された = false,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.TimeStamp ),\r
+ nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.Timestamp ),\r
nVelocity = CInput管理.n通常音量\r
};\r
this.list入力イベント.Add( e );\r
this.bButtonState[ 6 + i ] = true;\r
this.bButtonPushDown[ 6 + i ] = true;\r
}\r
- else if ( data.IsReleased( i ) )\r
+ else //if ( ( data.Value & 0x80 ) == 0 )\r
{\r
var ev = new STInputEvent()\r
{\r
nKey = 6 + i,\r
b押された = false,\r
b離された = true,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.TimeStamp ),\r
+ nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.Timestamp ),\r
nVelocity = CInput管理.n通常音量,\r
};\r
this.list入力イベント.Add( ev );\r
#endregion\r
break;\r
}\r
+\r
+ #region [ ローカル関数 ]\r
+ void POVの処理( int p, int nPovDegree )\r
+ {\r
+ STInputEvent e = new STInputEvent();\r
+ int nWay = ( nPovDegree + 2250 ) / 4500;\r
+ if( nWay == 8 ) nWay = 0;\r
+ //Debug.WriteLine( "POVS:" + povs[ 0 ].ToString( CultureInfo.CurrentCulture ) + ", " +stevent.nKey );\r
+ //Debug.WriteLine( "nPovDegree=" + nPovDegree );\r
+ if( nPovDegree == -1 )\r
+ {\r
+ e.nKey = 6 + 128 + this.nPovState[ p ];\r
+ this.nPovState[ p ] = -1;\r
+ //Debug.WriteLine( "POVS離された" + data.TimeStamp + " " + e.nKey );\r
+ e.b押された = false;\r
+ e.nVelocity = 0;\r
+ this.bButtonState[ e.nKey ] = false;\r
+ this.bButtonPullUp[ e.nKey ] = true;\r
+ }\r
+ else\r
+ {\r
+ this.nPovState[ p ] = nWay;\r
+ e.nKey = 6 + 128 + nWay;\r
+ e.b押された = true;\r
+ e.nVelocity = CInput管理.n通常音量;\r
+ this.bButtonState[ e.nKey ] = true;\r
+ this.bButtonPushDown[ e.nKey ] = true;\r
+ //Debug.WriteLine( "POVS押された" + data.TimeStamp + " " + e.nKey );\r
+ }\r
+ //e.nTimeStamp = data.TimeStamp;\r
+ e.nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.Timestamp );\r
+ this.list入力イベント.Add( e );\r
+ }\r
+ #endregion\r
}\r
}\r
//-----------------------------\r
#region [ b.状態入力 ]\r
//-----------------------------\r
JoystickState currentState = this.devJoystick.GetCurrentState();\r
- if( Result.Last.IsSuccess && currentState != null )\r
+ //if( Result.Last.IsSuccess && currentState != null )\r
{\r
#region [ X軸- ]\r
//-----------------------------\r
#region [ ボタン ]\r
//-----------------------------\r
bool bIsButtonPressedReleased = false;\r
- bool[] buttons = currentState.GetButtons();\r
+ bool[] buttons = currentState.Buttons;\r
for( int j = 0; ( j < buttons.Length ) && ( j < 128 ); j++ )\r
{\r
if( this.bButtonState[ 6 + j ] == false && buttons[ j ] )\r
#endregion\r
// #24341 2011.3.12 yyagi: POV support\r
#region [ POV HAT 4/8way (only single POV switch is supported)]\r
- int[] povs = currentState.GetPointOfViewControllers();\r
+ int[] povs = currentState.PointOfViewControllers;\r
if ( povs != null )\r
{\r
if ( povs[ 0 ] >= 0 )\r
private Joystick devJoystick;\r
//private CTimer timer;\r
\r
- private void bButtonUpDown( JoystickState data, int axisdata, int target, int contrary ) // #26871 2011.12.3 軸の反転に対応するためにリファクタ\r
+ private void bButtonUpDown( JoystickUpdate data, int axisdata, int target, int contrary ) // #26871 2011.12.3 軸の反転に対応するためにリファクタ\r
{\r
int targetsign = ( target < contrary ) ? -1 : 1;\r
if ( Math.Abs( axisdata ) > 500 && ( targetsign == Math.Sign( axisdata ) ) ) // 軸の最大値の半分を超えていて、かつ\r
/// <param name="data"></param>\r
/// <param name="currentMode">直前のボタン状態 true=押されていた</param>\r
/// <returns>上げ下げイベント発生時true</returns>\r
- private bool bDoUpDownCore( int target, JoystickState data, bool lastMode )\r
+ private bool bDoUpDownCore( int target, JoystickUpdate data, bool lastMode )\r
{\r
if ( this.bButtonState[ target ] == lastMode )\r
{\r
{\r
nKey = target,\r
b押された = !lastMode,\r
- nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.TimeStamp ),\r
+ nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換( data.Timestamp ),\r
nVelocity = ( lastMode ) ? 0 : CInput管理.n通常音量\r
};\r
this.list入力イベント.Add( e );\r