From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Mon, 27 Nov 2023 02:32:28 +0000 (-0500) Subject: collision detection w/ wall & particles X-Git-Url: http://git.skullheadx.com/nixos/static/gitweb.js?a=commitdiff_plain;h=f0bdfac919c5d4a8b5d63e335868b821a9acc01e;p=Electric-Dipoles.git collision detection w/ wall & particles --- diff --git a/main.py b/main.py index ac9a27c..a78e403 100644 --- a/main.py +++ b/main.py @@ -23,4 +23,4 @@ while is_running: particle.draw(screen) pygame.display.flip() - delta = clock.tick() + delta = clock.tick(60) diff --git a/particle.py b/particle.py index ead94ad..134a90b 100644 --- a/particle.py +++ b/particle.py @@ -12,8 +12,8 @@ class PointParticle: field_line_colour = (12, 12, 12) radius = 25 - step_amount = 3 - default_num_field_lines = 32 + step_amount = 5 + default_num_field_lines = 64 screen_rect = pygame.Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) def __init__(self, position, charge=1.6e-19): @@ -42,6 +42,25 @@ class PointParticle: elif self.dragging: self.dragging = False + if self.position.x + self.radius > SCREEN_WIDTH: + self.position.x = SCREEN_WIDTH - self.radius + elif self.position.x - self.radius < 0: + self.position.x = self.radius + + if self.position.y + self.radius > SCREEN_HEIGHT: + self.position.y = SCREEN_HEIGHT - self.radius + elif self.position.y - self.radius < 0: + self.position.y = self.radius + + for particle in particles: + if particle is self: + continue + if self.position.distance_to(particle.position) < self.radius + particle.radius: + midpoint = (self.position + particle.position) / 2 + diff = self.position - particle.position + self.position = midpoint + diff.normalize() * (self.radius + particle.radius) / 2 + particle.position = midpoint - diff.normalize() * (self.radius + particle.radius) / 2 + for field_line_index, angle in enumerate(self.field_line_angles): self.field_lines[field_line_index].clear() position = self.position.copy()