From c9376ad8e579cc94c7ecf1ab559df1427868fc7a Mon Sep 17 00:00:00 2001 From: CobaltXII Date: Sat, 5 Jan 2019 13:42:08 -0500 Subject: [PATCH] Players cannot stick to the top of blocks anymore --- src/inc/hitbox.hpp | 45 +++++++++++++++++++++++++++++---------------- src/main.cpp | 2 +- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/inc/hitbox.hpp b/src/inc/hitbox.hpp index a3e0977..b6abdc2 100644 --- a/src/inc/hitbox.hpp +++ b/src/inc/hitbox.hpp @@ -98,21 +98,28 @@ inline float hitbox_z_depth(hitbox a, hitbox b, float eps = 0.00128f) } } +// Returns the sign of a float. + +int sgn(float n) +{ + return (0.0f < n) - (n < 0.0f); +} + // Do collision detection and response on one dynamic hitbox with an array of // several static hitboxes while applying velocity to the dynamic hitbox. // Returns a collision_data structure describing the collision. struct collision_data { - bool collision_x; - bool collision_y; - bool collision_z; + int collision_x; + int collision_y; + int collision_z; collision_data ( - bool _collision_x, - bool _collision_y, - bool _collision_z + int _collision_x, + int _collision_y, + int _collision_z ) { collision_x = _collision_x; @@ -123,9 +130,9 @@ struct collision_data collision_data do_collision_detection_and_response(hitbox& object, std::vector obstacles, float& vx, float& vy, float& vz, int precision = 64) { - bool collision_x = false; - bool collision_y = false; - bool collision_z = false; + int collision_x = 0; + int collision_y = 0; + int collision_z = 0; for (int p = 0; p < precision; p++) { @@ -137,9 +144,11 @@ collision_data do_collision_detection_and_response(hitbox& object, std::vector