From 459bf8786987fbc4fab0a4c1ef6de23d4871a540 Mon Sep 17 00:00:00 2001 From: MrLetsplay2003 Date: Mon, 14 Nov 2022 09:33:01 +0100 Subject: [PATCH] Fix groundDistance --- src/kekengine/cpp/common/defaults.cpp | 6 ++++-- src/kekengine/cpp/player/defaultplayercontroller.cpp | 6 +++--- src/kekengine/include/defaultplayercontroller.h | 4 ++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/kekengine/cpp/common/defaults.cpp b/src/kekengine/cpp/common/defaults.cpp index 60c1c20..3effb3d 100644 --- a/src/kekengine/cpp/common/defaults.cpp +++ b/src/kekengine/cpp/common/defaults.cpp @@ -24,6 +24,8 @@ static ButtonElement *options; static void defaultInput(GLFWwindow *window, void *data) { if(Input::isKeyboardCaptured()) return; + // TODO: move input handling to controller class, add NoclipController + glm::vec3 direction = glm::vec3(0); if(Input::getKeyState(keyForward) == GLFW_PRESS) { @@ -52,6 +54,8 @@ static void defaultInput(GLFWwindow *window, void *data) { direction += glm::vec3(0,-1,0); } + kekData.player->controller->update(); + direction = glm::normalize(direction); if(glm::length2(direction) > 0) { if(kekData.player->noclip) { @@ -68,8 +72,6 @@ static void defaultInput(GLFWwindow *window, void *data) { if(jump) kekData.player->controller->jump(); } } - - kekData.player->controller->update(); } static void defaultKeyCallback(GLFWwindow *window, int key, int scancode, int action, int mods, void *data) { diff --git a/src/kekengine/cpp/player/defaultplayercontroller.cpp b/src/kekengine/cpp/player/defaultplayercontroller.cpp index ccb2ef1..fea597e 100644 --- a/src/kekengine/cpp/player/defaultplayercontroller.cpp +++ b/src/kekengine/cpp/player/defaultplayercontroller.cpp @@ -30,10 +30,10 @@ static bool castPlayer(glm::vec3 pos, glm::vec3 delta, const btCollisionObject * return true; } -static bool checkPlayerGrounded() { +bool DefaultPlayerController::checkPlayerGrounded() { glm::vec3 point; glm::vec3 normal; - bool onGround = castPlayer(kekData.player->getPosition(), glm::vec3(0,-1,0), nullptr, nullptr, &point, &normal); + bool onGround = castPlayer(kekData.player->getPosition(), glm::vec3(0,-groundDistance,0), nullptr, nullptr, &point, &normal); // TODO: angle check return onGround; } @@ -79,7 +79,7 @@ glm::vec3 DefaultPlayerController::move(glm::vec3 movement) { } void DefaultPlayerController::jump() { - velocity += glm::vec3(0, 10 * jumpHeight, 0); + velocity += glm::vec3(0, 10 * jumpHeight, 0) * kekData.lastFrameTime; } void DefaultPlayerController::update() { diff --git a/src/kekengine/include/defaultplayercontroller.h b/src/kekengine/include/defaultplayercontroller.h index 77c1ca1..6524a30 100644 --- a/src/kekengine/include/defaultplayercontroller.h +++ b/src/kekengine/include/defaultplayercontroller.h @@ -6,11 +6,15 @@ namespace kek { class DefaultPlayerController: public PlayerController { +protected: + bool checkPlayerGrounded(); + public: glm::vec3 gravity = glm::vec3(0,-9.81,0); float minSlideAngle = 5; float maxWalkAngle = 60; float jumpHeight = 1; + float groundDistance = 0.01; glm::vec3 velocity = glm::vec3(0);