2021-07-21 20:03:39 +04:30
|
|
|
#include <imgui.h>
|
2025-07-10 13:29:03 +03:30
|
|
|
#include <input/events/char.hpp>
|
|
|
|
#include <input/events/event.hpp>
|
|
|
|
#include <input/events/keyboard.hpp>
|
|
|
|
#include <input/events/mouse.hpp>
|
|
|
|
#include <input/input.hpp>
|
|
|
|
#include <input/key_codes.hpp>
|
|
|
|
#include <logger/logger.hpp>
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-11 00:05:48 +03:30
|
|
|
namespace lt {
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
Input::Input(): m_mouse_position {}, m_mouse_delta {}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
restart_input_state();
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void Input::receive_user_interface_events_impl(bool receive, bool toggle /* = false */)
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-05 14:23:01 +03:30
|
|
|
m_user_interface_events = toggle ? !m_user_interface_events : receive;
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void Input::receieve_game_events_impl(bool receive, bool toggle /*= false*/)
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-06 14:02:50 +03:30
|
|
|
auto prev = m_game_events;
|
2025-07-05 14:23:01 +03:30
|
|
|
m_game_events = toggle ? !m_user_interface_events : receive;
|
2022-03-07 21:57:00 +03:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_game_events != prev)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
restart_input_state();
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2025-07-06 16:52:50 +03:30
|
|
|
}
|
2022-03-07 21:57:00 +03:30
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void Input::restart_input_state()
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-05 14:23:01 +03:30
|
|
|
m_keyboad_keys.fill(false);
|
|
|
|
m_mouse_buttons.fill(false);
|
2022-03-07 21:57:00 +03:30
|
|
|
|
2025-07-05 14:23:01 +03:30
|
|
|
m_mouse_position = glm::vec2(0.0f);
|
|
|
|
m_mouse_delta = glm::vec2(0.0f);
|
|
|
|
m_mouse_wheel_delta = 0.0f;
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void Input::on_event(const Event &inputEvent)
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-06 14:02:50 +03:30
|
|
|
auto &io = ImGui::GetIO();
|
2025-07-05 15:36:53 +03:30
|
|
|
switch (inputEvent.get_event_type())
|
2021-07-21 20:03:39 +04:30
|
|
|
{
|
2022-03-07 21:57:00 +03:30
|
|
|
//** MOUSE_EVENTS **//
|
|
|
|
case EventType::MouseMoved:
|
|
|
|
{
|
2025-07-06 14:02:50 +03:30
|
|
|
const auto &event = dynamic_cast<const MouseMovedEvent &>(inputEvent);
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-05 14:23:01 +03:30
|
|
|
if (m_game_events)
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-06 14:02:50 +03:30
|
|
|
m_mouse_delta = event.get_position() - m_mouse_position;
|
|
|
|
m_mouse_position = event.get_position();
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_user_interface_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
io.MousePos = ImVec2(event.get_x(), event.get_y());
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
2021-07-21 20:03:39 +04:30
|
|
|
}
|
2022-03-07 21:57:00 +03:30
|
|
|
case EventType::ButtonPressed:
|
2021-07-21 20:03:39 +04:30
|
|
|
{
|
2025-07-06 16:52:50 +03:30
|
|
|
const auto &event = dynamic_cast<const ButtonPressedEvent &>(inputEvent);
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_game_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
m_mouse_buttons[event.get_button()] = true;
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_user_interface_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
io.MouseDown[event.get_button()] = true;
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
|
|
|
}
|
|
|
|
case EventType::ButtonReleased:
|
|
|
|
{
|
2025-07-06 16:52:50 +03:30
|
|
|
const auto &event = dynamic_cast<const ButtonReleasedEvent &>(inputEvent);
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_game_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
m_mouse_buttons[event.get_button()] = false;
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_user_interface_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
io.MouseDown[event.get_button()] = false;
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
|
|
|
}
|
|
|
|
case EventType::WheelScrolled:
|
|
|
|
{
|
2025-07-06 16:52:50 +03:30
|
|
|
const auto &event = dynamic_cast<const WheelScrolledEvent &>(inputEvent);
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_game_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
m_mouse_wheel_delta = event.get_offset();
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_user_interface_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
io.MouseWheel = event.get_offset();
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
|
|
|
}
|
|
|
|
//** KEYBOARD_EVENTS **//
|
|
|
|
case EventType::KeyPressed:
|
|
|
|
{
|
2025-07-06 16:52:50 +03:30
|
|
|
const auto &event = dynamic_cast<const KeyPressedEvent &>(inputEvent);
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_game_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
m_keyboad_keys[event.get_key()] = true;
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-05 14:23:01 +03:30
|
|
|
if (m_user_interface_events)
|
2021-07-21 20:03:39 +04:30
|
|
|
{
|
2025-07-06 17:45:40 +03:30
|
|
|
// io.AddKeyEvent(event.get_key(), true);
|
2025-07-05 15:36:53 +03:30
|
|
|
// if (event.get_key() == Key::BackSpace)
|
2022-03-07 21:57:00 +03:30
|
|
|
// io.AddInputCharacter(Key::BackSpace);
|
2021-07-21 20:03:39 +04:30
|
|
|
}
|
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
|
|
|
}
|
|
|
|
case EventType::KeyReleased:
|
|
|
|
{
|
2025-07-06 16:52:50 +03:30
|
|
|
const auto &event = dynamic_cast<const KeyReleasedEvent &>(inputEvent);
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_game_events)
|
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
m_keyboad_keys[event.get_key()] = false;
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-08-01 16:43:59 +04:30
|
|
|
|
2025-07-06 17:23:28 +03:30
|
|
|
if (m_user_interface_events)
|
|
|
|
{
|
2025-07-06 17:45:40 +03:30
|
|
|
// io.AddKeyEvent(event.get_key(), false);
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
|
|
|
}
|
|
|
|
case EventType::SetChar:
|
|
|
|
{
|
2025-07-05 14:23:01 +03:30
|
|
|
if (m_user_interface_events)
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-06 16:52:50 +03:30
|
|
|
const auto &event = dynamic_cast<const SetCharEvent &>(inputEvent);
|
2025-07-05 15:36:53 +03:30
|
|
|
io.AddInputCharacter(event.get_character());
|
2021-07-21 20:03:39 +04:30
|
|
|
}
|
2022-03-07 21:57:00 +03:30
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
2025-07-07 15:13:05 +03:30
|
|
|
default: log_trc("Dropped event");
|
2021-07-21 20:03:39 +04:30
|
|
|
}
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
2021-07-21 20:03:39 +04:30
|
|
|
|
2025-07-11 00:05:48 +03:30
|
|
|
} // namespace lt
|