from datetime import datetime import pygame def handle_events(app, system, save_callback): for event in pygame.event.get(): if event.type == pygame.QUIT: app.running = False elif event.type == pygame.VIDEORESIZE: width = max(event.w, app.min_width) height = max(event.h, app.min_height) app.resize_window(width, height) elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: app.running = False elif event.key == pygame.K_SPACE: system.toggle_pause() elif event.key == pygame.K_o: system.toggle_orbits() elif event.key == pygame.K_s: save_callback(system) def save_system_to_file(system, filename="solar_state.txt"): with open(filename, "w", encoding="utf-8") as file: file.write(f"Saved: {datetime.now()}\n") file.write(f"Paused: {system.paused}\n") file.write(f"Show orbits: {system.show_orbits}\n") file.write(f"Total stars: {len(system.stars)}\n") file.write(f"Total planets: {system.get_planet_count()}\n") file.write(f"Total objects: {len(system.get_all_objects())}\n") file.write(f"Total mass: {system.get_total_mass():.3e}\n\n") for star in system.stars: file.write(f"{star.name}: x={star.x:.2f}, y={star.y:.2f}, radius={star.radius}, mass={star.mass:.3e}\n") for planet in star.planets: file.write( f" Planet orbit={planet.orbit_number}, " f"x={planet.x:.2f}, y={planet.y:.2f}, radius={planet.radius}, " f"mass={planet.mass:.3e}, angular_speed={planet.angular_speed:.6f}, " f"linear_speed={planet.linear_speed:.3f}, direction={planet.direction}, " f"angle={planet.angle:.6f}, orbit_radius={planet.orbit_radius}\n" ) file.write("\n")