Ejemplo n.º 1
0
def get_label_box(label: text.Label):
    """Get the box of the label.

    :return: A rect that contains the label.
    """
    x, y = label.x, label.y
    width, height = label.element.content_width, label.element.content_height

    if label.element.anchor_x == 'left':
        pass
    elif label.element.anchor_x == 'center':
        x -= width / 2
    elif label.element.anchor_x == 'right':
        x -= width
    else:
        raise ValueError('Invalid x anchor: {}'.format(label.element.anchor_x))

    # Note: may need to fix 'center' and 'baseline' for multi-line label?
    if label.element.anchor_y == 'top':
        y -= height
    elif label.element.anchor_y == 'center':
        y -= height / 2
    elif label.element.anchor_y == 'baseline':
        pass
    elif label.element.anchor_y == 'bottom':
        pass
    else:
        raise ValueError('Invalid x anchor: {}'.format(label.element.anchor_x))

    world_x, world_y = label.parent.point_to_world((x, y))
    world_r, world_t = label.parent.point_to_world((x + width, y + height))

    return rect.Rect(world_x, world_y, world_r - world_x, world_t - world_y)
Ejemplo n.º 2
0
    def get_box(self):
        """Returns the box that contains the menu item.

        :rtype: (x1,x2,y1,y2)
        """
        width = self.get_item_width()
        height = self.get_item_height()
        if self.item_halign == CENTER:
            x_diff = -width / 2
        elif self.item_halign == RIGHT:
            x_diff = -width
        elif self.item_halign == LEFT:
            x_diff = 0
        else:
            raise Exception("Invalid halign: %s" % str(self.item_halign))

        y_diff = -height / 2

        x1 = self.get_item_x() + x_diff
        y1 = self.get_item_y() + y_diff
        # x1 += self.parent.x
        # y1 += self.parent.y
        # x2 = x1 + width
        # y2 = y1 + height
        # return x1, y1, x2, y2
        return rect.Rect(x1, y1, width, height)
Ejemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        add_border = kwargs.pop('border', False)

        super().__init__(*args, **kwargs)

        if add_border:
            self.add(
                Rect(rect.Rect(0, 0, self.width, self.height), Colors['white'],
                     2))
Ejemplo n.º 4
0
 def __init__(self, x, y, text):
     super(ToggleTutorialButton, self).__init__(text=text,font_name='Rabiohead',font_size=24)
     self.visible = True
     self.scale = 1
     width = 50
     height = 20
     self.rect = rect.Rect(x - width/2, - height/2, x + width/2, x + height/2)
     self.position = euclid.Vector2(x,y)
     self.cshape = aabb_to_aa_rect(self.rect)
     self.cshape.center = self.position
Ejemplo n.º 5
0
    def on_mouse_release(self, x, y, buttons, modifiers):
        if not self.enabled:
            return False

        players = self.ctrl.game.players

        # Click at an item.
        # Iterate over card sprites.
        x, y = director.director.get_virtual_coordinates(x, y)
        for i, player in enumerate(self._player_list()):
            for zone, sprite_list in zip(
                (Zone.Hand, Zone.Play),
                (self.hand_sprites[i], self.play_sprites[i])):
                for index, child in enumerate(sprite_list):
                    if child.respond_to_mouse_release(x, y, buttons,
                                                      modifiers):
                        # [NOTE]: This will stop all click events if callback return False.
                        self._sm.click_at(child, player, zone, index,
                                          (x, y, buttons, modifiers))
                        return True

        for player, hp_sprite in zip(players, self.hero_power_sprites):
            if hp_sprite.respond_to_mouse_release(x, y, buttons, modifiers):
                self._sm.click_at(hp_sprite, player, Zone.HeroPower, None,
                                  (x, y, buttons, modifiers))
                return True

        # Iterate over hero sprites.
        for player, hero_sprite in zip(players, self.hero_sprites):
            if hero_sprite.respond_to_mouse_release(x, y, buttons, modifiers):
                self._sm.click_at(hero_sprite, player, Zone.Hero, None,
                                  (x, y, buttons, modifiers))
                return True

        # Click at space.
        play_areas = [
            rect.Rect(*pos(*bl), *pos(*wh)) for bl, wh in self.PlayAreas
        ]
        for player, play_area, play_sprites in zip(self._player_list(),
                                                   play_areas,
                                                   self.play_sprites):
            if play_area.contains(x, y):
                for i, spr in enumerate(play_sprites):
                    if x < spr.x - spr.SizeBase[0] * spr.scale:
                        click_index = i
                        break
                else:
                    click_index = len(play_sprites)
                self._sm.click_at_space(player, click_index,
                                        (x, y, buttons, modifiers))
                return True

        return False
