+ vec_t opposing_force = platforms_rect_object_collide(
+ platforms,
+ player_hitbox(player));
+
+ while (vec_length(opposing_force) > 1e-6) {
+ player->position = vec_sum(
+ player->position,
+ vec_scala_mult(
+ opposing_force,
+ 1e-2f));
+
+ if (fabs(opposing_force.x) > 1e-6 && (opposing_force.x < 0.0f) != ((player->velocity.x + player->movement.x) < 0.0f)) {
+ player->velocity.x = 0.0f;
+ player->movement.x = 0.0f;
+ }
+
+ if (fabs(opposing_force.y) > 1e-6 && (opposing_force.y < 0.0f) != ((player->velocity.y + player->movement.y) < 0.0f)) {
+ player->velocity.y = 0.0f;
+ player->movement.y = 0.0f;
+ }
+
+ opposing_force = platforms_rect_object_collide(
+ platforms,
+ player_hitbox(player));
+ }