⑤サンプルプログラム(BlueInput.h)

#pragma once

#include

// マウスの左ボタン定数
const int BLINP_LBUTTON = 0x01;
// マウスの右ボタン定数
const int BLINP_RBUTTON = 0x02;
// マウスの中ボタン定数
const int BLINP_MBUTTON = 0x04;
// マウスのX軸定数
const int BLINP_X = 0;
// マウスのY軸定数
const int BLINP_Y = 1;
// マウスのZ軸定数
const int BLINP_Z = 2;

// ジョイスティックの1ボタン定数
const int BLINP_1BUTTON = 0x00000001;
// ジョイスティックの2ボタン定数
const int BLINP_2BUTTON = 0x00000002;
// ジョイスティックの3ボタン定数
const int BLINP_3BUTTON = 0x00000004;
// ジョイスティックの4ボタン定数
const int BLINP_4BUTTON = 0x00000008;
// ジョイスティックの5ボタン定数
const int BLINP_5BUTTON = 0x00000010;
// ジョイスティックの6ボタン定数
const int BLINP_6BUTTON = 0x00000020;
// ジョイスティックの7ボタン定数
const int BLINP_7BUTTON = 0x00000040;
// ジョイスティックの8ボタン定数
const int BLINP_8BUTTON = 0x00000080;
// ジョイスティックの9ボタン定数
const int BLINP_9BUTTON = 0x00000100;
// ジョイスティックの10ボタン定数
const int BLINP_10BUTTON = 0x00000200;
// ジョイスティックの11ボタン定数
const int BLINP_11BUTTON = 0x00000400;
// ジョイスティックの12ボタン定数
const int BLINP_12BUTTON = 0x00000800;
// ジョイスティックの13ボタン定数
const int BLINP_13BUTTON = 0x00001000;
// ジョイスティックの14ボタン定数
const int BLINP_14BUTTON = 0x00002000;
// ジョイスティックの15ボタン定数
const int BLINP_15BUTTON = 0x00004000;
// ジョイスティックの16ボタン定数
const int BLINP_16BUTTON = 0x00008000;
// ジョイスティックの17ボタン定数
const int BLINP_17BUTTON = 0x00010000;
// ジョイスティックの18ボタン定数
const int BLINP_18BUTTON = 0x00020000;
// ジョイスティックの19ボタン定数
const int BLINP_19BUTTON = 0x00040000;
// ジョイスティックの20ボタン定数
const int BLINP_20BUTTON = 0x00080000;
// ジョイスティックの21ボタン定数
const int BLINP_21BUTTON = 0x00100000;
// ジョイスティックの22ボタン定数
const int BLINP_22BUTTON = 0x00200000;
// ジョイスティックの23ボタン定数
const int BLINP_23BUTTON = 0x00400000;
// ジョイスティックの24ボタン定数
const int BLINP_24BUTTON = 0x00800000;
// ジョイスティックの25ボタン定数
const int BLINP_25BUTTON = 0x01000000;
// ジョイスティックの26ボタン定数
const int BLINP_26BUTTON = 0x02000000;
// ジョイスティックの27ボタン定数
const int BLINP_27BUTTON = 0x04000000;
// ジョイスティックの28ボタン定数
const int BLINP_28BUTTON = 0x08000000;
// ジョイスティックの29ボタン定数
const int BLINP_29BUTTON = 0x10000000;
// ジョイスティックの30ボタン定数
const int BLINP_30BUTTON = 0x20000000;
// ジョイスティックの31ボタン定数
const int BLINP_31BUTTON = 0x40000000;
// ジョイスティックの32ボタン定数
const int BLINP_32BUTTON = 0x80000000;

