From ec2d3c3c0c99dd8d087939e0a3404789a46cab24 Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sat, 14 Mar 2026 11:48:26 +0800 Subject: [PATCH] feat: add gravity --- include/Cubed/config.hpp | 2 +- src/gameplay/player.cpp | 15 ++++++++++++++- src/main.cpp | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/Cubed/config.hpp b/include/Cubed/config.hpp index 7c9fdeb..a7b8d73 100644 --- a/include/Cubed/config.hpp +++ b/include/Cubed/config.hpp @@ -6,7 +6,7 @@ constexpr int MAX_BLOCK_NUM = 2; constexpr int CHUCK_SIZE = 16; constexpr int DISTANCE = 8; constexpr int MAX_BLOCK_STATUS = 1; - +constexpr float FOV = 70.0f; constexpr float VERTICES_POS[6][6][3] = { // ===== front (z = +1) ===== -0.5f, -0.5f, 0.5f, // bottom left diff --git a/src/gameplay/player.cpp b/src/gameplay/player.cpp index d76be0f..65da936 100644 --- a/src/gameplay/player.cpp +++ b/src/gameplay/player.cpp @@ -64,11 +64,13 @@ void Player::update(float delta_time) { m_player_pos += glm::normalize(glm::vec3(m_right.x, 0.0f, m_right.z)) * speed; } if (m_move_state.up) { - m_player_pos += glm::vec3(0.0f, 1.0f, 0.0f) * speed; + m_player_pos += glm::vec3(0.0f, 1.0f, 0.0f) * speed * 2.0f; } + /* if (m_move_state.down) { m_player_pos -= glm::vec3(0.0f, 1.0f, 0.0f) * speed; } + */ // calculate the block that is looked glm::ivec3 block_pos; if(ray_cast(glm::vec3(m_player_pos.x + 0.5f, (m_player_pos.y + 1.0f), m_player_pos.z + 0.5f), m_front, block_pos)) { @@ -76,7 +78,18 @@ void Player::update(float delta_time) { } else { m_look_block_pos = std::nullopt; } + static bool should_ceil = true; + if (!m_world.is_block(m_player_pos)) { + + m_player_pos -= glm::vec3(0.0f, 1.0f, 0.0f) * speed * 0.7f; + } else if (should_ceil) { + should_ceil = false; + m_player_pos.y = std::ceil(m_player_pos.y); + } + if (m_player_pos.y < -50.0f) { + m_player_pos = glm::vec3(0.0f, 15.0f, 0.0f); + } } void Player::update_player_move_state(int key, int action) { diff --git a/src/main.cpp b/src/main.cpp index 1cf8e74..967760f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -62,7 +62,7 @@ void init(GLFWwindow* window) { glfwGetFramebufferSize(window, &width, &height); aspect = (float)width / (float)height; glViewport(0, 0, width, height); - p_mat = glm::perspective(glm::radians(60.0f), aspect, 0.1f, 1000.0f); + p_mat = glm::perspective(glm::radians(FOV), aspect, 0.1f, 1000.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL);