#ifndef INPUT_MANAGER_H #define INPUT_MANAGER_H #include #include typedef void ( *KeyHandler ) ( void ); typedef void ( *MouseHandler ) ( int x, int y ); class InputManager { std::vector< int > m_pollKeys; std::vector< KeyHandler > m_downHandlers; std::vector< KeyHandler > m_upHandlers; std::vector< KeyHandler > m_pressedHandlers; MouseHandler m_mouseHandler; // Polls a vector of keys, removes depressed keys from the vector. void PollKeys( ); public: InputManager( ); // Is called by the Windows message handler routine, adds pressed // keys to the vector. void HandleInput( WPARAM wParam ); void InstallKeyDown( int vk, KeyHandler handler ); void InstallKeyUp( int vk, KeyHandler handler ); void InstallKeyPressed( KeyHandler handler ); void InstallMouseHandler( MouseHandler handler ); // Used to remove remove the associated handler from the vector. void UninstallKeyDown( int vk ); void UninstallKeyUp( int vk ); void UninstallKeyPressed( int vk ); void UninstallMouseHandler( ); }; #endif // ------------------------ #include "InputManager.h" void InputManager::HandleInput( WPARAM wParam ) { if ( m_downHandlers[wParam] != NULL ) { // Call the key-down handler. m_handlers[wParam]( ); // Set up the pressed key for polling. m_pollKeys } } void InputManager::PollKeys( ) { // Poll all pressed keys. } InputManager::InputManager( ) { for ( int i=0; i<0xFF; i++ ) { m_downHandlers.push_back( NULL ); m_upHandlers.push_back( NULL ); m_pressedHandlers.push_back( NULL ); } } void InputManager::InstallKeyDown( int vk, KeyHandler handler ) { m_downHandlers[vk] = handler; } void InputManager::InstallKeyUp( int vk, KeyHandler handler ) { m_upHandlers[vk] = handler; } void InputManager::InstallKeyPressed( int vk, KeyHandler handler ) { m_pressedHandlers[vk] = handler; } void InputManager::UninstallKeyDown( int vk ) { m_downHandlers[vk] = NULL; } void InputManager::UninstallKeyUp( int vk ) { m_upHandlers[vk] = NULL; } void InputManager::UninstallKeyPressed( int vk ) { m_pressedHandlers[vk] = NULL; }