Ejemplo n.º 6
0
    def _build_components(self):
        border_rect = rect.Rect(0, 0, self.Size[0], self.Size[1])
        border_rect.center = (0, 0)
        self.activated_border = Rect(border_rect, self.SelectedColor, width=4)

        self._create_status_border(border_rect, z=3, width=2)
        self.status_border.visible = True

        # Get the part of card image.
        image = try_load_image(self.entity.get_image_name(),
                               image_part=self.ImagePart,
                               default='Minion-Skeleton.png')
        self.image_sprite = Sprite(image,
                                   pos(0.0, 0.0, base=self.SizeBase),
                                   scale=self.ImageScale,
                                   opacity=self._stealth_opacity())
        self.add(self.image_sprite, z=2)

        if self.entity.type == Type.Minion:
            atk_sprite = Sprite('Atk.png',
                                pos(-0.92, -0.81, base=self.SizeBase),
                                scale=0.6)
            self.atk_label = hs_style_label(str(self.entity.attack),
                                            pos(-0.84,
                                                -0.8,
                                                base=self.SizeBase),
                                            anchor_y='center',
                                            font_size=32,
                                            color=self._get_attack_color())
            health_sprite = Sprite('Health.png',
                                   pos(0.88, -0.81, base=self.SizeBase),
                                   scale=0.56)
            self.health_label = hs_style_label(str(self.entity.health),
                                               pos(0.86,
                                                   -0.8,
                                                   base=self.SizeBase),
                                               anchor_y='center',
                                               font_size=32,
                                               color=self._get_health_color())
            self.add(atk_sprite, z=3)
            self.add(self.atk_label, z=4)
            self.add(health_sprite, z=3)
            self.add(self.health_label, z=4)
        else:  # self.entity.type == Type.Permanent
            pass
Ejemplo n.º 7
0
    def add_loc_stub(self, player_id, loc):
        """Add a location stub rect sprite."""
        game = self.ctrl.game
        real_id = 0 if player_id == game.current_player else 1
        scale = .35

        r = rect.Rect(0, 0, 10, HandSprite.Size[1] * scale)

        num_play = len(game.players[player_id].play)
        if num_play == 0:
            x_rel = .5
        else:
            x_rel = min(.96, max(.04, loc / num_play))
        y_rel = (.38, .62)[real_id]
        r.center = pos(self.BoardL + x_rel * (self.HeroL - self.BoardL), y_rel)

        self.add(Rect(r, Colors['lightblue'], 5),
                 name='loc_stub_{}_{}'.format(real_id, loc))
Ejemplo n.º 8
0
    def _build_components(self):
        self.mana_sprite = Sprite('Mana.png',
                                  pos(0.0, 0.0, base=self.SizeBase),
                                  scale=0.4)
        self.add(self.mana_sprite, z=0)

        self.cost_label = hs_style_label(
            self.text,
            pos(0.0, 0.0, base=self.SizeBase),
            anchor_x='center',
            anchor_y='center',
            font_size=20,
        )
        self.add(self.cost_label, z=1)

        border_rect = rect.Rect(0, 0, self.Size[0], self.Size[1])
        border_rect.center = (0, 0)
        self.activated_border = Rect(border_rect, Colors['orange'], width=2)
        self.add(self.activated_border, z=2)
Ejemplo n.º 9
0
    def _build_components(self):
        border_rect = rect.Rect(0, 0, self.Size[0], self.Size[1])
        border_rect.center = (0, 0)
        self.activated_border = Rect(border_rect, self.SelectedColor, width=4)

        # TODO: Change this into a circle?
        self._create_status_border(border_rect, width=2, z=3)

        self.hp_available = Sprite('HeroPower.png',
                                   pos(0, 0.05, base=self.SizeBase),
                                   scale=1.0)
        image = try_load_image('HeroPower-{}.png'.format(self.entity.id),
                               image_part=self.ImagePart)
        self.hp_sprite = Sprite(image, scale=self.ImageScale)
        self.hp_cost_label = hs_style_label(str(self.entity.cost),
                                            pos(0, 0.633, base=self.SizeBase),
                                            font_size=24)
        self.hp_exhausted = Sprite('HeroPowerExhausted.png',
                                   pos(0, 0, base=self.SizeBase),
                                   scale=1.0)
