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)
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)
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))
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
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
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
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))
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)
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)
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)
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)
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)
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)
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)
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))
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], })
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))