From 1fc3a9fdab594b7eb4b8c52f44b69e192e296191 Mon Sep 17 00:00:00 2001 From: Grant Hur <22hurg@sjchrisitan.org> Date: Fri, 14 Apr 2023 18:49:27 -0700 Subject: [PATCH 1/3] . --- arcade/sprite_list/collision.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/arcade/sprite_list/collision.py b/arcade/sprite_list/collision.py index 193658674..05a3c7402 100644 --- a/arcade/sprite_list/collision.py +++ b/arcade/sprite_list/collision.py @@ -93,32 +93,28 @@ def _check_for_collision(sprite1: SpriteType, sprite2: SpriteType) -> bool: :returns: True if sprites overlap. :rtype: bool """ - sprite1_position = sprite1._position - sprite1_width = sprite1._width - sprite1_height = sprite1._height - sprite2_position = sprite2._position - sprite2_width = sprite2._width - sprite2_height = sprite2._height + radius_sum = ( - (sprite1_width if sprite1_width > sprite1_height else sprite1_height) - + (sprite2_width if sprite2_width > sprite2_height else sprite2_height) + max(sprite1._width, sprite1._height) + + max(sprite2._width, sprite2._height) ) + # Multiply by half of the theoretical max diagonal length for an estimation of distance radius_sum *= 0.71 # 1.42 / 2 - radius_sum_x2 = radius_sum * radius_sum + radius_sum_sq = radius_sum * radius_sum - diff_x = sprite1_position[0] - sprite2_position[0] - diff_x2 = diff_x * diff_x - if diff_x2 > radius_sum_x2: + diff_x = sprite1_position[0] - sprite2._position[0] + diff_x_sq = diff_x * diff_x + if diff_x_sq > radius_sum_sq: return False - diff_y = sprite1_position[1] - sprite2_position[1] - diff_y2 = diff_y * diff_y - if diff_y2 > radius_sum_x2: + diff_y = sprite1_position[1] - sprite2._position[1] + diff_y_sq = diff_y * diff_y + if diff_y2 > radius_sum_sq: return False - distance = diff_x2 + diff_y2 - if distance > radius_sum_x2: + distance = diff_x_sq + diff_y_sq + if distance > radius_sum_sq: return False return are_polygons_intersecting( From f8d6ea008472caa68c4512bf8d531f3e18e5bbe0 Mon Sep 17 00:00:00 2001 From: Grant Hur <22hurg@sjchrisitan.org> Date: Fri, 14 Apr 2023 18:53:09 -0700 Subject: [PATCH 2/3] Over looked some things --- arcade/sprite_list/collision.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arcade/sprite_list/collision.py b/arcade/sprite_list/collision.py index 05a3c7402..6df356f80 100644 --- a/arcade/sprite_list/collision.py +++ b/arcade/sprite_list/collision.py @@ -103,14 +103,14 @@ def _check_for_collision(sprite1: SpriteType, sprite2: SpriteType) -> bool: radius_sum *= 0.71 # 1.42 / 2 radius_sum_sq = radius_sum * radius_sum - diff_x = sprite1_position[0] - sprite2._position[0] + diff_x = sprite1._position[0] - sprite2._position[0] diff_x_sq = diff_x * diff_x if diff_x_sq > radius_sum_sq: return False - diff_y = sprite1_position[1] - sprite2._position[1] + diff_y = sprite1._position[1] - sprite2._position[1] diff_y_sq = diff_y * diff_y - if diff_y2 > radius_sum_sq: + if diff_y_sq > radius_sum_sq: return False distance = diff_x_sq + diff_y_sq From 4d4cb48682d0cd264d6306bc6f9794aef1e5c8b2 Mon Sep 17 00:00:00 2001 From: Grant Hur Date: Sat, 15 Apr 2023 13:14:22 -0700 Subject: [PATCH 3/3] Add comment and revert some stuff We should explain why it is unpythonic. Reverted that part --- arcade/sprite_list/collision.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/arcade/sprite_list/collision.py b/arcade/sprite_list/collision.py index 6df356f80..2d89fdc9b 100644 --- a/arcade/sprite_list/collision.py +++ b/arcade/sprite_list/collision.py @@ -93,22 +93,30 @@ def _check_for_collision(sprite1: SpriteType, sprite2: SpriteType) -> bool: :returns: True if sprites overlap. :rtype: bool """ + + #NOTE: for speed becuase attribute look ups are slow. + sprite1_position = sprite1._position + sprite1_width = sprite1._width + sprite1_height = sprite1._height + sprite2_position = sprite2._position + sprite2_width = sprite2._width + sprite2_height = sprite2._height radius_sum = ( - max(sprite1._width, sprite1._height) - + max(sprite2._width, sprite2._height) + (sprite1_width if sprite1_width > sprite1_height else sprite1_height) + + (sprite2_width if sprite2_width > sprite2_height else sprite2_height) ) # Multiply by half of the theoretical max diagonal length for an estimation of distance radius_sum *= 0.71 # 1.42 / 2 radius_sum_sq = radius_sum * radius_sum - diff_x = sprite1._position[0] - sprite2._position[0] + diff_x = sprite1_position[0] - sprite2_position[0] diff_x_sq = diff_x * diff_x if diff_x_sq > radius_sum_sq: return False - diff_y = sprite1._position[1] - sprite2._position[1] + diff_y = sprite1_position[1] - sprite2_position[1] diff_y_sq = diff_y * diff_y if diff_y_sq > radius_sum_sq: return False