]> Skullheadx's Git Forge - Electric-Dipoles.git/commitdiff
collision detection w/ wall & particles
authorSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Mon, 27 Nov 2023 02:32:28 +0000 (21:32 -0500)
committerSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Mon, 27 Nov 2023 02:32:28 +0000 (21:32 -0500)
main.py
particle.py

diff --git a/main.py b/main.py
index ac9a27c300e22812596af54abe40fdeb39afc671..a78e4032d991c3a7a754a6142256896e8338b959 100644 (file)
--- 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)
index ead94ad590859b6bf02cb92ad76005b9f4901e8b..134a90b8a869c891113382c581f1506c6379e602 100644 (file)
@@ -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()