aboutsummaryrefslogtreecommitdiff
path: root/sons_of_sol/private_db/ControlMultiplexer.cpp
diff options
context:
space:
mode:
authorJoshua Rahm <joshua.rahm@colorado.edu>2013-11-23 20:27:01 -0700
committerJoshua Rahm <joshua.rahm@colorado.edu>2013-11-23 20:27:01 -0700
commit7be3bda2b664068bf47404278fa9ee1ce552ea0e (patch)
treea50683398c8f011c9aba39cab7aee6246bcc029b /sons_of_sol/private_db/ControlMultiplexer.cpp
parent88d0215624de994b4456c8eac537262118ffed52 (diff)
downloadSonsOfSol-7be3bda2b664068bf47404278fa9ee1ce552ea0e.tar.gz
SonsOfSol-7be3bda2b664068bf47404278fa9ee1ce552ea0e.tar.bz2
SonsOfSol-7be3bda2b664068bf47404278fa9ee1ce552ea0e.zip
Got application to a point of displaying model objects
Diffstat (limited to 'sons_of_sol/private_db/ControlMultiplexer.cpp')
-rw-r--r--sons_of_sol/private_db/ControlMultiplexer.cpp58
1 files changed, 58 insertions, 0 deletions
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 );
+ }
+}