Ejemplo n.º 10
0
 def on_cocos_resize(self, usable_width, usable_height):
     if director.window.width == reswidth:
         w = reswidth
     else:
         w = (((reswidth /
                (director.window.width - reswidth)) / 100) + 1) * reswidth
     if director.window.height == resheight:
         h = resheight
     else:
         h = ((
             (resheight /
              (director.window.height - resheight)) / 100) + 1) * resheight
     x, y = self.scrollerViewport.x, self.scrollerViewport.y
     self.scroller.viewport = rect.Rect(x, y, w, h * 0.76)
     #w, h = sc.scale(self.scrollerViewport.width, self.scrollerViewport.height)
     #w, h = director.get_virtual_coordinates(self.scrollerViewport.width, self.scrollerViewport.height)
     #pass#self.scroller.viewport = rect.Rect(self.scroller.viewport.x, self.scroller.viewport.y, w, h)
     self.scroller.update_view_size()
     #self.scroller.refresh_focus()
     print(usable_width, usable_height)
Ejemplo n.º 11
0
    def get_box(self):
        """Get the box of the label.

        Something from `pyglet.layout.TextLayout._get_top`.

        :return: A rect that contains the label.
        """

        x, y = self.x, self.y
        width, height = self.element.content_width, self.element.content_height

        if self.element.anchor_x == 'left':
            pass
        elif self.element.anchor_x == 'center':
            x -= width / 2
        elif self.element.anchor_x == 'right':
            x -= width
        else:
            raise ValueError('Invalid x anchor: {}'.format(
                self.element.anchor_x))

        # Note: may need to fix 'center' and 'baseline' for multi-line label?
        if self.element.anchor_y == 'top':
            y -= height
        elif self.element.anchor_y == 'center':
            y -= height / 2
        elif self.element.anchor_y == 'baseline':
            pass
        elif self.element.anchor_y == 'bottom':
            pass
        else:
            raise ValueError('Invalid x anchor: {}'.format(
                self.element.anchor_x))

        world_x, world_y = self.parent.point_to_world((x, y))
        world_r, world_t = self.parent.point_to_world((x + width, y + height))

        return rect.Rect(world_x, world_y, world_r - world_x,
                         world_t - world_y)
Ejemplo n.º 12
0
    def place_sprites(self):

        for object in game_SpecialLayer.objects:
            if object.name == "STARTINGPOSITION":
                starting_position = object
            if object.name == "FINISHPOSITION":
                self.finish_object = rect.Rect(object.x, object.y, 50, 50)
        # for object in game_DeathLayer.objects:
        #     self.death = rect.Rect(object.x, object.y, 50, 50)

        self.player = Actor(starting_position.position, cfg.PLAYER_STANDING,
                            cfg.PLAYER_SHAPE)
        self.add(self.player)
        self.collision_center = eu.Vector2(
            self.player.x, self.player.y - self.player.height * 0.30)
        self.starting_position = starting_position.position
        self.player.cshape = cm.AARectShape(pos, self.player.width / 6,
                                            self.player.height / 12)

        for object in game_Consumable.objects:
            GBone = Consumable(object.position, cfg.GOLDEN_BONE_SPRITE,
                               cfg.GOLDEN_BONE_SHAPE)
            self.add(GBone)
