Implement walk angle, Fix slide angle

This commit is contained in:
MrLetsplay 2022-11-15 19:40:36 +01:00
parent f4cdc01ff3
commit 64745491aa
2 changed files with 13 additions and 5 deletions

View File

@ -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;

View File

@ -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);
}