class MenuLevel(FloatLayout): """ Level Menu class. """ FONT_MENU_PATH = './resources/menu/vanadine_bold.ttf' FOND_MENU_PATH = './resources/menu/background_menu.png' MAPS_PATH = './resources/maps/' color_1 = COLORS['blue_color'] color_2 = COLORS['dark_blue_color'] def __init__(self, event_dispatcher, **kwargs): """ Initialize button and textures of MenuLevel. :param event_dispatcher: dispatcher :param kwargs: args of layout :rtype: void """ super(MenuLevel, self).__init__(**kwargs) self.event_dispatcher = event_dispatcher self.level_service = LevelService() # Add fond. self.canvas.add( Rectangle(source=self.FOND_MENU_PATH, size=Window.size) ) # Add button self.add_widget( Button(text="Menu", font_name=self.FONT_MENU_PATH, background_color=self.color_2, pos_hint={'x': 0.82, 'y': 0}, size_hint=(0.18, 0.15), on_press=self.switch_to_menu_screen) ) menu_level_grid = GridLayout(size_hint=(0.7, 0.45), pos_hint={'x': 0.15, 'y': 0.3}, row=2) self.add_widget(menu_level_grid) set_list = os.listdir(self.MAPS_PATH) set_number = len(set_list) menu_level_grid.cols = set_number / 2 for index in range(1, set_number + 1): if index % 2 == 0: button_title = "Level " + str(index) menu_level_grid.add_widget( Button( text=button_title, font_name=self.FONT_MENU_PATH, background_color=self.color_1, on_press=self.launch_level, cls=[index] ) ) else: button_title = "Level " + str(index) menu_level_grid.add_widget( Button( text=button_title, font_name=self.FONT_MENU_PATH, background_color=self.color_2, on_press=self.launch_level, cls=[index] ) ) def switch_to_menu_screen(self, *_): """ Required method. """ Logger.info("Propagate Menu") propagate_event('Menu', self) def launch_level(self, value): """ Load level. :param value: :rtype: void """ set_id = value.cls[0] if self.level_service.can_load_set(set_id): propagate_event('LevelManager', self, set_id) else: open_pop_up(self, 'not_unlocked', set_id)