Ejemplo n.º 13
0
    def __init__(self, ctrl):
        super().__init__(ctrl)

        # Card pages (each page contains some card_ids) to show.
        self.card_id_pages = []

        # Page list groups: Klass ID -> page list
        self.page_list_groups = {k: [] for k in self.KlassOrder}
        # Current klass id. By default klass of group 0.
        self.klass_id = self.KlassOrderR[0]
        # Current page id.
        self.page_id = 0

        # Sprites of current page, and cache of all card sprites.
        self.page_card_sprites = []
        self.card_cache = {}

        # Class icons and activated marker.
        _rect = rect.Rect(0, 0, self.KlassIconSize, self.KlassIconSize)
        _rect.center = pos(self.KlassIconL, self.KlassIconY)
        self.klass_icon_activated = Rect(_rect,
                                         color=Colors['orange'],
                                         width=2)
        self.add(self.klass_icon_activated)

        self.klass_icons = {}
        for klass_name, klass in Klass.Str2Idx.items():
            # [NOTE]: These icons may be hidden if not any cards.
            i = self.KlassOrder[klass]
            icon = ActiveSprite(
                try_load_image('ClassIcon-{}.png'.format(klass_name),
                               default='ClassIcon-Neutral.png'),
                pos(self.KlassIconL + i * self.KlassIconDeltaX,
                    self.KlassIconY),
                callback=lambda klass_=klass: self.set_klass_id(
                    klass_, page_to_0=True, silent_same=True),
                scale=1.0,
            )
            self.klass_icons[klass] = icon
            self.add(icon)

        # Next and previous page.
        for is_right in (False, True):
            self.add(
                ActiveLabel.hs_style(
                    '[ {} ]'.format('→' if is_right else '←'),
                    pos((self.PageL + self.PageR) * 0.8 + 0.05 *
                        (self.PageR - self.PageL) * (1 if is_right else -1),
                        self.SwitchY),
                    callback=self._next_card_page
                    if is_right else self._previous_card_page,
                    font_size=28,
                    anchor_x='center',
                    anchor_y='center',
                    bold=True,
                ),
                name='button_page_{}'.format('right' if is_right else 'left'))

        # Filters: cost
        self.cost_filter_fns = set()

        self.cost_filter_list = []
        for i in range(10):
            self._build_cost_filter(
                str(i),
                lambda cost, i_=i: cost == i_,
                pos(self.CostFilterL + i * self.CostFilterDeltaX,
                    self.CostFilterY))
        self._build_cost_filter(
            '10+', lambda cost: cost >= 10,
            pos(self.CostFilterL + 10 * self.CostFilterDeltaX,
                self.CostFilterY))

        # Filters: search
        self.search_text = None
        self.search_text_label = ActiveLabel.hs_style(
            '搜索',
            pos(*self.SearchPos),
            callback=self._search_callback_map(),
            font_size=22,
            anchor_x='left',
            anchor_y='center',
        )
        self.add(self.search_text_label)
Ejemplo n.º 14
0
    def _build_components(self):
        border_rect = rect.Rect(0, 0, self.Size[0], self.Size[1])
        border_rect.center = (0, 0)
        self.activated_border = Rect(border_rect, self.SelectedColor, width=4)
        self._create_status_border(border_rect, width=2, z=4)

        # Hero image (background and blank foreground).
        image = try_load_image('Hero-{}.png'.format(self.entity.id),
                               image_part=self.ImagePart)
        if image is not None:
            self.add(Sprite(image,
                            pos(0.05, 0.255, base=self.SizeBase),
                            scale=self.ImageScale),
                     z=0)
        self.add(Sprite('Hero.png',
                        pos(0, 0, base=self.SizeBase),
                        scale=1.0,
                        opacity=255),
                 z=1)
        self.add(hs_style_label(str(self.user.nickname),
                                pos(0.0, -0.54, base=self.SizeBase),
                                font_size=18,
                                anchor_y='center'),
                 z=2)
        self.add(hs_style_label(str(self.entity.name),
                                pos(0.0, -0.65, base=self.SizeBase),
                                font_size=12,
                                anchor_y='center'),
                 z=2)

        self.attack_sprite = Sprite('Atk.png',
                                    pos(-0.75, -0.34, base=self.SizeBase),
                                    scale=1.0)
        self.attack_sprite.visible = False
        self.add(self.attack_sprite, z=2)
        self.attack_label = hs_style_label('0',
                                           pos(-0.687,
                                               -0.34,
                                               base=self.SizeBase),
                                           font_size=46,
                                           anchor_y='center',
                                           color=Colors['white'])
        self.attack_label.visible = False
        self.add(self.attack_label, z=3)
        self.health_label = hs_style_label(str(self.entity.health),
                                           pos(0.73, -0.34,
                                               base=self.SizeBase),
                                           font_size=46,
                                           anchor_y='center',
                                           color=self._get_health_color())
        self.add(self.health_label, z=2)
        self.armor_sprite = Sprite('Armor.png',
                                   pos(0.71, -0.00, base=self.SizeBase),
                                   scale=1.0)
        self.armor_sprite.visible = False
        self.add(self.armor_sprite, z=2)
        self.armor_label = hs_style_label('0',
                                          pos(0.71, 0.04, base=self.SizeBase),
                                          font_size=46,
                                          anchor_y='center',
                                          color=Colors['white'])
        self.armor_label.visible = False
        self.add(self.armor_label, z=3)
