def test_rebuild(self, _init_pygame, default_ui_manager, _display_surface_return_none): label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", manager=default_ui_manager) label.rebuild() assert label.image is not None
def test_hide(self, _init_pygame, default_ui_manager, _display_surface_return_none): label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", manager=default_ui_manager) assert label.visible == 1 label.hide() assert label.visible == 0
def test_disable(self, _init_pygame: None, default_ui_manager: UIManager, _display_surface_return_none: None): label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", manager=default_ui_manager) label.disable() assert label.is_enabled is False
def start(self): self.title_label = UILabel(pygame.Rect((87, 40), (850, 178)), "Turret Warfare", self.ui_manager, object_id="#game_title") self.play_game_button = UIButton( pygame.Rect((437, 515), (150, 35)), "Start Game", self.ui_manager, tool_tip_text="<b>Click to Start.</b>")
def test_set_dimensions(self, _init_pygame, default_ui_manager): test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 60), manager=default_ui_manager) label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", container=test_container, manager=default_ui_manager) label.set_dimensions((200, 50)) assert label.rect.size == (200, 50)
def test_set_relative_position(self, _init_pygame, default_ui_manager): test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 60), manager=default_ui_manager) label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", container=test_container, manager=default_ui_manager) label.set_relative_position((50, 50)) assert label.rect.topleft == (150, 150)
def test_set_position(self, _init_pygame, default_ui_manager, _display_surface_return_none): test_container = UIContainer(relative_rect=pygame.Rect( 100, 100, 300, 60), manager=default_ui_manager) label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", container=test_container, manager=default_ui_manager) label.set_position(pygame.math.Vector2(150.0, 30.0)) assert label.relative_rect.topleft == (50, -70)
class MainMenu(BaseAppState): def __init__(self, ui_manager: pygame_gui.UIManager, state_manger): super().__init__('main_menu', 'select_level', state_manger) self.ui_manager = ui_manager self.background_image = pygame.image.load( "images/menu_background.png").convert() self.title_label = None self.play_game_button = None def start(self): self.title_label = UILabel(pygame.Rect((87, 40), (850, 178)), "Turret Warfare", self.ui_manager, object_id="#game_title") self.play_game_button = UIButton( pygame.Rect((437, 515), (150, 35)), "Start Game", self.ui_manager, tool_tip_text="<b>Click to Start.</b>") def end(self): self.title_label.kill() self.play_game_button.kill() def run(self, surface, time_delta): for event in pygame.event.get(): if event.type == QUIT: self.set_target_state_name('quit') self.trigger_transition() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: self.set_target_state_name('quit') self.trigger_transition() self.ui_manager.process_events(event) if event.type == pygame.USEREVENT: if event.user_type == "ui_button_pressed": if event.ui_element == self.play_game_button: self.set_target_state_name('select_level') self.trigger_transition() self.ui_manager.update(time_delta) surface.blit(self.background_image, (0, 0)) # draw the background self.ui_manager.draw_ui(surface)
def test_rebuild_from_theme_data_bad_values(self, _init_pygame): manager = UIManager((800, 600), os.path.join("tests", "data", "themes", "ui_label_bad_values.json")) label = UILabel(relative_rect=pygame.Rect(100, 100, 10, 30), text="Test Label", manager=manager) assert label.image is not None
def test_show_hide_rendering(self, _init_pygame, default_ui_manager, _display_surface_return_none): resolution = (400, 400) empty_surface = pygame.Surface(resolution) empty_surface.fill(pygame.Color(0, 0, 0)) surface = empty_surface.copy() manager = UIManager(resolution) label = UILabel(relative_rect=pygame.Rect(25, 25, 375, 150), text="Test Button", manager=manager, visible=0) manager.update(0.01) manager.draw_ui(surface) assert compare_surfaces(empty_surface, surface) surface.fill(pygame.Color(0, 0, 0)) label.show() manager.update(0.01) manager.draw_ui(surface) assert not compare_surfaces(empty_surface, surface) surface.fill(pygame.Color(0, 0, 0)) label.hide() manager.update(0.01) manager.draw_ui(surface) assert compare_surfaces(empty_surface, surface)
def start(self): self.level_group_y_start = 100 self.selected_level_path = self.all_level_paths[0].path self.background_image = pygame.image.load( "images/menu_background.png").convert() self.title_label = UILabel(pygame.Rect((400, 25), (229, 60)), "Select Level", self.ui_manager, object_id="#game_sub_title") self.play_game_button = UIButton( pygame.Rect((437, 515), (150, 35)), "Start Level", self.ui_manager, tool_tip_text="<b>Click to start level.</b>") self.edit_map_button = UIButton( pygame.Rect((437, 555), (150, 35)), "Edit Level", self.ui_manager, tool_tip_text="<b>Click to enter the level editor.</b>") for level_data in self.all_level_paths: self.level_button_group.append( UIButton(pygame.Rect((437, self.level_group_y_start), (150, 20)), level_data.display_name, self.ui_manager, tool_tip_text="<b>Select this level.</b>", object_id="#choose_level_button")) self.level_group_y_start += 25 if len(self.level_button_group) > 0: self.ui_manager.set_focus_element(self.level_button_group[0])
def __init__(self, rect, ui_manager): element_ids = ['everything_window'] super().__init__(rect, ui_manager, element_ids=element_ids) # create shadow shadow_padding = (2, 2) self.image = self.ui_manager.get_shadow(self.rect.size) self.image.fill(self.ui_manager.get_theme().get_colour(self.object_ids, self.element_ids, 'dark_bg'), pygame.Rect(shadow_padding, (self.rect.width - shadow_padding[0] * 2, self.rect.height - shadow_padding[1] * 2) )) self.get_container().relative_rect.width = self.rect.width - shadow_padding[0] * 2 self.get_container().relative_rect.height = self.rect.height - shadow_padding[1] * 2 self.get_container().relative_rect.x = self.get_container().relative_rect.x + shadow_padding[0] self.get_container().relative_rect.y = self.get_container().relative_rect.y + shadow_padding[1] self.get_container().update_containing_rect_position() self.close_window_button = UIButton(relative_rect=pygame.Rect((self.get_container().rect.width-20, 0), (20, 20)), text='╳', manager=ui_manager, container=self.get_container(), parent_element=self ) self.menu_bar = UIButton(relative_rect=pygame.Rect((0, 0), (self.get_container().rect.width-20, 20)), text='Everything Container', manager=ui_manager, container=self.get_container(), parent_element=self, object_id='#message_window_title_bar' ) self.menu_bar.set_hold_range((100, 100)) self.grabbed_window = False self.starting_grab_difference = (0, 0) self.test_slider = UIHorizontalSlider(pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.70)), (240, 25)), 50.0, (0.0, 100.0), self.ui_manager, container=self.get_container(), parent_element=self) self.slider_label = UILabel(pygame.Rect((int(self.rect.width / 2) + 250, int(self.rect.height * 0.70)), (27, 25)), str(int(self.test_slider.get_current_value())), self.ui_manager, container=self.get_container(), parent_element=self) self.test_text_entry = UITextEntryLine(pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.50)), (200, -1)), self.ui_manager, container=self.get_container(), parent_element=self) self.test_text_entry.set_forbidden_characters('numbers') current_resolution_string = 'Item 1' self.test_drop_down_menu = UIDropDownMenu(['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6'], current_resolution_string, pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.3)), (200, 25)), self.ui_manager, container=self.get_container(), parent_element=self) self.health_bar = UIScreenSpaceHealthBar(pygame.Rect((int(self.rect.width / 9), int(self.rect.height * 0.7)), (200, 20)), self.ui_manager, container=self.get_container(), parent_element=self) loaded_test_image = pygame.image.load('data/images/splat.png').convert_alpha() self.test_image = UIImage(pygame.Rect((int(self.rect.width / 9), int(self.rect.height * 0.3)), loaded_test_image.get_rect().size), loaded_test_image, self.ui_manager, container=self.get_container(), parent_element=self) self.is_selected = False
class EverythingWindow(UIWindow): def __init__(self, rect, ui_manager): element_ids = ['everything_window'] super().__init__(rect, ui_manager, element_ids=element_ids) # create shadow shadow_padding = (2, 2) self.image = self.ui_manager.get_shadow(self.rect.size) self.image.fill(self.ui_manager.get_theme().get_colour(self.object_ids, self.element_ids, 'dark_bg'), pygame.Rect(shadow_padding, (self.rect.width - shadow_padding[0] * 2, self.rect.height - shadow_padding[1] * 2) )) self.get_container().relative_rect.width = self.rect.width - shadow_padding[0] * 2 self.get_container().relative_rect.height = self.rect.height - shadow_padding[1] * 2 self.get_container().relative_rect.x = self.get_container().relative_rect.x + shadow_padding[0] self.get_container().relative_rect.y = self.get_container().relative_rect.y + shadow_padding[1] self.get_container().update_containing_rect_position() self.close_window_button = UIButton(relative_rect=pygame.Rect((self.get_container().rect.width-20, 0), (20, 20)), text='╳', manager=ui_manager, container=self.get_container(), parent_element=self ) self.menu_bar = UIButton(relative_rect=pygame.Rect((0, 0), (self.get_container().rect.width-20, 20)), text='Everything Container', manager=ui_manager, container=self.get_container(), parent_element=self, object_id='#message_window_title_bar' ) self.menu_bar.set_hold_range((100, 100)) self.grabbed_window = False self.starting_grab_difference = (0, 0) self.test_slider = UIHorizontalSlider(pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.70)), (240, 25)), 50.0, (0.0, 100.0), self.ui_manager, container=self.get_container(), parent_element=self) self.slider_label = UILabel(pygame.Rect((int(self.rect.width / 2) + 250, int(self.rect.height * 0.70)), (27, 25)), str(int(self.test_slider.get_current_value())), self.ui_manager, container=self.get_container(), parent_element=self) self.test_text_entry = UITextEntryLine(pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.50)), (200, -1)), self.ui_manager, container=self.get_container(), parent_element=self) self.test_text_entry.set_forbidden_characters('numbers') current_resolution_string = 'Item 1' self.test_drop_down_menu = UIDropDownMenu(['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6'], current_resolution_string, pygame.Rect((int(self.rect.width / 2), int(self.rect.height * 0.3)), (200, 25)), self.ui_manager, container=self.get_container(), parent_element=self) self.health_bar = UIScreenSpaceHealthBar(pygame.Rect((int(self.rect.width / 9), int(self.rect.height * 0.7)), (200, 20)), self.ui_manager, container=self.get_container(), parent_element=self) loaded_test_image = pygame.image.load('data/images/splat.png').convert_alpha() self.test_image = UIImage(pygame.Rect((int(self.rect.width / 9), int(self.rect.height * 0.3)), loaded_test_image.get_rect().size), loaded_test_image, self.ui_manager, container=self.get_container(), parent_element=self) self.is_selected = False def select(self): self.is_selected = True def unselect(self): self.is_selected = False def process_event(self, event): processed_event = False if self.is_selected: if event.type == pygame.KEYDOWN: if event.key == pygame.K_p: self.test_slider.set_current_value(50) if event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: mouse_x, mouse_y = event.pos if self.rect.collidepoint(mouse_x, mouse_y): processed_event = True self.window_stack.move_window_to_front(self) return processed_event def update(self, time_delta): if self.alive(): if self.test_slider.has_moved_recently: self.slider_label.set_text(str(int(self.test_slider.get_current_value()))) if self.menu_bar.held: mouse_x, mouse_y = pygame.mouse.get_pos() if not self.grabbed_window: self.window_stack.move_window_to_front(self) self.grabbed_window = True self.starting_grab_difference = (mouse_x - self.rect.x, mouse_y - self.rect.y) current_grab_difference = (mouse_x - self.rect.x, mouse_y - self.rect.y) adjustment_required = (current_grab_difference[0] - self.starting_grab_difference[0], current_grab_difference[1] - self.starting_grab_difference[1]) self.rect.x += adjustment_required[0] self.rect.y += adjustment_required[1] self.get_container().relative_rect.x += adjustment_required[0] self.get_container().relative_rect.y += adjustment_required[1] self.get_container().update_containing_rect_position() else: self.grabbed_window = False if self.close_window_button.check_pressed(): self.kill() super().update(time_delta)
class SelectLevelMenu(BaseAppState): def __init__(self, ui_manager: pygame_gui.UIManager, state_manager): super().__init__('select_level', 'game', state_manager) self.ui_manager = ui_manager self.all_level_paths = [] self.selected_level_path = None self.background_image = None self.title_label = None self.play_game_button = None self.edit_map_button = None self.level_button_group = [] self.level_group_y_start = 100 self.reload_levels() def start(self): self.level_group_y_start = 100 self.selected_level_path = self.all_level_paths[0].path self.background_image = pygame.image.load( "images/menu_background.png").convert() self.title_label = UILabel(pygame.Rect((400, 25), (229, 60)), "Select Level", self.ui_manager, object_id="#game_sub_title") self.play_game_button = UIButton( pygame.Rect((437, 515), (150, 35)), "Start Level", self.ui_manager, tool_tip_text="<b>Click to start level.</b>") self.edit_map_button = UIButton( pygame.Rect((437, 555), (150, 35)), "Edit Level", self.ui_manager, tool_tip_text="<b>Click to enter the level editor.</b>") for level_data in self.all_level_paths: self.level_button_group.append( UIButton(pygame.Rect((437, self.level_group_y_start), (150, 20)), level_data.display_name, self.ui_manager, tool_tip_text="<b>Select this level.</b>", object_id="#choose_level_button")) self.level_group_y_start += 25 if len(self.level_button_group) > 0: self.ui_manager.set_focus_element(self.level_button_group[0]) def end(self): self.title_label.kill() self.play_game_button.kill() self.edit_map_button.kill() for button in self.level_button_group: button.kill() self.level_button_group.clear() def reload_levels(self): self.all_level_paths[:] = [] for level_file in os.listdir("data/levels/"): full_file_name = "data/levels/" + level_file level_data = LevelUIData(full_file_name) self.all_level_paths.append(level_data) def run(self, surface, time_delta): for event in pygame.event.get(): if event.type == QUIT: self.set_target_state_name('quit') self.trigger_transition() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: self.trigger_transition() self.ui_manager.process_events(event) if event.type == pygame.USEREVENT: if event.user_type == "ui_button_pressed": if event.ui_element == self.play_game_button: self.set_target_state_name('game') self.outgoing_transition_data[ 'selected_level_path'] = self.selected_level_path self.trigger_transition() if event.ui_element == self.edit_map_button: self.set_target_state_name('editor') self.outgoing_transition_data[ 'selected_level_path'] = self.selected_level_path self.trigger_transition() if event.ui_object_id == "#choose_level_button": self.ui_manager.set_focus_element(event.ui_element) for level_data in self.all_level_paths: if level_data.display_name == event.ui_element.text: self.selected_level_path = level_data.path self.ui_manager.update(time_delta) surface.blit(self.background_image, (0, 0)) # draw the background self.ui_manager.draw_ui(surface)
screen = pygame.display.set_mode((600, 450)) background = pygame.Surface((800, 600)) background.fill(pygame.Color("#000000")) manager = pygame_gui.UIManager((600, 450)) menu = UIDropDownMenu( options_list=["схема", "спутник", "гибрид"], starting_option="схема", relative_rect=pygame.Rect(0, 0, 200, 30), manager=manager, ) label = UILabel(relative_rect=pygame.Rect(0, 420, 600, 30), text=full_adress(json), manager=manager) text_entry = UITextEntryLine(relative_rect=pygame.Rect(0, 30, 150, 30), manager=manager) search_button = pygame_gui.elements.UIButton(relative_rect=pygame.Rect( (150, 30), (50, 30)), text="find", manager=manager) cancel_button = pygame_gui.elements.UIButton(relative_rect=pygame.Rect( (0, 60), (200, 30)), text="cancel", manager=manager)
def test_set_text(self, _init_pygame, default_ui_manager): label = UILabel(relative_rect=pygame.Rect(100, 100, 150, 30), text="Test Label", manager=default_ui_manager) label.set_text("new text") assert label.image is not None