Files
HydraV3/HydraEngine/source/engine/HydraInputManager.cpp
T
2026-08-24 20:59:24 +01:00

104 lines
2.0 KiB
C++

#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<uint32_t>(key)] == 1;
}
bool HydraInputManager::KeyDown(HYDRA_KEY_CODES key)
{
return m_key_down[static_cast<uint32_t>(key)] == 1;
}
bool HydraInputManager::KeyUp(HYDRA_KEY_CODES key)
{
return m_key_up[static_cast<uint32_t>(key)] == 1;
}