Ejemplo n.º 15
0
    def loadSceenShowing(self):
        self.levelData = tiles.load(self.level.datapath)
        self.tilemap_decorations = self.levelData["decorations"]
        self.tilemap_walls = self.levelData["walls"]

        self.layers = [self.tilemap_decorations, self.tilemap_walls]
        self.layers[0].visible = False
        self.layers[1].visible = True
        setattr(self.layers[0], "name", "Decorations Layer")
        setattr(self.layers[1], "name", "Walls Layer")

        if isinstance(self.level.background, str):
            self.bgLayer = layer.ScrollableLayer()
            self.bgLayer.parallax = 0.5
            bgImage = cocos.sprite.Sprite(self.level.background)
            # TODO: Add code to scale image to viewport, then tile it
            self.bgLayer.add(bgImage)

        self.scrollerViewport = rect.Rect(0, int(resheight * 0.12),
                                          int(reswidth), int(resheight * 0.76))
        self.scroller = self.LevelEditorScrollManager(self.scrollerViewport,
                                                      True)
        self.scroller.autoscale = False
        #self.scroller.on_cocos_resize = on_cocos_resize
        self.scroller.scale = 0.8
        self.scroller.viewport = cocos.rect.Rect(0, int(resheight * 0.12),
                                                 int(reswidth),
                                                 int(resheight * 0.76))
        #self.scroller.x = 0
        #self.scroller.y = 0
        self.scroller.add(self.tilemap_decorations, z=-1)
        self.scroller.add(self.tilemap_walls, z=0)
        self.gridLayer = LevelGridLayer(walls=self.tilemap_walls,
                                        decorations=self.tilemap_decorations,
                                        scroller=self.scroller,
                                        level=self.level)
        self.scroller.add(self.gridLayer, z=1)
        self.add(self.bgLayer, z=-5)

        self.add(self.scroller)

        self.headerLayer = layer.ColorLayer(0,
                                            0,
                                            0,
                                            175,
                                            width=int(reswidth),
                                            height=int(resheight * 0.12))
        self.headerLayer.x = 0
        self.headerLayer.y = resheight - self.headerLayer.height

        self.title = text.Label("Level Editor",
                                font_name=resources.font[1],
                                font_size=50,
                                anchor_y="center",
                                anchor_x="center")
        self.title.x = int(self.headerLayer.width / 2)
        self.title.y = int(self.headerLayer.height / 2)

        self.backButton = elements.mediumButton(
            "BACK", events.leveleditorevents.leveleditorGoBack)
        self.backButton.x = int(self.headerLayer.width * 0.065)
        self.backButton.y = int(self.headerLayer.height / 2)

        self.saveButton = elements.mediumButton(
            "SAVE", events.leveleditorevents.levelSave)
        self.saveButton.x = int(self.headerLayer.width * 0.947)
        self.saveButton.y = int(self.headerLayer.height / 2)

        self.discardButton = elements.mediumButton(
            "DISCARD", events.leveleditorevents.levelDiscard)
        self.discardButton.lbl.element.font_size = 13
        self.discardButton.x = int(self.headerLayer.width * 0.857)
        self.discardButton.y = int(self.headerLayer.height / 2)

        #self.editButton

        self.add(self.headerLayer, z=2)

        self.headerLayer.add(self.title)
        self.headerLayer.add(self.saveButton)
        self.headerLayer.add(self.backButton)
        self.headerLayer.add(self.discardButton)

        self.backButton.px = self.saveButton.px = self.discardButton.px = self.headerLayer.x
        self.backButton.py = self.saveButton.py = self.discardButton.py = self.headerLayer.y

        self.backButton.show(0.1)

        self.footerLayer = layer.ColorLayer(0,
                                            0,
                                            0,
                                            125,
                                            width=int(reswidth),
                                            height=int(resheight * 0.12))
        self.footerLayer.x = 0
        self.footerLayer.y = 0
        self.add(self.footerLayer, z=2)

        self.upButton = elements.smallButton("\u2b9d", self.moveUp)
        self.rightButton = elements.smallButton("\u2b9e", self.moveRight)
        self.leftButton = elements.smallButton("\u2b9c", self.moveLeft)
        self.downButton = elements.smallButton("\u2b9f", self.moveDown)

        self.upButton.x = self.footerLayer.width * 0.92
        self.upButton.y = self.footerLayer.height * 0.75

        self.rightButton.x = self.footerLayer.width * 0.955
        self.rightButton.y = self.footerLayer.height * 0.5

        self.leftButton.x = self.footerLayer.width * 0.885
        self.leftButton.y = self.footerLayer.height * 0.5

        self.downButton.x = self.footerLayer.width * 0.92
        self.downButton.y = self.footerLayer.height * 0.25

        self.itemRows = ItemPackRows()
        self.activeLayerSelection = ActiveLayerSelection()
        self.activeLayerSelection.changeLabel.element.text = self.layers[
            1].name

        self.footerLayer.add(self.upButton)
        self.footerLayer.add(self.rightButton)
        self.footerLayer.add(self.leftButton)
        self.footerLayer.add(self.downButton)
        self.footerLayer.add(self.itemRows)
        self.footerLayer.add(self.activeLayerSelection)

        self.upButton.show(0.1)
        self.rightButton.show(0.1)
        self.leftButton.show(0.1)
        self.downButton.show(0.1)

        self.scroller.set_focus(int(self.tilemap_walls.view_w / 2),
                                int(self.tilemap_walls.view_h / 2))
        self.scrollerFocusLimits = {
            "up": 0,
            "down": int(self.tilemap_walls.view_h / 2),
            "left": int(self.tilemap_walls.view_w / 2),
            "right": 0
        }

        self.intro.do(cocos.actions.Delay(3) + cocos.actions.FadeOut(1))
        self.intro.title.do(cocos.actions.Delay(3) + cocos.actions.FadeOut(1))
        self.intro.desc.do(cocos.actions.Delay(3) + cocos.actions.FadeOut(1))
