Beispiel #1
0
    def enter(self):
        self.cards = [CardInfo(c, self.client.res) for c in cardprovider.get_all_card_classes()
                      if c not in commonpiles]
        self.cards.sort(key=lambda c: c.name)
        self.selected = []

        self.cards_draw_offset = 0
        self.selected_draw_offset = 0

        app = self.client.app
        x = 15

        gui.Label((x, 50), (180, 0), app, text="Decks")

        self.decklist = gui.ListBox((x, 75), (180, 400), app)
        self.decklist.onItemSelected = self.__handle_decklist_select

        gui.Label((x, 500), (0, 0), app, text="Deck Name:")
        self.txtName = gui.TextBox((x, 525), (180, 0), app)

        btnSave = gui.Button((x, 560), (180, 0), app, text="Save")
        btnSave.onClick = self.__handle_save_click

        btnBack = gui.Button((x, 585), (180, 0), app, text="Back")
        btnBack.onClick = self.__handle_back_click

        self.ss_selected = ScrollableSurface((SCREEN_WIDTH - 30,
                PREV_HEIGHT + 10), (15, 615))

        surface_width = 6 * (5 + PREV_WIDTH) + 5
        surface_height = 4 * (5 + PREV_HEIGHT) + 5
        self.ss_cards = ScrollableSurface((surface_width, surface_height),
                (260, 50), scroll_speed=10)

        self.__update_deck_list()
Beispiel #2
0
class EditorScene(Scene):

    def enter(self):
        self.cards = [CardInfo(c, self.client.res) for c in cardprovider.get_all_card_classes()
                      if c not in commonpiles]
        self.cards.sort(key=lambda c: c.name)
        self.selected = []

        self.cards_draw_offset = 0
        self.selected_draw_offset = 0

        app = self.client.app
        x = 15

        gui.Label((x, 50), (180, 0), app, text="Decks")

        self.decklist = gui.ListBox((x, 75), (180, 400), app)
        self.decklist.onItemSelected = self.__handle_decklist_select

        gui.Label((x, 500), (0, 0), app, text="Deck Name:")
        self.txtName = gui.TextBox((x, 525), (180, 0), app)

        btnSave = gui.Button((x, 560), (180, 0), app, text="Save")
        btnSave.onClick = self.__handle_save_click

        btnBack = gui.Button((x, 585), (180, 0), app, text="Back")
        btnBack.onClick = self.__handle_back_click

        self.ss_selected = ScrollableSurface((SCREEN_WIDTH - 30,
                PREV_HEIGHT + 10), (15, 615))

        surface_width = 6 * (5 + PREV_WIDTH) + 5
        surface_height = 4 * (5 + PREV_HEIGHT) + 5
        self.ss_cards = ScrollableSurface((surface_width, surface_height),
                (260, 50), scroll_speed=10)

        self.__update_deck_list()

    def __update_deck_list(self):
        del (self.decklist.items)[0:len(self.decklist.items)]
        for d in [d[:-5] for d in deckprovider.get_all_deck_names()]:
            self.decklist.items.append(d)
        self.decklist.selectedIndex = -1
        self.decklist.refresh()

    def __handle_decklist_select(self, *args):
        if 0 <= self.decklist.selectedIndex < len(self.decklist.items):
            self.__reset()
            deck_name = (self.decklist.items)[self.decklist.selectedIndex]
            self.txtName.text = deck_name.decode('UTF-8')
            deck = deckprovider.load_deck(deck_name)

            for c in [c for c in self.cards if c.name in deck]:
                self.selected.append(c)
                self.cards.remove(c)
                self.cards.sort(key=lambda c: c.name)
                self.selected.sort(key=lambda c: c.name)

    def __handle_save_click(self, *args):
        #TODO feedback to UI
        if len(self.selected) < 10:
            logging.debug("need 10 cards for a deck")
            return

        if not self.txtName.text:
            logging.debug("need a name for the deck")
            return

        if self.txtName.text.lower() == 'random':
            logging.debug("can't name deck 'random'")
            return

        deckprovider.save_deck(self.txtName.text, [c.name for c in self.selected])
        self.__update_deck_list()
        self.__reset()
        logging.debug("deck saved")

    def notify(self, event):
        pass

    def draw(self, surface):
        num_cards = len(self.cards)
        num_in_row = (num_cards + 3) / 4
        cards_surface = pygame.Surface(((PREV_WIDTH + 5) * num_in_row +
                5, (PREV_HEIGHT + 5) * 4 + 5))

        x = 5
        y = 5
        i = 0
        for c in self.cards:
            i += 1
            cards_surface.blit(c.image, (x, y))
            c.loc = (x, y)
            x += 5 + PREV_WIDTH
            if i == num_in_row:
                x = 5
                y += 5 + PREV_HEIGHT
                i = 0

        self.ss_cards.draw(surface, cards_surface)

        selected_surface = pygame.Surface(((PREV_WIDTH + 5) * len(self.selected) +
                5, PREV_HEIGHT + 10))

        x = 5
        y = 5

        for c in self.selected:
            selected_surface.blit(c.image, (x, y))
            c.loc = (x, y)
            x += 5 + PREV_WIDTH

        self.ss_selected.draw(surface, selected_surface)

    def __get_card_under_mouse(self, ss, card_list):
        if not ss.get_rect().move(ss.pos).collidepoint(pygame.mouse.get_pos()):
            return
        for c in card_list:
            (x, y) = c.loc
            rect = pygame.Rect(x + ss.x_offset + (ss.pos)[0], y + ss.y_offset +
                               (ss.pos)[1], PREV_WIDTH, PREV_HEIGHT)
            if rect.collidepoint(pygame.mouse.get_pos()):
                return c

    def __reset(self):
        for c in self.selected:
            self.cards.append(c)
        self.selected = []
        self.txtName.text = ''
        self.cards.sort(key=lambda c: c.name)

    def handle_event(self, event):
        if event.type == pygame.MOUSEBUTTONUP and event.button == 1:
            if len(self.selected) < 10:
                card = self.__get_card_under_mouse(self.ss_cards, self.cards)
                if card:
                    self.cards.remove(card)
                    self.selected.append(card)

            card = self.__get_card_under_mouse(self.ss_selected, self.selected)
            if card:
                self.selected.remove(card)
                self.cards.append(card)

            self.cards.sort(key=lambda c: c.name)
            self.selected.sort(key=lambda c: c.name)

    def leave(self):
        app = self.client.app
        app.widgets = []

    def __handle_back_click(self, *args):
        self.client.go_back()