// ジョイスティックのX軸絶対座標定数
const int BLINP_X_ABS = 0;
// ジョイスティックのY軸絶対座標定数
const int BLINP_Y_ABS = 1;
// ジョイスティックのZ軸絶対座標定数
const int BLINP_Z_ABS = 2;
// ジョイスティックのX軸回転量定数
const int BLINP_X_ROTATE = 3;
// ジョイスティックのY軸回転量定数
const int BLINP_Y_ROTATE = 4;
// ジョイスティックのZ軸回転量定数
const int BLINP_Z_ROTATE = 5;
// ジョイスティックの追加軸Uの座標定数
const int BLINP_U = 6;
// ジョイスティックの追加軸Vの座標定数
const int BLINP_V = 7;
// ジョイスティックのX軸速度定数
const int BLINP_X_VELOCITY = 8;
// ジョイスティックのY軸速度定数
const int BLINP_Y_VELOCITY = 9;
// ジョイスティックのZ軸速度定数
const int BLINP_Z_VELOCITY = 10;
// ジョイスティックの追加軸Uの速度定数
const int BLINP_U_VELOCITY = 11;
// ジョイスティックの追加軸Vの速度定数
const int BLINP_V_VELOCITY = 12;
// ジョイスティックのX軸加速度定数
const int BLINP_X_ACCELERATION = 13;
// ジョイスティックのY軸加速度定数
const int BLINP_Y_ACCELERATION = 14;
// ジョイスティックのZ軸加速度定数
const int BLINP_Z_ACCELERATION = 15;
// ジョイスティックの追加軸Uの加速度定数
const int BLINP_U_ACCELERATION = 16;
// ジョイスティックの追加軸Vの加速度定数
const int BLINP_V_ACCELERATION = 17;
// ジョイスティックのX軸角速度定数
const int BLINP_X_VELOCITY_RAD = 18;
// ジョイスティックのY軸角速度定数
const int BLINP_Y_VELOCITY_RAD = 19;
// ジョイスティックのZ軸角速度定数
const int BLINP_Z_VELOCITY_RAD = 20;
// ジョイスティックのX軸角加速度定数
const int BLINP_X_ACCELERATION_RAD = 21;
// ジョイスティックのY軸角加速度定数
const int BLINP_Y_ACCELERATION_RAD = 22;
// ジョイスティックのZ軸角加速度定数
const int BLINP_Z_ACCELERATION_RAD = 23;
// ジョイスティックのX軸フォース定数
const int BLINP_X_FORCE = 24;
// ジョイスティックのY軸フォース定数
const int BLINP_Y_FORCE = 25;
// ジョイスティックのZ軸フォース定数
const int BLINP_Z_FORCE = 26;
// ジョイスティックの追加軸Uのフォース定数
const int BLINP_U_FORCE = 27;
// ジョイスティックの追加軸Vのフォース定数
const int BLINP_V_FORCE = 28;
// ジョイスティックのX軸フォース定数
const int BLINP_X_TORQUE = 29;
// ジョイスティックのY軸フォース定数
const int BLINP_Y_TORQUE = 30;
// ジョイスティックのZ軸フォース定数
const int BLINP_Z_TORQUE = 31;

// ジョイスティックのPOV1定数
const int BLINP_1POV = 0;
// ジョイスティックのPOV1定数
const int BLINP_2POV = 1;
// ジョイスティックのPOV1定数
const int BLINP_3POV = 2;
// ジョイスティックのPOV1定数
const int BLINP_4POV = 3;

// ボタンのトリガー定数
const int BLINP_TRIGGER_DOWN = 1; // DOWNトリガー
const int BLINP_TRIGGER_UP = -1; // UPトリガー

// DirectInputオブジェクト作成失敗
const DWORD BLINP_ERROR_CREATE = 0x0600;
// マウスデバイス作成エラー
const DWORD MOUSE_ERROR_CREATE = 0x0700;
// マウスデバイスのデータフォーマット設定エラー
const DWORD MOUSE_ERROR_DATAFORMAT = 0x0701;
// マウスデバイスのモード設定エラー
const DWORD MOUSE_ERROR_MODE = 0x0703;
// 軸モードの設定エラー
const DWORD MOUSE_ERROR_AXIS = 0x0704;
// キーボードデバイス作成エラー
const DWORD KEYBOARD_ERROR_CREATE = 0x0800;
// キーボードデバイスのデータフォーマット設定エラー
const DWORD KEYBOARD_ERROR_DATAFORMAT = 0x0801;
// キーボードデバイスのモード設定エラー
const DWORD KEYBOARD_ERROR_MODE = 0x0803;
// ジョイスティック列挙エラー
const DWORD JOYSTICK_ERROR_ENUM = 0x0900;