Ejemplo n.º 16
0
    def _build_components(self):
        border_rect = rect.Rect(0, 0, self.Size[0], self.Size[1])
        border_rect.center = (0, 0)
        self.activated_border = Rect(border_rect, self.SelectedColor, width=4)

        if not self.static:
            self._create_status_border(border_rect, z=3, width=4)

        # Main card image.
        main_sprite = Sprite(
            '{}-{}.png'.format(Klass.Idx2Str[self._c_get('klass')],
                               self._c_get('type')),
            (0, 0),
            scale=1.0,
        )
        if self.static:
            card_cls = all_cards()[self.entity]
        else:
            card_cls = self.entity
        main_image = try_load_image(card_cls.get_image_name())
        if main_image is not None:
            image_sprite = Sprite(
                main_image,
                pos(0.0, 0.02, base=self.SizeBase),
                scale=1.2,
            )
            self.front_sprites['image'] = [image_sprite, 0]

        mana_sprite = Sprite(
            'Mana.png',
            pos(-0.85, 0.76, base=self.SizeBase),
            scale=0.9,
        )

        # Mark, name and description.
        mark_image = try_load_image('Mark-{}.png'.format(
            self._c_get('package')))
        mark_sprite = None if mark_image is None else Sprite(
            mark_image, pos(0, -0.6, base=self.SizeBase), scale=1.0)
        name_label = Label(self._c_get('name'),
                           pos(0, -0.08, base=self.SizeBase),
                           font_size=21,
                           anchor_x='center',
                           anchor_y='center',
                           bold=True)
        desc_label = HTMLLabel(self._render_desc(self._c_get('description')),
                               pos(0, -0.58, base=self.SizeBase),
                               anchor_x='center',
                               anchor_y='center',
                               width=main_sprite.width * 0.9,
                               multiline=True)
        # [NOTE]: There is an encoding bug when parsing the font name in HTML (in `pyglet\font\win32query.py:311`),
        # must set font out of HTML.
        desc_label.element.set_style('font_name',
                                     C.UI.Cocos.Fonts.Description.Name)

        # Race sprite and label.
        race = self._c_get('race')
        if race:
            race_sprite = Sprite('Race.png',
                                 pos(0.02, -0.86, base=self.SizeBase),
                                 scale=1.0)
            race_label = hs_style_label(','.join(Race.Idx2Str[r]
                                                 for r in race),
                                        pos(0.02, -0.86, base=self.SizeBase),
                                        font_size=22,
                                        anchor_y='center')
            self.front_sprites['race-sprite'] = [race_sprite, 3]
            self.front_sprites['race-label'] = [race_label, 4]

        self.front_sprites.update({
            'main': [main_sprite, 1],
            'mana-sprite': [mana_sprite, 2],
            'name': [name_label, 3],
            'desc': [desc_label, 3],
        })
        if mark_sprite is not None:
            self.front_sprites['mark-sprite'] = [mark_sprite, 2]
        if self._c_get('type') != Type.Permanent:
            mana_label = hs_style_label(str(self._c_get('cost')),
                                        pos(-0.84, 0.8, base=self.SizeBase),
                                        font_size=64,
                                        anchor_y='center',
                                        color=Colors['white'])
            self.front_sprites['mana-label'] = [mana_label, 4]

        back_sprite = Sprite(
            'Card_back-Classic.png',
            (0, 0),
            scale=1.0,
        )
        self.back_sprites['back'] = [back_sprite, 1]

        if self._c_get('rarity') not in (Rarity.Basic, Rarity.Derivative):
            self.front_sprites['rarity-sprite'] = [
                Sprite(
                    'Rarity-{}-{}.png'.format(self._c_get('type'),
                                              self._c_get('rarity')),
                    pos(0.0, -0.248, base=self.SizeBase)), 4
            ]

        if self._c_get('type') == Type.Minion:
            atk_sprite = Sprite('Atk.png',
                                pos(-0.86, -0.81, base=self.SizeBase),
                                scale=1.15)
            atk_label = hs_style_label(str(self._c_get('attack')),
                                       pos(-0.78, -0.8, base=self.SizeBase),
                                       anchor_y='center',
                                       font_size=64,
                                       color=self._get_attack_color())
            health_sprite = Sprite('Health.png',
                                   pos(0.84, -0.81, base=self.SizeBase),
                                   scale=1.05)
            health_label = hs_style_label(str(self._c_get('health')),
                                          pos(0.84, -0.8, base=self.SizeBase),
                                          anchor_y='center',
                                          font_size=64,
                                          color=self._get_health_color())
            self.front_sprites.update({
                'attack-sprite': [atk_sprite, 2],
                'attack-label': [atk_label, 3],
                'health-sprite': [health_sprite, 2],
                'health-label': [health_label, 3],
            })
        elif self._c_get('type') == Type.Spell:
            name_label.position = pos(0, -0.04, base=self.SizeBase)
            main_sprite.position = pos(0, -0.07, base=self.SizeBase)
            if mark_sprite is not None:
                mark_sprite.position = pos(0, -0.57, base=self.SizeBase)
        elif self._c_get('type') == Type.Weapon:
            name_label.position = pos(0, -0.01, base=self.SizeBase)
            main_sprite.position = pos(0, -0.01, base=self.SizeBase)
            if mark_sprite is not None:
                mark_sprite.position = pos(0, -0.55, base=self.SizeBase)
            atk_sprite = Sprite('WeaponAtk.png',
                                pos(-0.81, -0.83, base=self.SizeBase),
                                scale=0.85)
            atk_label = hs_style_label(str(self._c_get('attack')),
                                       pos(-0.78, -0.8, base=self.SizeBase),
                                       anchor_y='center',
                                       font_size=64)
            health_sprite = Sprite('WeaponHealth.png',
                                   pos(0.82, -0.83, base=self.SizeBase),
                                   scale=0.85)
            health_label = hs_style_label(str(self._c_get('health')),
                                          pos(0.83, -0.8, base=self.SizeBase),
                                          anchor_y='center',
                                          font_size=64)
            desc_label.element.color = Colors['white']
            self.front_sprites.update({
                'attack-sprite': [atk_sprite, 2],
                'attack-label': [atk_label, 3],
                'health-sprite': [health_sprite, 2],
                'health-label': [health_label, 3],
            })
        elif self._c_get('type') == Type.HeroCard:
            armor_sprite = Sprite('HeroArmor.png',
                                  pos(0.85, -0.86, base=self.SizeBase),
                                  scale=1.08)
            armor_label = hs_style_label(str(self._c_get('armor')),
                                         pos(0.85, -0.86, base=self.SizeBase),
                                         anchor_y='center',
                                         font_size=64)
            self.front_sprites.update({
                'armor-sprite': [armor_sprite, 2],
                'armor-label': [armor_label, 3],
            })
Ejemplo n.º 17
0
def get_sprite_box(sprite: Sprite):
    aabb = sprite.get_AABB()
    global_bl = sprite.parent.point_to_world(aabb.bottomleft)
    global_tr = sprite.parent.point_to_world(aabb.topright)
    return rect.Rect(*global_bl, *(global_tr - global_bl))