You can now generate many consecutive frames

This commit is contained in:
2024-08-27 23:21:18 -04:00
parent e4506bd9f0
commit 9d6c19cfd5
4 changed files with 106 additions and 42 deletions

View File

@@ -1,37 +1,20 @@
import pygame
from itertools import product
import pygame_widgets
from Shapes import *
from Scene import Scene
from CustomWidgets import ColorPicker
from pygame_widgets.button import Button
from AnimationExporter import scene_to_frame
# generate a list of cubes
meshes: list[Mesh] = []
for origin in product([-1, 0, 1],[-1, 0, 1],[-1, 0, 1]):
cube = Cube()
cube.scale((0.35, 0.35, 0.35))
cube.set_position(origin)
cube.set_face_color((0, 0, 0))
meshes.append(cube)
scene = Scene(meshes, 90, 5)
from UI import create_ui, SceneManager
WINDOW_W = 500
WINDOW_H = 500
def save_frame_to_file(frame_data=""):
frame_data += scene_to_frame(scene)
print(frame_data)
with open("tools/animation-tools/output.txt", 'w') as file:
file.write(frame_data)
file_data = ""
pygame.init()
window = pygame.display.set_mode((WINDOW_W, WINDOW_H))
colorPicker = ColorPicker(window, 20, 20, 100, 300)
save_button = Button(window, 20, WINDOW_H-40, 60, 30, text="Save",onClick=save_frame_to_file)
sceneManager: SceneManager = create_ui(window, WINDOW_W, WINDOW_H)
clock = pygame.time.Clock()
selected_meshes = []
run = True
@@ -40,6 +23,7 @@ trackMouseMotion = False
while run:
clock.tick(60)
window.fill((255, 255, 255))
current_scene: Scene = sceneManager.get_current_scene()
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
@@ -48,33 +32,21 @@ while run:
if event.button == 2: # middle mouse click
trackMouseMotion = True
elif event.button == 1: # left click
mousePosition = pygame.mouse.get_pos()
mesh = scene.get_mesh_from_xy(mousePosition)
if mesh != None:
if mesh in selected_meshes:
mesh.set_edge_color((0,0,0))
selected_meshes.remove(mesh)
else:
mesh.set_edge_color((255,0,0))
selected_meshes.append(mesh)
pass
sceneManager.click_mesh(pygame.mouse.get_pos())
elif event.type == pygame.MOUSEBUTTONUP:
if event.button == 2: # middle mouse release
trackMouseMotion = False
elif trackMouseMotion and event.type == pygame.MOUSEMOTION:
mouseMovement = pygame.mouse.get_rel()
scene.euler_angles[0] -= mouseMovement[1]
scene.euler_angles[1] -= mouseMovement[0]
current_scene.euler_angles[0] -= mouseMovement[1]
current_scene.euler_angles[1] -= mouseMovement[0]
pygame_widgets.update(events)
if not trackMouseMotion:
pygame.mouse.get_rel()
for mesh in selected_meshes:
mesh.set_face_color(colorPicker.get_color())
scene.draw(window)
sceneManager.draw()
pygame.display.flip()
pygame.quit()