コード例 #1
0
ファイル: Menu.py プロジェクト: ISNABE/scape-me
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)