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