From 7be3bda2b664068bf47404278fa9ee1ce552ea0e Mon Sep 17 00:00:00 2001 From: Joshua Rahm Date: Sat, 23 Nov 2013 20:27:01 -0700 Subject: Got application to a point of displaying model objects --- sons_of_sol/private_db/ControlMultiplexer.cpp | 58 +++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 sons_of_sol/private_db/ControlMultiplexer.cpp (limited to 'sons_of_sol/private_db/ControlMultiplexer.cpp') diff --git a/sons_of_sol/private_db/ControlMultiplexer.cpp b/sons_of_sol/private_db/ControlMultiplexer.cpp new file mode 100644 index 0000000..97ae2f4 --- /dev/null +++ b/sons_of_sol/private_db/ControlMultiplexer.cpp @@ -0,0 +1,58 @@ +#include "sons_of_sol/ControlMultiplexer.hpp" + +ControlMultiplexer::ControlMultiplexer() { + +} + +void ControlMultiplexer::onKeyUp( const SDL_KeyboardEvent& evt ) { + std::map< SDLKey, M_MapVal >::iterator itr; + itr = m_keysym_map.find( evt.keysym.sym ); + + if( itr != m_keysym_map.end() ) { + ControlMotionEvent event( (*itr).second.type, 0, ControlMotionEvent::BUTTON ); + fireControlEvent( event ); + } +} + +void ControlMultiplexer::onKeyDown( const SDL_KeyboardEvent& evt ) { + std::map< SDLKey, M_MapVal >::iterator itr; + itr = m_keysym_map.find( evt.keysym.sym ); + + if( itr != m_keysym_map.end() ) { + ControlMotionEvent event( (*itr).second.type, 1 * (*itr).second.multiplier, ControlMotionEvent::BUTTON ); + fireControlEvent( event ); + } +} + +void ControlMultiplexer::onMouseMoved( const SDL_MouseMotionEvent& evt ) { + std::map< uint16_t, M_MapVal >::iterator itr; + /* x direction on mousepad */ + itr = m_joy_axis_map.find( 0xFF00 ); + const SDL_VideoInfo* info = SDL_GetVideoInfo(); //<-- calls SDL_GetVideoInfo(); + int screen_width = info->current_w; + int screen_height = info->current_h; + + float x_norm = (evt.x - screen_width / 2) / ((float) screen_width / 2.0); + if( itr != m_joy_axis_map.end() ) { + ControlMotionEvent event( itr->second.type, x_norm * (*itr).second.multiplier, + ControlMotionEvent::MOUSE ); + fireControlEvent( event ); + } + + /* y direction */ + float y_norm = (evt.y - screen_height / 2) / ((float) screen_height / 2.0); + itr = m_joy_axis_map.find( 0xFF01 ); + if( itr != m_joy_axis_map.end() ) { + ControlMotionEvent event( itr->second.type, y_norm * (*itr).second.multiplier, + ControlMotionEvent::MOUSE ); + fireControlEvent( event ); + } +} + +void ControlMultiplexer::fireControlEvent( const ControlMotionEvent& evt ) { + std::vector< ControlMotionListener* >::iterator itr; + + for( itr = m_motion_listeners.begin(); itr != m_motion_listeners.end() ; ++ itr ) { + (*itr)->onControlMotion( evt ); + } +} -- cgit