BaseInputManager実装例
以下に、BaseInputManagerの具象化クラスを擬似コードで示します。
class InputManagerImpl : public BaseInputManager{
public:
//コンストラクタ
InputManagerImpl(CInputSystem* IM){
m_IS = IM;
ZeroMemory(&m_MouseCursorPos, sizeof(m_MouseCursorPos));
m_MouseWheelPos = 0;
ZeroMemory(MBIS, sizeof(MBIS));
MBISIt = 0;
}
//マウス関係
//入力情報を更新
void Flush(){
m_IS->Flush();
MBISIt = 1 - MBISIt;
MBIS[0][MBISIt] = m_IS->GetMouseButton(0);
MBIS[1][MBISIt] = m_IS->GetMouseButton(1);
MBIS[2][MBISIt] = m_IS->GetMouseButton(2);
m_IS->GetMousePos(m_MouseCursorPos);
m_MouseWheelPos = m_IS->GetMouseWheel();
}
//押下状態の有無
bool LButton() const{
return(MBIS[0][MBISIt]);
}
//押されたばかりか?
bool PushLButton() const{
return(MBIS[0][MBISIt] && !MBIS[0][1-MBISIt]);
}
//離されたばかりか?
bool PushUpLButton() const{
return(!MBIS[0][MBISIt] && MBIS[0][1-MBISIt]);
}
//押下状態の有無
bool MButton() const{
return(MBIS[2][MBISIt]);
}
//押されたばかりか?
bool PushMButton() const{
return(MBIS[2][MBISIt] && !MBIS[2][1-MBISIt]);
}
//離されたばかりか?
bool PushUpMButton() const{
return(!MBIS[2][MBISIt] && MBIS[2][1-MBISIt]);
}
//押下状態の有無
bool RButton() const{
return(MBIS[1][MBISIt]);
}
//押されたばかりか?
bool PushRButton() const{
return(MBIS[1][MBISIt] && !MBIS[1][1-MBISIt]);
}
//離されたばかりか?
bool PushUpRButton() const{
return(!MBIS[1][MBISIt] && MBIS[1][1-MBISIt]);
}
//カーソル座標を取得
void GetXY(int& x, int& y) const{
x = m_MouseCursorPos.x;
y = m_MouseCursorPos.y;
}
//ホイールを取得
void GetZ(int &z) const{
z = m_MouseWheelPos;
}
private:
CInputSystem* m_IS; //ユーザー入力システムクラスへのポインタ
POINT m_MouseCursorPos; //マウスカーソルの位置
int m_MouseWheelPos; //マウスホイールの位置
bool MBIS[3][2]; //マウスボタンの入力状態
int MBISIt; //イテレータ(マウスボタンの入力状態)
InputManagerImpl(); //デフォルトコンストラクタ(禁止)
InputManagerImpl(const InputManagerImpl&); //コピーコンストラクタ(禁止)
InputManagerImpl& operator =(const InputManagerImpl&); //代入演算子(禁止)
};
※1:上記擬似コードは、Direct Xベースのライブラリで実装した場合を想定しています。