+ case keys::C:\r
+ options.catchMouse = !options.catchMouse;\r
+ break;\r
+ case keys::R:\r
+ freecam.mouseX = freecam.mouseY = 0;\r
+ break;\r
+ }\r
+ } else if (event.type == sf::Event::EventType::MouseWheelScrolled) {\r
+ options.radius -= event.mouseWheelScroll.delta / 5.0f;\r
+ }\r
+ }\r
+\r
+ int mouseDeltaX = sf::Mouse::getPosition(window).x - window.getSize().x / 2;\r
+ int mouseDeltaY = sf::Mouse::getPosition(window).y - window.getSize().y / 2;\r
+\r
+ if (options.catchMouse) {\r
+ sf::Mouse::setPosition(sf::Vector2i(\r
+ window.getSize().x / 2,\r
+ window.getSize().y / 2\r
+ ), window);\r
+\r
+ if (options.freecam) {\r
+ freecam.mouseX += mouseDeltaX;\r
+ freecam.mouseY += mouseDeltaY;\r
+\r
+ camForward = glm::rotate(glm::vec3(0, 0, 1), freecam.mouseY / 500.0f, glm::vec3(1, 0, 0));\r
+ camForward = glm::rotate(camForward, -freecam.mouseX / 500.0f, glm::vec3(0, 1, 0));\r
+\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) {\r
+ camPos += camForward / 20.0f;\r
+ }\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) {\r
+ camPos -= camForward / 20.0f;\r
+ }\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) {\r
+ glm::vec3 camLeft = glm::rotate(glm::vec3(0, 0, 1), -freecam.mouseX / 500.0f + glm::radians(90.0f), glm::vec3(0, 1, 0));\r
+ camPos += camLeft / 20.0f;\r
+ }\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) {\r
+ glm::vec3 camRight = glm::rotate(glm::vec3(0, 0, 1), -freecam.mouseX / 500.0f - glm::radians(90.0f), glm::vec3(0, 1, 0));\r
+ camPos += camRight / 20.0f;\r
+ }\r
+ } else {\r
+ if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {\r
+ arcball.mouseX += mouseDeltaX;\r
+ arcball.mouseY += mouseDeltaY;\r