// マウスの軸数
#define MAX_MOUSE_AXIS (3)
// マウスのボタン数
#define MAX_MOUSE_BUTTON (8)
// キーボードのキー数
#define MAX_KEY (256)
// ジョイスティックの接続可能最大数
#define MAX_JOYSTICK (16)
// ジョイスティックの軸の上限
#define UPEER_JOYSTICK_AXIS (32767)
// ジョイスティックの軸の下限
#define LOWER_JOYSTICK_AXIS (-32768)
// ジョイスティックのボタンデータの数
#define MAX_JOYSTICK_BUTTON (32)
// ジョイスティックの軸データの数
#define MAX_JOYSTICK_AXIS (32)
// 視点ハット等コントローラの数
#define MAX_POV (4)
// 履歴の数
#define MAX_HISTORY (2)

/*************************************
クラス名: CBlInput
説明: DirectInput8を使うクラス

************************************/

class CBlInput
{
private:
LPDIRECTINPUT8 m_pDInput; // DirectInput8インターフェイス
LPDIRECTINPUTDEVICE8 m_pDInputDevMouse; // DirectInput8デバイス:マウス用
LPDIRECTINPUTDEVICE8 m_pDInputDevKeyboard; // DirectInput8デバイス:キーボード用
LPDIRECTINPUTDEVICE8 m_pDInputDevJoystick[MAX_JOYSTICK]; // DirectInput8デバイス:ジョイスティック用
long m_lMouseAxis[MAX_HISTORY][MAX_MOUSE_AXIS]; // マウスの軸データ
BYTE m_btMouseButton[MAX_HISTORY]; // マウスのボタンデータ
BYTE m_btKeyData[MAX_HISTORY][MAX_KEY]; // キーボードデータ格納
DWORD m_dwJoystickButton[MAX_HISTORY][MAX_JOYSTICK]; // ジョイスティックのボタンデータ
long m_lJoystickAxis[MAX_HISTORY][MAX_JOYSTICK_AXIS][MAX_JOYSTICK]; // ジョイスティックの軸データ
DWORD m_dwJoystickPOV[MAX_HISTORY][MAX_POV][MAX_JOYSTICK]; // ジョイスティックの視点ハット等コントローラデータ
int m_nJoystickCount; // 接続中のジョイスティック数
DWORD m_dwPolling; // ポーリングのフラグ

BOOL InitDxInput( const HINSTANCE &hInst ); // DirectInput初期化

void ReleaseMouse( void ); // マウスデバイス解放
void ReleaseKeyboard( void ); // キーボードデバイス解放
void ReleaseJoystick( void ); // ジョイスティックデバイス解放

//コールバック関数
static BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pDidInstance, void* pContext ); // ジョイスティック列挙
static BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pDidOI, void *pContext ); // 軸設定

public:
CBlInput( void );
DWORD InitMouse( const HINSTANCE &hInst, const HWND &hWnd ); // マウスモード初期化
DWORD InitKeyboard( const HINSTANCE &hInst, const HWND &hWnd ); // キーボードモード初期化
DWORD InitJoystick( const HINSTANCE &hInst, const HWND &hWnd, const int nNum, int *pnSetNum ); // ジョイスティックモード初期化
void Release( void ); // DirectInput解放
BOOL RefreshMouseData( void ); // マウスデータを更新する
BOOL RefreshKeyboardData( void ); // キーボードデータを更新する
BOOL RefreshJoystickData( void ); // ジョイスティックデータを更新する
BOOL GetMouseButton( const int nButtonID ); // マウスのボタンの押下状態を提供する
int GetMouseButtonTrigger( const int nButtonID ); // マウスのボタンのトリガーを提供する
int GetMouseAxisData( const int nAxisID ); // マウスの軸のデータを提供する
BOOL GetKey( const int nKeyID ); // キーボードのキーの押下状態を提供する
int GetKeyTrigger( const int nKeyID ); // キーボードのキーのトリガーを提供する
BOOL GetJoystickButton( const DWORD dwButtonID, const int nPlayer ); // ジョイスティックのボタンの押下状態を提供する
int GetJoystickButtonTrigger( const DWORD dwButtonID, const int nPlayer ); // ジョイスティックのボタンのトリガーを提供する
int GetJoystickAxisData( const int nAxisID, const int nPlayer ); // ジョイスティックの軸データを提供する
int GetJoystickPOVData( const int nPOVID, const int nPlayer ); // ジョイスティックのPOVデータを提供する
};