2025-02-21 19:15:31 +00:00
|
|
|
import pygame
|
|
|
|
import random
|
|
|
|
from particle import Particle
|
|
|
|
|
|
|
|
pygame.init()
|
|
|
|
|
|
|
|
# Set up display and clock.
|
|
|
|
screen = pygame.display.set_mode((800, 600))
|
|
|
|
pygame.display.set_caption("Particle Test")
|
|
|
|
clock = pygame.time.Clock()
|
|
|
|
|
|
|
|
particles = []
|
|
|
|
|
|
|
|
running = True
|
|
|
|
while running:
|
|
|
|
dt = clock.tick(60) / 1000.0 # Delta time in seconds.
|
|
|
|
|
|
|
|
# Event loop: quit on window close or spawn new particles on mouse click.
|
|
|
|
for event in pygame.event.get():
|
|
|
|
if event.type == pygame.QUIT:
|
|
|
|
running = False
|
|
|
|
elif event.type == pygame.MOUSEBUTTONDOWN:
|
|
|
|
# Create several particles at the mouse position.
|
|
|
|
for _ in range(10):
|
|
|
|
pos = pygame.mouse.get_pos()
|
|
|
|
vel = (random.uniform(-100, 100), random.uniform(-100, 100))
|
|
|
|
p = Particle(
|
|
|
|
pos=pos,
|
|
|
|
vel=vel,
|
|
|
|
acceleration=(0, 0),
|
|
|
|
lifetime=2.0,
|
|
|
|
decay_rate=1,
|
|
|
|
color=(
|
|
|
|
random.randint(100, 255),
|
|
|
|
random.randint(100, 255),
|
|
|
|
random.randint(100, 255)
|
|
|
|
),
|
|
|
|
size=5,
|
|
|
|
size_decay=2,
|
|
|
|
glow=True,
|
|
|
|
glow_intensity=1.0,
|
|
|
|
friction=0.1,
|
|
|
|
gravity=50,
|
|
|
|
bounce=True,
|
|
|
|
bounce_damping=0.7,
|
|
|
|
random_spread=10,
|
|
|
|
spin=0,
|
|
|
|
spin_rate=random.uniform(-180, 180),
|
|
|
|
spin_decay=0.5,
|
|
|
|
trail=True,
|
|
|
|
trail_length=15,
|
|
|
|
fade=True,
|
|
|
|
shape='circle'
|
|
|
|
)
|
|
|
|
particles.append(p)
|
|
|
|
|
|
|
|
# Clear the screen.
|
|
|
|
screen.fill((0, 0, 0))
|
|
|
|
|
|
|
|
# Update and draw each particle.
|
|
|
|
for particle in particles[:]:
|
|
|
|
particle.update(dt, screen.get_rect())
|
|
|
|
particle.draw(screen)
|
|
|
|
if particle.is_dead():
|
|
|
|
particles.remove(particle)
|
|
|
|
|
|
|
|
pygame.display.flip()
|
|
|
|
|
|
|
|
pygame.quit()
|