diff --git a/include/Cubed/camera.hpp b/include/Cubed/camera.hpp index b5746da..2e2ea98 100644 --- a/include/Cubed/camera.hpp +++ b/include/Cubed/camera.hpp @@ -49,6 +49,7 @@ public: void change_perspective(); bool is_first_person() const; bool handle_event(const Event& e); + ClientPlayer* player(); }; } // namespace Cubed diff --git a/src/app.cpp b/src/app.cpp index ce1acfe..455b55e 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -645,9 +645,10 @@ void App::handle_sdl_event(SDL_Event& e) { break; case SDL_EVENT_KEY_DOWN: if (imgui_enable && e.key.key == SDLK_ESCAPE) { + m_window.disable_mouse(); m_window.set_imgui_enabled(false); - - } else { + } + if (!imgui_enable) { handle_sdl_key(e); } break; diff --git a/src/camera.cpp b/src/camera.cpp index c0ecfef..af84816 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -107,31 +107,36 @@ void Camera::change_perspective() { bool Camera::is_first_person() const { return m_perspective == Perspective::FIRST_PERSON; } - +ClientPlayer* Camera::player() { return m_player; } bool Camera::handle_event(const Event& e) { - return std::visit( - Overloaded{[this](const MouseMoveEvent& e) { - if (handle_mouse_move_event(e)) { - return true; - } + return std::visit(Overloaded{[this](const MouseMoveEvent& e) { + if (handle_mouse_move_event(e)) { + return true; + } - return false; - }, - [](const MouseButtonEvent&) { return false; }, - [](const MouseWheelEvent&) { return false; }, - [this](const KeyEvent& e) { - if (handle_key_event(e)) { - return true; - } - return false; - }, - [](const TextInputEvent&) { return false; }, - [](const WindowResizeEvent&) { return false; }, - [](const FrameBufferResizeEvent&) { return false; } + return false; + }, + [](const MouseButtonEvent&) { return false; }, + [](const MouseWheelEvent&) { return false; }, + [this](const KeyEvent& e) { + if (handle_key_event(e)) { + return true; + } + return false; + }, + [](const TextInputEvent&) { return false; }, + [this](const WindowResizeEvent&) { + reset_camera(); + return false; + }, + [this](const FrameBufferResizeEvent&) { + reset_camera(); + return false; + } - } // namespace Cubed - , - e); + } // namespace Cubed + , + e); } glm::vec3 Camera::camera_collision(glm::vec3 start, glm::vec3 end, diff --git a/src/window.cpp b/src/window.cpp index 1d19a6b..fcb2d3c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1,6 +1,7 @@ #include "Cubed/window.hpp" #include "Cubed/camera.hpp" +#include "Cubed/gameplay/client_player.hpp" #include "Cubed/tools/cubed_assert.hpp" #include "Cubed/tools/font.hpp" #include "Cubed/tools/log.hpp" @@ -76,8 +77,10 @@ bool Window::handle_key_event(const KeyEvent& e) { if (e.key == Key::LEFT_ALT && e.action == KeyAction::PRESS) { if (m_game_running) { if (m_mouse_enable) { + disable_mouse(); set_imgui_enabled(false); } else { + enable_mouse(); set_imgui_enabled(true); } return true; @@ -225,10 +228,11 @@ bool Window::is_enable_imgui() const { return m_imgui_enable; } void Window::set_imgui_enabled(bool enable) { m_imgui_enable = enable; - if (!enable) { - disable_mouse(); - } else { - enable_mouse(); + if (m_camera) { + auto player = m_camera->player(); + if (player) { + player->reset_key_status(); + } } }