From 64745491aa54e7a6f1267a44ec423d23a1198155 Mon Sep 17 00:00:00 2001 From: MrLetsplay2003 Date: Tue, 15 Nov 2022 19:40:36 +0100 Subject: [PATCH] Implement walk angle, Fix slide angle --- .../cpp/player/defaultplayercontroller.cpp | 16 ++++++++++++---- src/kekgame/cpp/kekgame.cpp | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/kekengine/cpp/player/defaultplayercontroller.cpp b/src/kekengine/cpp/player/defaultplayercontroller.cpp index d8e3e29..37278aa 100644 --- a/src/kekengine/cpp/player/defaultplayercontroller.cpp +++ b/src/kekengine/cpp/player/defaultplayercontroller.cpp @@ -31,11 +31,19 @@ static bool castPlayer(glm::vec3 pos, glm::vec3 delta, const btCollisionObject * } bool DefaultPlayerController::checkPlayerGrounded() { + glm::vec3 groundDir = glm::vec3(0,-groundDistance,0); + glm::vec3 point; glm::vec3 normal; - bool onGround = castPlayer(kekData.player->getPosition(), glm::vec3(0,-groundDistance,0), nullptr, nullptr, &point, &normal); - // TODO: angle check - return onGround; + bool onGround = castPlayer(kekData.player->getPosition(), groundDir, nullptr, nullptr, &point, &normal); + if(!onGround) return false; + + normal = glm::normalize(normal); + + float angle = 180.0f - glm::angle(normal, glm::normalize(groundDir)) / M_PI * 180.0f; + if(angle > maxWalkAngle) return false; + + return true; } DefaultPlayerController::DefaultPlayerController() { @@ -64,7 +72,7 @@ glm::vec3 DefaultPlayerController::move(glm::vec3 movement) { totalMovement += movement * frac; - float angle = 90.0f - glm::angle(normal, glm::normalize(movement)) / M_PI * 90.0f; + float angle = 180.0f - glm::angle(normal, glm::normalize(movement)) / M_PI * 180.0f; if(angle < minSlideAngle) break; totalMovement += normal * 0.001f; diff --git a/src/kekgame/cpp/kekgame.cpp b/src/kekgame/cpp/kekgame.cpp index 09a2380..802058d 100644 --- a/src/kekgame/cpp/kekgame.cpp +++ b/src/kekgame/cpp/kekgame.cpp @@ -69,7 +69,7 @@ int main(int argc, char **argv) { btCollisionShape *shape = new btBoxShape(btVector3(0.5,5,25)); wall->addPhysics(shape, 0, btCollisionObject::CF_STATIC_OBJECT); wall->moveTo(glm::vec3(0,2.5,0)); - wall->rotate(45.0f, glm::vec3(0,0,1)); + wall->rotate(M_PI / 4, glm::vec3(0,0,1)); scene->addObject(wall); }