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ベースのライブラリで実装した場合を想定しています。