From fb57d97594e0a312b299433e6fda856d4d442cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Wed, 25 Oct 2023 20:47:11 +0200 Subject: [PATCH] added zoom using SDL_BUTTON_X1,SDL_BUTTON_X2 in run.cpp --- src/controls/include/controls/cam_control.hpp | 2 +- src/controls/src/cam_control.cpp | 23 +++++++++++-------- src/controls/src/control_hub.cpp | 2 +- src/edit/src/scene.cpp | 2 +- src/osi/src/run.cpp | 14 +++++++++-- src/studio/src/simulator.cpp | 21 ++++++++++++++--- 6 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/controls/include/controls/cam_control.hpp b/src/controls/include/controls/cam_control.hpp index c6bca11..faa5f23 100644 --- a/src/controls/include/controls/cam_control.hpp +++ b/src/controls/include/controls/cam_control.hpp @@ -35,7 +35,7 @@ public: class OrbitCameraController : public CameraController { glm::vec3 target = glm::vec3(0.0f, 0.0f, 0.0f); - float distance = 5.0f; + float zoom = 5.0f; public: using CameraController::CameraController; diff --git a/src/controls/src/cam_control.cpp b/src/controls/src/cam_control.cpp index 66e7a7e..7afb1c6 100644 --- a/src/controls/src/cam_control.cpp +++ b/src/controls/src/cam_control.cpp @@ -77,14 +77,17 @@ void OrbitCameraController::keyboardMove(const std::unordered_set<std::string> & } void OrbitCameraController::mouseMove(const osi::Mouse &mouse, const osi::Window &window, bool &editor_running) { - if (window.is_minimized()) + if (window.is_minimized() + || !window.is_mouse_in_window()) return; + + if (mouse.just_pressed().contains("MouseWheelUp")) + zoom = (zoom - 0.5f) < 1.0f ? 1.0f : zoom - 0.5f; - float theta = 0.0f; // azimuthal angle - float phi = 0.0f; // polar angle + if (mouse.just_pressed().contains("MouseWheelDown")) + zoom = (zoom + 0.5f) > 20.0f ? 20.0f : zoom + 0.5f; - if (mouse.down().contains("MouseRight") - && window.is_mouse_in_window()) + if (mouse.down().contains("MouseRight")) { if (!editor_running || (editor_running && window.is_resized())) { @@ -94,12 +97,12 @@ void OrbitCameraController::mouseMove(const osi::Mouse &mouse, const osi::Window } glm::i32vec2 offset = mouse.pos_delta(); - - theta = -static_cast<float>(offset.x) * getSens().x; - phi = -static_cast<float>(-offset.y) * getSens().y; + float theta = -static_cast<float>(offset.x) * getSens().x; //azimuth angle + float phi = static_cast<float>(offset.y) * getSens().y; // polar angle turn(theta, phi); - auto ahead = -bound_frame->getRotationAxisZ(); - bound_frame->setPosVec(target - (distance * ahead)); } + + auto front_vector = -bound_frame->getRotationAxisZ(); + bound_frame->setPosVec(target - (zoom * front_vector)); } \ No newline at end of file diff --git a/src/controls/src/control_hub.cpp b/src/controls/src/control_hub.cpp index a0ff669..36e44df 100644 --- a/src/controls/src/control_hub.cpp +++ b/src/controls/src/control_hub.cpp @@ -5,7 +5,7 @@ ControlHub::ControlHub() auto orbit_cam = std::make_shared<OrbitCameraController>(); auto free_cam = std::make_shared<FreeFlyCameraController>(); - cam_controls.emplace_back(orbit_cam); // BROKEN + cam_controls.emplace_back(orbit_cam); cam_controls.emplace_back(free_cam); obj_controls.emplace_back(std::make_shared<ObjectController>()); diff --git a/src/edit/src/scene.cpp b/src/edit/src/scene.cpp index 7685e1a..5dcac8a 100644 --- a/src/edit/src/scene.cpp +++ b/src/edit/src/scene.cpp @@ -87,7 +87,7 @@ void Scene::createScene() // addMeshNode("./data/models/final_giraffe.obj", glm::vec3(-5, 1, 3)); /* ADD CAMERA */ - addCameraNode(60.0f, glm::vec3(0.0f, 1.0f, -6.0f), glm::vec3(0.0f, 180.0f, 0.0f)); + addCameraNode(60.0f, glm::vec3(0.0f, 0.0f, -5.0f), glm::vec3(0.0f, 180.0f, 0.0f)); } void Scene::removeActiveCamera(camera_ptr camera) // TO DO: fix diff --git a/src/osi/src/run.cpp b/src/osi/src/run.cpp index cd6907b..830e8da 100644 --- a/src/osi/src/run.cpp +++ b/src/osi/src/run.cpp @@ -37,8 +37,8 @@ static std::string to_button_name(std::uint8_t const button_index) case SDL_BUTTON_LEFT: return "MouseLeft"; case SDL_BUTTON_RIGHT: return "MouseRight"; case SDL_BUTTON_MIDDLE: return "MouseMiddle"; - case SDL_BUTTON_X1: return "MouseX1"; - case SDL_BUTTON_X2: return "MouseX2"; + case SDL_BUTTON_X1: return "MouseWheelUp"; + case SDL_BUTTON_X2: return "MouseWheelDown"; default: return "MouseUNKNOWN"; } } @@ -261,6 +261,16 @@ void run(Config const& cfg) if (!ImGui::GetIO().WantCaptureMouse) { // TODO! + if(event.wheel.y > 0) // scroll up + { + std::string const name = to_button_name(SDL_BUTTON_X1); + mouse->m_just_pressed.insert(name); + } + else if(event.wheel.y < 0) // scroll down + { + std::string const name = to_button_name(SDL_BUTTON_X2); + mouse->m_just_pressed.insert(name); + } } break; default: break; diff --git a/src/studio/src/simulator.cpp b/src/studio/src/simulator.cpp index 36abbe3..e89c246 100644 --- a/src/studio/src/simulator.cpp +++ b/src/studio/src/simulator.cpp @@ -41,11 +41,26 @@ void Simulator::update() editor->changeOrthoCamAxes(scene, controls); // editor->changeLevel(scene, controls); - auto cam_frame = scene->getActiveCameras()[0].lock()->getFrame()->getPosition(); - auto cam_front_vec = controls->getActiveCamCtrl()->getFrontVec(); + // auto cam_frame = scene->getActiveCameras()[0].lock()->getFrame()->getPosition(); + // auto cam_front_vec = controls->getActiveCamCtrl()->getFrontVec(); // std::cout << "Camera coords: X " << cam_frame.x << " | Y " << cam_frame.y << " | Z " << cam_frame.z << std::endl; // std::cout << "Camera frontVec: X " << cam_front_vec.x << " | Y " << cam_front_vec.y << " | Z " << cam_front_vec.z << std::endl; - + auto m_pressed = mouse().just_pressed(); + if (!m_pressed.empty()) + { + std::cout << "pressed: "; + for (auto button : m_pressed) + std::cout << button << ", "; + std::cout << std::endl << "held: "; + } + auto m_held = mouse().down(); + if (!m_held.empty()) + { + for (auto button : m_held) + std::cout << button << ", "; + std::cout << std::endl; + } + /* Rotation around x-axis demo */ // controls->rotate_obj(glm::vec3(1.0f, 0.0f, 0.0f)); } -- GitLab