//-----------------------------------------------------------------------------
// directinput.h (一部)
//-----------------------------------------------------------------------------
#include "dinput.h"
// デバイス管理構造体
typedef struct{
LONG x,y,z;
BYTE button[3];
}DEVICESTATE;
// クラス
class CDirectInput{
private:
int m_dtype;
LPDIRECTINPUT m_dinput;
LPDIRECTINPUTDEVICE m_didevice;
LPDIRECTINPUTDEVICE2 m_didevice2;
DEVICESTATE m_state;
public:
CDirectInput():m_dinput(NULL),m_didevice(NULL),m_didevice2(NULL),m_dtype(-1){}
~CDirectInput(){Release();}
BOOL Create(HWND hwnd,int device);
void Release();
void Acquire(BOOL f){
if(m_didevice != NULL){
if(f){
m_didevice->Acquire();
}else{
m_didevice->Unacquire();
}
}
}
BOOL GetState();
BOOL Left(){return (m_state.x < 0);}
BOOL Right(){return (m_state.x > 0);}
BOOL Up(){return (m_state.y < 0);}
BOOL Down(){return (m_state.y > 0);}
BOOL Trig1(){return (m_state.button[0] != 0);}
BOOL Trig2(){return (m_state.button[1] != 0);}
BOOL Trig3(){return (m_state.button[2] != 0);}
BOOL Trig4(){return (m_state.button[3] != 0);}
};
//
// 以下はCDirectInputの使用例です。
//
// デバイスを生成する -------------------------------------------------------->
CDirectInput dinput; // クラス生成(グローバル等に定義)
if(!dinput.Create(hwnd,0)){ // デバイスの初期化(必須)
// ※ 第2パラメータが使用デバイスの定義になっています。
// 0:キーボード
// 1:マウス
// 2:ジョイスティック(ポート1)
/*
初期化失敗
*/
}
dinput.Acquire(TRUE); // デバイスのアクセス権を得る(必須)
// デバイスの変更 ------------------------------------------------------------>
dinput.Create(hwnd,1); // 内部でオブジェクトの再構築を行うので、
// 開放等の処理を行う必要はありません。
dinput.Acquire(TRUE); // デバイスのアクセス権を得る(必須)
// デバイス入力 -------------------------------------------------------------->
if(dinput.GetState()){ // デバイスのステータスを得る(必須)
/*
ここで、以下のメソッドを使って各方向ボタンやトリガーの状態を取得します。
全ての返値はTRUEもしくはFALSEなので、if文等でチェックするだけでOKです。
BOOL Left() 左ボタン
BOOL Right() 右ボタン
BOOL Up() 上ボタン
BOOL Down() 下ボタン
BOOL Trig1() トリガー1
BOOL Trig2() トリガー2
BOOL Trig3() トリガー3
*/
// 例:左ボタンが押されたかどうかのチェック
if(dinput.Left()){
//
// 押された場合
//
}
}
// デバイス開放 -------------------------------------------------------------->
dinput.Release(); // このメソッドはデストラクタに隠蔽して処理を行っているので、
// 特殊な事をやらなければ省略しても構いません。