#include "HydraInputManager.h" #include "../windowmanager/HydraWindowManager.h" void HydraInputManager::ProcessInput(bool reset) { bool quit = false; m_mouse_change = glm::vec2(); if(reset) { std::fill(m_key_down, m_key_down+512, 0); std::fill(m_key_up, m_key_up+512, 0); } while (!quit) { HydraKeyPressStuct key_press; if (HydraWindowManager::GetKeyPress(key_press)) { //DebugLog("Got Key " + std::to_string(key_press.key_code)); m_key_presses.push_back(key_press); if ((key_press.key_code >= 0) && (key_press.key_code < 512)) { if (key_press.key_action == KEY_PRESS_ACTIONS::HYDRA_KEY_PRESSED) { if(m_keys[key_press.key_code] == 0) { m_key_down[key_press.key_code] = 1; } m_keys[key_press.key_code] = 1; } else { if(m_keys[key_press.key_code] == 1) { m_key_up[key_press.key_code] = 1; } m_keys[key_press.key_code] = 0; } } if (m_key_presses.size() > 10000) { m_key_presses.pop_back(); } } else { quit = true; } } quit = false; bool new_mouse_movement = false; while (!quit) { HydraMouseMoveStruct mouse_move; if (HydraWindowManager::GetMouseMove(mouse_move)) { m_mouse_moves.push(glm::vec2(mouse_move.x, mouse_move.y)); new_mouse_movement = true; if (m_mouse_moves.size() > 10000) { m_mouse_moves.pop(); } } else { quit = true; } } if (m_mouse_moves.size() > 0) { if (!m_mouse_reset) { m_mouse_change = m_last_mouse - m_mouse_moves.back(); m_last_mouse = m_mouse_moves.back(); } else { m_mouse_change = glm::vec2(0); m_last_mouse = m_mouse_moves.back(); m_mouse_reset = false; } } } bool HydraInputManager::KeyPressed(HYDRA_KEY_CODES key) { return m_keys[static_cast(key)] == 1; } bool HydraInputManager::KeyDown(HYDRA_KEY_CODES key) { return m_key_down[static_cast(key)] == 1; } bool HydraInputManager::KeyUp(HYDRA_KEY_CODES key) { return m_key_up[static_cast(key)] == 1; }