diff --git a/src/controls/include/controls/cam_control.hpp b/src/controls/include/controls/cam_control.hpp index c6bca1121334ce8f8812732d93a9746a548e01b7..faa5f23413509063487c5a93f835913f0613fe97 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 66e7a7e5d6b7666951370da8fdcda47508a8d4bd..7afb1c671fa3592f0dad151a504808c6ecd60ee5 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 a0ff669108173c438e68b8bdf709f0e51ec01e1e..36e44df6dba1d62d21c4b7e7d8a72ffbdb5bfd91 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 7685e1af05086082910dff89d63c8a43b1678b82..5dcac8a468fd009ea4cb830d9ab65868c3132ef8 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 cd6907bd6cb5de1a80715c91983385e3529db068..830e8da49d6f18283b3ead1abb77523e9f10e209 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 36abbe39605e018e351f7867c9caa28bd6be8acd..e89c24646f8462de8a2e3ca19bff53cd42fbad32 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)); }