bool check_collision(SDL_Rect* rect, Line line) { double left, right, top, bottom; left = rect->x; right = rect->x + rect->w; top = rect->y; bottom = rect->y + rect->h; bool has_collision = false; Line side = {left, top, right, top}; has_collision |= check_collision_line(line, side); side = {right, top, right, bottom}; has_collision |= check_collision_line(line, side); side = {left, bottom, right, bottom}; has_collision |= check_collision_line(line, side); side = {left, top, left, bottom}; has_collision |= check_collision_line(line, side); return has_collision; }
/* * check_collision() - Return whether the given rectangle and given line intersect * @rect: the rectangle to operate on * @line: the line to operate on */ bool check_collision(const SDL_Rect& rect, const Line& line) { // Define the boundaries for the given rectangle double left = rect.x; double right = rect.x + rect.w; double top = rect.y; double bottom = rect.y + rect.h; bool has_collision = false; // Define whether the tests show a collision // Check the top border Line side = {left, top, right, top}; has_collision |= check_collision_line(line, side); // Check the right border side = {right, top, right, bottom}; has_collision |= check_collision_line(line, side); // Check the bottom border side = {left, bottom, right, bottom}; has_collision |= check_collision_line(line, side); // Check the left border side = {left, top, left, bottom}; has_collision |= check_collision_line(line, side); return has_collision; // Return whether the tested lines collide }