it is now settings.py settings handles loading the json file for the particles and imports, and potentially other things such as actual settings that are saveable and more
104 lines
3.8 KiB
Python
104 lines
3.8 KiB
Python
#File Name: sandpypi.py
|
|
# Sandpypi by Stanton.
|
|
# Project name is a placeholder.
|
|
# This has been a multimonth or year project i have time blindness sorta.
|
|
# This is my most functional system for falling sand in python yet i took some things i learned in JS.
|
|
# This needs further optimizations to core performance sections.
|
|
|
|
from settings import pygame
|
|
from rendering import Rendering
|
|
from sim import Simulation
|
|
|
|
def main():
|
|
pygame.init()
|
|
clock = pygame.time.Clock()
|
|
pygame.display.set_mode((1024, 768), pygame.HWSURFACE | pygame.DOUBLEBUF)
|
|
sim = Simulation(1024, 768)
|
|
rendering = Rendering(1024, 768)
|
|
mouse_down_left = False
|
|
mouse_down_right = False
|
|
mouse_down_middle = False
|
|
mouse_down_wheel_up = False
|
|
mouse_down_wheel_down = False
|
|
over_button = False
|
|
running = True
|
|
|
|
while running:
|
|
fps = clock.get_fps()
|
|
dt = clock.tick(60) / 1000
|
|
|
|
|
|
# Handle events
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
mouse_pos = pygame.mouse.get_pos()
|
|
if event.button == 4: # Mouse wheel up
|
|
sim.brush_size = min(sim.brush_size + 1, sim.max_brush_size)
|
|
elif event.button == 5: # Mouse wheel down
|
|
sim.brush_size = max(sim.brush_size - 1, 1)
|
|
elif event.button == 1: # Left click
|
|
over_button = False
|
|
|
|
# Check category buttons
|
|
for category, button in rendering.category_buttons.items():
|
|
if button.collidepoint(mouse_pos):
|
|
rendering.current_category = category
|
|
over_button = True
|
|
break
|
|
|
|
# Check particle buttons
|
|
if not over_button:
|
|
for particle_type, button in rendering.buttons.items():
|
|
if button.collidepoint(mouse_pos):
|
|
sim.current_particle_type = particle_type
|
|
over_button = True
|
|
break
|
|
|
|
# Check clear screen button
|
|
if rendering.clear_screen_button.collidepoint(mouse_pos):
|
|
rendering.clear_screen(sim)
|
|
over_button = True
|
|
|
|
if not over_button:
|
|
mouse_down_left = True
|
|
|
|
elif event.button == 3: # Right click
|
|
mouse_down_right = True
|
|
|
|
elif event.button == 2: # Middle click
|
|
mouse_down_middle = True
|
|
|
|
elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
|
|
mouse_down_left = False
|
|
elif event.type == pygame.MOUSEBUTTONUP and event.button == 3:
|
|
mouse_down_right = False
|
|
elif event.type == pygame.MOUSEBUTTONUP and event.button == 2:
|
|
mouse_down_middle = False
|
|
elif event.type == pygame.QUIT:
|
|
running = False
|
|
|
|
if mouse_down_left and not over_button:
|
|
x, y = pygame.mouse.get_pos()
|
|
sim.create_particle_circle(x, y)
|
|
|
|
if mouse_down_right:
|
|
x, y = pygame.mouse.get_pos()
|
|
sim.clear_particles_circle(x, y)
|
|
|
|
if mouse_down_middle:
|
|
x, y = pygame.mouse.get_pos()
|
|
sim.create_particle(x, y)
|
|
|
|
|
|
sim.simulate_step(dt)
|
|
rendering.draw_particles(sim.particles, sim.active_particles, sim.particle_size, rendering.particle_colors)
|
|
rendering.draw_buttons()
|
|
rendering.draw_brush_size_slider(sim.brush_size)
|
|
rendering.draw_debug_overlay(fps, sim.particles)
|
|
pygame.display.flip()
|
|
|
|
pygame.quit()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|