added a UI class to better organize UI creation
This commit is contained in:
@@ -2,7 +2,6 @@ from AnimationExporter import scene_to_frame
|
|||||||
from CustomWidgets import ColorPicker
|
from CustomWidgets import ColorPicker
|
||||||
from itertools import product
|
from itertools import product
|
||||||
from pygame_widgets.button import Button
|
from pygame_widgets.button import Button
|
||||||
import pygame_widgets
|
|
||||||
from Scene import Scene
|
from Scene import Scene
|
||||||
from Shapes import *
|
from Shapes import *
|
||||||
import pygame
|
import pygame
|
||||||
@@ -15,13 +14,7 @@ class SceneManager:
|
|||||||
self.window = window
|
self.window = window
|
||||||
self.color_picker = color_picker
|
self.color_picker = color_picker
|
||||||
self._selected_meshes: list[Mesh] = []
|
self._selected_meshes: list[Mesh] = []
|
||||||
self.make_buttons()
|
|
||||||
|
|
||||||
def make_buttons(self):
|
|
||||||
scr_wdt, scr_hgt = self.window.get_size()
|
|
||||||
self.save_button = Button(self.window, 20, scr_hgt-40, 60, 30, text="Save",onClick=self.save_frame_to_file)
|
|
||||||
self.next_frame_button = Button(self.window, scr_wdt-120, scr_hgt-40, 120, 30, text="Next Frame",onClick=self.next_scene)
|
|
||||||
self.last_frame_button = Button(self.window, scr_wdt-240, scr_hgt-40, 120, 30, text="last Frame",onClick=self.previous_scene)
|
|
||||||
def save_frame_to_file(self):
|
def save_frame_to_file(self):
|
||||||
with open("tools/animation-tools/output.txt", 'w') as file:
|
with open("tools/animation-tools/output.txt", 'w') as file:
|
||||||
for i, scene in enumerate(self._scenes):
|
for i, scene in enumerate(self._scenes):
|
||||||
@@ -84,8 +77,37 @@ class SceneManager:
|
|||||||
self.get_current_scene().euler_angles = [angle for angle in current_angles]
|
self.get_current_scene().euler_angles = [angle for angle in current_angles]
|
||||||
self.deselect_all_mesh()
|
self.deselect_all_mesh()
|
||||||
|
|
||||||
def create_ui(window, scr_wdt, scr_hgt) -> SceneManager:
|
class AnimatorUI:
|
||||||
colorPicker = ColorPicker(window, 20, 20, 100, 300)
|
def __init__(self, window):
|
||||||
sceneManager = SceneManager(window, colorPicker)
|
scr_wdt, scr_hgt = window.get_size()
|
||||||
|
|
||||||
return sceneManager
|
self.window = window
|
||||||
|
colorPicker: ColorPicker = ColorPicker(self.window, 20, 20, 100, 300)
|
||||||
|
self.sceneManager: SceneManager = SceneManager(window, colorPicker)
|
||||||
|
|
||||||
|
|
||||||
|
self.save_button: Button = Button(self.window, 20, scr_hgt-40, 60, 30, text="Save",onClick=self.sceneManager.save_frame_to_file)
|
||||||
|
self.next_frame_button: Button = Button(self.window, scr_wdt-120, scr_hgt-40, 120, 30, text="Next Frame",onClick=self.sceneManager.next_scene)
|
||||||
|
self.last_frame_button: Button = Button(self.window, scr_wdt-240, scr_hgt-40, 120, 30, text="last Frame",onClick=self.sceneManager.previous_scene)
|
||||||
|
self.trackMouseMotion: bool = False
|
||||||
|
|
||||||
|
def update_interaction(self, game_event):
|
||||||
|
if not self.trackMouseMotion:
|
||||||
|
pygame.mouse.get_rel()
|
||||||
|
|
||||||
|
if game_event.type == pygame.MOUSEBUTTONDOWN:
|
||||||
|
if game_event.button == 2: # middle mouse click
|
||||||
|
self.trackMouseMotion = True
|
||||||
|
elif game_event.button == 1: # left click
|
||||||
|
self.sceneManager.click_mesh(pygame.mouse.get_pos())
|
||||||
|
elif game_event.type == pygame.MOUSEBUTTONUP:
|
||||||
|
if game_event.button == 2: # middle mouse release
|
||||||
|
self.trackMouseMotion = False
|
||||||
|
elif self.trackMouseMotion and game_event.type == pygame.MOUSEMOTION:
|
||||||
|
mouseMovement = pygame.mouse.get_rel()
|
||||||
|
current_scene = self.sceneManager.get_current_scene()
|
||||||
|
current_scene.euler_angles[0] -= mouseMovement[1]
|
||||||
|
current_scene.euler_angles[1] -= mouseMovement[0]
|
||||||
|
|
||||||
|
def draw(self):
|
||||||
|
self.sceneManager.draw()
|
||||||
@@ -2,7 +2,7 @@ import pygame
|
|||||||
import pygame_widgets
|
import pygame_widgets
|
||||||
from Shapes import *
|
from Shapes import *
|
||||||
from Scene import Scene
|
from Scene import Scene
|
||||||
from UI import create_ui, SceneManager
|
from UI import AnimatorUI
|
||||||
|
|
||||||
WINDOW_W = 500
|
WINDOW_W = 500
|
||||||
WINDOW_H = 500
|
WINDOW_H = 500
|
||||||
@@ -13,40 +13,26 @@ file_data = ""
|
|||||||
pygame.init()
|
pygame.init()
|
||||||
window = pygame.display.set_mode((WINDOW_W, WINDOW_H))
|
window = pygame.display.set_mode((WINDOW_W, WINDOW_H))
|
||||||
|
|
||||||
sceneManager: SceneManager = create_ui(window, WINDOW_W, WINDOW_H)
|
ui = AnimatorUI(window)
|
||||||
|
|
||||||
clock = pygame.time.Clock()
|
clock = pygame.time.Clock()
|
||||||
selected_meshes = []
|
|
||||||
run = True
|
run = True
|
||||||
trackMouseMotion = False
|
|
||||||
|
|
||||||
while run:
|
while run:
|
||||||
clock.tick(60)
|
clock.tick(60)
|
||||||
window.fill((255, 255, 255))
|
window.fill((255, 255, 255))
|
||||||
current_scene: Scene = sceneManager.get_current_scene()
|
|
||||||
events = pygame.event.get()
|
events = pygame.event.get()
|
||||||
for event in events:
|
for event in events:
|
||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
run = False
|
run = False
|
||||||
elif event.type == pygame.MOUSEBUTTONDOWN:
|
# if the event isn't handled above as a global event, let the ui handle it
|
||||||
if event.button == 2: # middle mouse click
|
else:
|
||||||
trackMouseMotion = True
|
ui.update_interaction(event)
|
||||||
elif event.button == 1: # left click
|
|
||||||
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()
|
|
||||||
current_scene.euler_angles[0] -= mouseMovement[1]
|
|
||||||
current_scene.euler_angles[1] -= mouseMovement[0]
|
|
||||||
pygame_widgets.update(events)
|
pygame_widgets.update(events)
|
||||||
|
|
||||||
|
ui.draw()
|
||||||
if not trackMouseMotion:
|
|
||||||
pygame.mouse.get_rel()
|
|
||||||
|
|
||||||
sceneManager.draw()
|
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
|
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
Reference in New Issue
Block a user