#include "sons_of_sol/ControlMultiplexer.hpp" ControlMultiplexer::ControlMultiplexer() {} void ControlMultiplexer::onKeyUp(const SDL_KeyboardEvent& evt) { std::map::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::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::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::iterator itr; for (itr = m_motion_listeners.begin(); itr != m_motion_listeners.end(); ++itr) { (*itr)->onControlMotion(evt); } }