diff --git a/include/engine.hpp b/include/engine.hpp index 809ecea..b2edfee 100644 --- a/include/engine.hpp +++ b/include/engine.hpp @@ -48,6 +48,8 @@ namespace engine { Input* m_input; ResourceManager* m_res; SceneRoot* m_scene; + + bool m_enableFrameLimiter = true; }; } diff --git a/src/components/camera.cpp b/src/components/camera.cpp index eb59930..76c30e9 100644 --- a/src/components/camera.cpp +++ b/src/components/camera.cpp @@ -11,6 +11,8 @@ #include "log.hpp" +#include + namespace engine::components { glm::vec4 Camera::s_clearColor{-999.0f, -999.0f, -999.0f, -999.0f}; @@ -76,7 +78,11 @@ void Camera::usePerspective(float fovDeg) float fovRad = glm::radians(fovDeg); glm::vec2 viewportDim = getViewportSize(); - m_projMatrix = glm::perspectiveFovRH_ZO(fovRad, viewportDim.x, viewportDim.y, NEAR, FAR); + float aspect = viewportDim.x / viewportDim.y; + + float fovY = fovRad / aspect; + + m_projMatrix = glm::perspectiveZO(fovY, aspect, NEAR, FAR); } void Camera::useOrtho() diff --git a/src/engine.cpp b/src/engine.cpp index 4b60286..0c19992 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -55,6 +55,8 @@ namespace engine { auto beginFrame = std::chrono::steady_clock::now(); auto endFrame = beginFrame + FRAMETIME_LIMIT; + //m_enableFrameLimiter = false; + // single-threaded game loop while (m_win->isRunning()) { @@ -83,7 +85,9 @@ namespace engine { m_win->getInputAndEvents(); /* fps limiter */ - std::this_thread::sleep_until(endFrame); + if (m_enableFrameLimiter) { + std::this_thread::sleep_until(endFrame); + } beginFrame = endFrame; endFrame = beginFrame + FRAMETIME_LIMIT; diff --git a/test/res/models/lego/lego.dae b/test/res/models/lego/lego.dae new file mode 100644 index 0000000..a5e3da8 --- /dev/null +++ b/test/res/models/lego/lego.dae @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b97f0019ba4f90208ae22d3a3404b1e5e345cffe3ec584a545120537bbe66e9a +size 31296058 diff --git a/test/res/models/lego/lego_ville.png b/test/res/models/lego/lego_ville.png new file mode 100644 index 0000000..cdfe448 Binary files /dev/null and b/test/res/models/lego/lego_ville.png differ diff --git a/test/res/models/pyramid/pyramid.dae b/test/res/models/pyramid/pyramid.dae index 0a14e56..6955d10 100644 --- a/test/res/models/pyramid/pyramid.dae +++ b/test/res/models/pyramid/pyramid.dae @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1496bcec9da02f995aef8318a6008081b971d7eb2d0e3203a204813a18fa1401 -size 137704 +oid sha256:26fb0dc09c7a357875dfb6c56c0df5a8e34ca1762b3935c85aa5fd4c6974eae2 +size 151856 diff --git a/test/src/camera_controller.cpp b/test/src/camera_controller.cpp index 02165e4..bc4ab06 100644 --- a/test/src/camera_controller.cpp +++ b/test/src/camera_controller.cpp @@ -49,6 +49,7 @@ void CameraController::onUpdate(glm::mat4 t) isJumping = false; dy = 0.0f; parent.transform.position.y = standingHeight; + } } @@ -84,6 +85,16 @@ void CameraController::onUpdate(glm::mat4 t) parent.transform.position += (d2xRotated + d2zRotated) * dt; parent.transform.position.y += dy * dt; + constexpr float MAX_DISTANCE_FROM_ORIGIN = 1000.0f; + + if (glm::length(parent.transform.position) > MAX_DISTANCE_FROM_ORIGIN) { + parent.transform.position = { 0.0f, standingHeight, 0.0f }; + dy = 0.0f; + isJumping = false; + } + + /* ROTATION STUFF */ + // pitch quaternion const float halfPitch = m_pitch / 2.0f; glm::quat pitchQuat{}; diff --git a/test/src/camera_controller.hpp b/test/src/camera_controller.hpp index ebe2be4..066fa9d 100644 --- a/test/src/camera_controller.hpp +++ b/test/src/camera_controller.hpp @@ -14,11 +14,11 @@ private: float m_yaw = 0.0f; float m_pitch = 0.0f; - float walk_speed = 4.0f; + const float walk_speed = 4.0f; bool isJumping = false; float dy = 0.0f; float standingHeight = 0.0f; - float thrust = 25.0f; + const float thrust = 25.0f; }; diff --git a/test/src/game.cpp b/test/src/game.cpp index 0ad3e94..bc89398 100644 --- a/test/src/game.cpp +++ b/test/src/game.cpp @@ -30,8 +30,6 @@ void playGame() // configure window app.window()->setRelativeMouseMode(true); - - // input config // game buttons @@ -56,20 +54,21 @@ void playGame() constexpr float EYE_LEVEL = (HEIGHT_INCHES - 4.5f) * 25.4f / 1000.0f; cam->transform.position = { 0.0f, EYE_LEVEL, 0.0f }; auto camCamera = cam->createComponent(); - camCamera->usePerspective(70.0f); + camCamera->usePerspective(130.0f); cam->createComponent(); - //cam->createComponent()->m_mesh = genSphereMesh(0.2f, 20); - //cam->getComponent()->setTexture("textures/cobble_stone.png"); + cam->createComponent()->m_mesh = genSphereMesh(0.2f, 20); + cam->getComponent()->setTexture("textures/cobble_stone.png"); + /* auto gun = cam->createChild("gun"); gun->transform.position = glm::vec3{ 0.2f, -0.1f, -0.15f }; gun->transform.rotation = glm::angleAxis(glm::pi(), glm::vec3{ 0.0f, 1.0f, 0.0f }); float GUN_SCALE = 9.0f / 560.0f; - GUN_SCALE *= 1.0f; gun->transform.scale *= GUN_SCALE; auto gunRenderer = gun->createComponent(); gunRenderer->setMesh("meshes/gun.mesh"); gunRenderer->setTexture("textures/gun.png"); + */ // FLOOR @@ -138,12 +137,14 @@ void playGame() // boundary auto bounds = app.scene()->createChild("bounds"); auto boundsRen = bounds->createComponent(); - boundsRen->m_mesh = genSphereMesh(100.0f, 100, true); + boundsRen->m_mesh = genSphereMesh(100.0f, 36, true); boundsRen->setTexture("textures/metal.jpg"); auto myModel = engine::util::loadAssimpMeshFromFile(app.scene(), app.resources()->getFilePath("models/pyramid/pyramid.dae").string()); + myModel->transform.position = { -5.0f, 2.0f, 7.0f }; auto myRoom = engine::util::loadAssimpMeshFromFile(app.scene(), app.resources()->getFilePath("models/room/room.dae").string()); + myRoom->transform.position = { 9.0f, 0.1f, 3.0f }; auto astronaut = engine::util::loadAssimpMeshFromFile(app.scene(), app.resources()->getFilePath("models/astronaut/astronaut.dae").string()); astronaut->transform.position.z += 5.0f; @@ -152,6 +153,10 @@ void playGame() auto plane = engine::util::loadAssimpMeshFromFile(app.scene(), app.resources()->getFilePath("models/plane/plane.dae").string()); plane->transform.position = { -30.0f, 2.0f, 10.0f }; + auto lego = engine::util::loadAssimpMeshFromFile(app.scene(), app.resources()->getFilePath("models/lego/lego.dae").string()); + lego->transform.position = { 30.0f, -2.0f, 30.0f }; + lego->transform.scale = { 0.1f, 0.1f, 0.1f }; + // END TESTING app.scene()->printTree();