+ void update(sf::Window &window) {\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
+ rot.x += mouseDeltaX;\r
+ rot.y += mouseDeltaY;\r
+\r
+ forward = glm::rotate(glm::vec3(0, 0, 1), rot.y / angleFactor, glm::vec3(1, 0, 0));\r
+ forward = glm::rotate(forward, -rot.x / angleFactor, glm::vec3(0, 1, 0));\r
+\r
+ glm::vec3 left = glm::rotate(glm::vec3(0, 0, 1), -rot.x / angleFactor + glm::radians(90.0f), glm::vec3(0, 1, 0));\r
+\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::LShift))\r
+ moveFactor = 200;\r
+ else\r
+ moveFactor = 20;\r
+\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))\r
+ pos += forward / moveFactor;\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))\r
+ pos -= forward / moveFactor;\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))\r
+ pos += left / moveFactor;\r
+ if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))\r
+ pos -= left / moveFactor;\r
+\r
+ limit();\r
+ }\r
+\r
+ void limit() {\r
+ rot.x = fmod(rot.x, glm::radians(360.0f) * angleFactor);\r
+ rot.y = fmod(rot.y, glm::radians(360.0f) * angleFactor);\r
+ }\r
+\r
+ glm::mat4 getViewMatrix() {\r
+ forward = glm::rotate(glm::vec3(0, 0, 1), rot.y / angleFactor, glm::vec3(1, 0, 0));\r
+ forward = glm::rotate(forward, -rot.x / angleFactor, glm::vec3(0, 1, 0));\r
+ glm::mat4 result = glm::lookAt(pos, pos + forward, up);\r
+ return result;\r
+ }\r
+\r
+private:\r
+ glm::vec3 forward;\r
+ glm::vec3 up = glm::vec3(0, 1, 0);\r
+\r
+ const float angleFactor = 200;\r
+ float moveFactor = 20;\r
+};\r