def handle_ball_collisions(self, balls): index_combo_list = list(itertools.combinations(range(0, len(balls)), 2)) for i, j in index_combo_list: A, B = balls[i], balls[j] Av, Bv = A.velocity, B.velocity if calculations.ball_collision(A, B): Av, Bv = calculations.new_velocity(A, B) self.append_ball_collision(A, B) A.velocity, B.velocity = Av, Bv balls[i], balls[j] = A, B return balls
def _handle_ball_collision(self, ball_list, collisions): index_combo_list = list(combinations(range(0, len(ball_list)), 2)) for i, j in index_combo_list: ball_A, ball_B = ball_list[i], ball_list[j] DX, DY = ball_A.velocity dx, dy = ball_B.velocity if self._ball_collision(ball_A, ball_B): self._add_to_hits_this_frame_li(ball_A, ball_B) if not self._above_threshold_this_frame(ball_A, ball_B): DXDY, dxdy = calculations.new_velocity(ball_A, ball_B) DX, DY = DXDY dx, dy = dxdy ball_A.velocity = DX, DY ball_B.velocity = dx, dy ball_list[i] = ball_A ball_list[j] = ball_B return ball_list