Prevent objects on player's head from stopping jumping

This commit is contained in:
James Lambert 2023-05-19 12:52:43 -06:00
parent b8fd8e9fd9
commit a487a3c817

View file

@ -212,6 +212,7 @@ void playerHandleCollision(struct Player* player) {
} }
float prevY = player->body.transform.position.y; float prevY = player->body.transform.position.y;
float prevVelY = player->body.velocity.y;
if (offset != 0.0f) { if (offset != 0.0f) {
vector3AddScaled( vector3AddScaled(
@ -222,16 +223,17 @@ void playerHandleCollision(struct Player* player) {
); );
} }
if (collisionObjectIsGrabbable(contact->shapeA) || collisionObjectIsGrabbable(contact->shapeB)) {
player->body.transform.position.y = MAX(player->body.transform.position.y, prevY);
}
float relativeVelocity = vector3Dot(&contact->normal, &player->body.velocity); float relativeVelocity = vector3Dot(&contact->normal, &player->body.velocity);
if ((contact->shapeA == &player->collisionObject) == (relativeVelocity > 0.0f)) { if ((contact->shapeA == &player->collisionObject) == (relativeVelocity > 0.0f)) {
vector3ProjectPlane(&player->body.velocity, &contact->normal, &player->body.velocity); vector3ProjectPlane(&player->body.velocity, &contact->normal, &player->body.velocity);
} }
if (collisionObjectIsGrabbable(contact->shapeA) || collisionObjectIsGrabbable(contact->shapeB)) {
player->body.transform.position.y = MAX(player->body.transform.position.y, prevY);
player->body.velocity.y = MAX(player->body.velocity.y, prevVelY);
}
if (((isColliderForBall(contact->shapeA) || isColliderForBall(contact->shapeB)) && !playerIsDead(player))) { if (((isColliderForBall(contact->shapeA) || isColliderForBall(contact->shapeB)) && !playerIsDead(player))) {
playerKill(player, 0); playerKill(player, 0);
soundPlayerPlay(soundsBallKill, 1.0f, 1.0f, NULL, NULL); soundPlayerPlay(soundsBallKill, 1.0f, 1.0f, NULL, NULL);