Projekt_Sztuczna_Inteligencja/ui/ui_components_manager.py

61 lines
2.7 KiB
Python

import pygame
from ui.button import Button
from ui.input_box import InputBox
class UiComponentsManager:
selected = 0
def __init__(self, ui_components=None, select_first_item=True):
self.ui_components = list()
self.selectable_ui_components = list()
if ui_components is not None:
self.ui_components = ui_components
for component in ui_components:
self.selectable_ui_components.append(component) if issubclass(component.__class__, Button) else 0
else:
self.ui_components = list()
if any(self.selectable_ui_components):
self.selectable_ui_components[0].set_is_selected(select_first_item)
def run_all(self, window, mouse_position, events):
for component in filter(lambda x: x not in self.selectable_ui_components, self.ui_components):
component.draw(window)
for component in filter(lambda x: isinstance(x, Button), self.selectable_ui_components):
component.draw(window, mouse_position)
for component in filter(lambda x: isinstance(x, InputBox), self.selectable_ui_components):
component.run(window, mouse_position, events)
def draw_all(self, window, mouse_position):
for component in filter(lambda x: x not in self.selectable_ui_components, self.ui_components):
component.draw(window)
for component in self.selectable_ui_components:
component.draw(window, mouse_position)
def switch_selected_objects_with_arrow_keys(self, mouse_position, events):
for event in events:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
self.selectable_ui_components[self.selected].set_is_selected(False)
if event.key == pygame.MOUSEBUTTONDOWN:
selected_component = self.selectable_ui_components[self.selected]
selected_component.set_is_selected(selected_component.is_over(mouse_position))
if event.key == pygame.K_UP or event.key == pygame.K_LEFT:
self.selectable_ui_components[self.selected].set_is_selected(False)
self.selected = self.selected - 1 if self.selected != 0 else len(self.selectable_ui_components) - 1
self.selectable_ui_components[self.selected].set_is_selected(True)
if event.key == pygame.K_DOWN or event.key == pygame.K_RIGHT:
self.selectable_ui_components[self.selected].set_is_selected(False)
self.selected = (self.selected + 1) % len(self.selectable_ui_components)
self.selectable_ui_components[self.selected].set_is_selected(True)