Beispiel #1
0
class SettingsMenu(Menu):
    __slots__ = ("resolution_label", "resolution_val_bg",
                 "resolution_val_bg_rect", "lang_val_bg", "lang_bg_rect",
                 "right_resolution_button", "left_resolution_button",
                 "lang_label", "right_lang_button", "left_lang_button",
                 "current_resolution_label", "current_lang_label")

    def __init__(self, parent):
        Menu.__init__(self, parent=parent, bg_name="settings_bg")
        self._title_label.set_text(
            text=self.parent.localization.get_string("settings"))
        self._title_label.set_position(
            (self.position[0] + self._bg_image.get_rect().centerx -
             self._title_label.size[0] / 2 + 10, self.position[1] + 3))

        self.resolution_label = TextLabel(
            parent=self,
            font_size=18,
            bold=True,
            text=self.parent.localization.get_string("resolution"))

        right1 = TextLabel(parent=self, font_size=18, bold=True, text=">")
        self.right_resolution_button = TextButton(
            parent=self,
            text_label=right1,
            normal_image_path="left_right.png",
            text_padding=(10, -5))
        self.right_resolution_button.set_position(
            (self._rect.right - self.right_resolution_button.size[0] - 20,
             self.position[1] + 75))

        self.resolution_val_bg = pygame.image.load("{0}/settings.png".format(
            self._res_dir))
        self.resolution_val_bg_rect = self.resolution_val_bg.get_rect()
        self.resolution_val_bg_rect.right = self.right_resolution_button._rect.left - 6
        self.resolution_val_bg_rect.y = self.position[1] + 75

        self.lang_val_bg = pygame.image.load("{0}/settings.png".format(
            self._res_dir))
        self.lang_bg_rect = self.lang_val_bg.get_rect()
        self.lang_bg_rect.right = self.resolution_val_bg_rect.right
        self.lang_bg_rect.y = self.resolution_val_bg_rect.bottom + 15

        left1 = TextLabel(parent=self, font_size=18, bold=True, text="<")
        self.left_resolution_button = TextButton(
            parent=self,
            text_label=left1,
            normal_image_path="left_right.png",
            text_padding=(10, -5))
        self.left_resolution_button.set_position(
            (self.resolution_val_bg_rect.left -
             self.left_resolution_button.size[0] - 6, self.position[1] + 75))

        self.resolution_label.set_position(
            (self.left_resolution_button.get_rect().left -
             self.resolution_label.size[0] - 20, self.position[1] + 72))

        self.lang_label = TextLabel(
            parent=self,
            font_size=18,
            bold=True,
            text=self.parent.localization.get_string("lang"))

        right2 = TextLabel(parent=self, font_size=18, bold=True, text=">")
        self.right_lang_button = TextButton(parent=self,
                                            text_label=right2,
                                            normal_image_path="left_right.png",
                                            text_padding=(10, -5))
        self.right_lang_button.set_position(
            (self.right_resolution_button.position[0],
             self.right_resolution_button.get_rect().bottom + 15))

        left2 = TextLabel(parent=self, font_size=18, bold=True, text="<")

        self.left_lang_button = TextButton(parent=self,
                                           text_label=left2,
                                           normal_image_path="left_right.png",
                                           text_padding=(10, -5))
        self.left_lang_button.set_position(
            (self.left_resolution_button.position[0],
             self.left_resolution_button.get_rect().bottom + 15))

        self.lang_label.set_position(
            (self.left_lang_button.get_rect().left - self.lang_label.size[0] -
             20, self.resolution_label.get_rect().bottom + 8))

        self.left_resolution_button.set_image_by_state(ButtonState.HOVERED,
                                                       "left_right_hover.png")
        self.right_resolution_button.set_image_by_state(
            ButtonState.HOVERED, "left_right_hover.png")
        self.left_lang_button.set_image_by_state(ButtonState.HOVERED,
                                                 "left_right_hover.png")
        self.right_lang_button.set_image_by_state(ButtonState.HOVERED,
                                                  "left_right_hover.png")

        self.right_resolution_button.add_action({
            ButtonEventType.ON_CLICK_LB:
            lambda: self.change_resolution(right=True)
        })
        self.left_resolution_button.add_action({
            ButtonEventType.ON_CLICK_LB:
            lambda: self.change_resolution(right=False)
        })

        self.current_resolution_label = TextLabel(parent=self,
                                                  font_size=18,
                                                  bold=True,
                                                  text="{0}x{1}".format(
                                                      Constants.WINDOW_W,
                                                      Constants.WINDOW_H))
        self.current_resolution_label.get_rect(
        ).center = self.resolution_val_bg_rect.center

        self.current_lang_label = TextLabel(
            parent=self,
            font_size=18,
            bold=True,
            text=Localization.get_current_locale().upper())
        self.current_lang_label.get_rect().center = self.lang_bg_rect.center

        self.right_lang_button.add_action({
            ButtonEventType.ON_CLICK_LB:
            lambda: self.change_lang(right=True)
        })
        self.left_lang_button.add_action({
            ButtonEventType.ON_CLICK_LB:
            lambda: self.change_lang(right=False)
        })

        self.parent.stop_handle()

    def destroy(self):
        self.parent.remove_render(
            self.parent.find_render_by_type(SettingsMenu))
        super().destroy()
        self.parent.start_handle()

    def change_lang(self, right: bool) -> None:
        if right:
            self.parent.main_window.change_lang(
                Localization.get_full_locale().get_next())
        else:
            self.parent.main_window.change_lang(
                Localization.get_full_locale().get_prev())

        self.current_lang_label.set_text(
            Localization.get_current_locale().upper())
        db = Database.get_instance()
        old_resources = []
        for r in self.parent.player.resources.bag:
            old_resources.append(r)
        self.parent.player.resources.bag.clear()

        for i in range(len(old_resources)):
            r = db.get_resource_by_id(old_resources[i].r_id)
            r.value = old_resources[i].value
            self.parent.player.resources.append(r)

        for b in itertools.chain(self.parent.player.farm.bees_from_all_hives,
                                 self.parent.player.farm.out_of_hive_bee_list):
            b.set_locale_to_bonus()

    def change_resolution(self, right: bool) -> None:
        index = Constants.SIZE.index((Constants.WINDOW_W, Constants.WINDOW_H))
        index = index + (1 if right else -1)
        if index == len(Constants.SIZE):
            index = 0
        print("Next", Constants.SIZE[index])
        Constants.WINDOW_W, Constants.WINDOW_H = Constants.SIZE[index]
        self.current_resolution_label.set_text(
            text="{0}x{1}".format(Constants.WINDOW_W, Constants.WINDOW_H))
        self.current_resolution_label.get_rect(
        ).center = self.resolution_val_bg_rect.center
        self.parent.main_window.change_resolution(Constants.SIZE[index])

    def handle_event(self, event: Event) -> None:
        super().handle_event(event)
        self.left_resolution_button.handle_event(event)
        self.right_resolution_button.handle_event(event)
        self.left_lang_button.handle_event(event)
        self.right_lang_button.handle_event(event)

    def draw(self, screen: pygame.Surface) -> None:
        super().draw(screen)
        self.resolution_label.draw(screen)
        screen.blit(self.resolution_val_bg, self.resolution_val_bg_rect)
        screen.blit(self.lang_val_bg, self.lang_bg_rect)
        self.right_resolution_button.draw(screen)
        self.left_resolution_button.draw(screen)
        self.lang_label.draw(screen)
        self.right_lang_button.draw(screen)
        self.left_lang_button.draw(screen)
        self.current_resolution_label.draw(screen)
        self.current_lang_label.draw(screen)