2048/src/py2048/objects/label.py
2024-01-03 00:49:09 +02:00

55 lines
1.7 KiB
Python

import pygame
from loguru import logger
from py2048 import Config
from py2048.utils import Position, Size
from .abc import UIElement
class Label(UIElement, pygame.sprite.Sprite):
def __init__(self, *args, **kwargs) -> None:
pygame.sprite.Sprite.__init__(self)
super().__init__(*args, **kwargs)
self.image = self._create_surface()
self.rect = self.image.get_rect()
self.rect.topleft = self.position
self.update()
def draw(self, surface: pygame.Surface) -> None:
"""Draw the element on the given surface."""
self._draw_background(surface)
self._draw_text()
self.image.blit(self.image, (0, 0))
def update(self) -> None:
"""Update the sprite."""
self._draw_background(self.image)
self._draw_text()
self.image.blit(self.image, (0, 0))
def _draw_background(self, surface: pygame.Surface) -> None:
"""Draw a background for the given surface."""
if self.size:
pygame.draw.rect(
surface,
self.bg_color,
(0, 0, *self.size),
border_radius=Config.TILE.border.radius,
)
def _draw_text(self) -> None:
"""Draw the text of the element."""
self.rendered_text = self.font.render(self.text, True, self.font_color)
self.image.blit(
self.rendered_text,
self.rendered_text.get_rect(center=self.image.get_rect().center),
)
def _create_surface(self) -> pygame.Surface:
"""Create a surface for the element."""
surface = pygame.Surface(self.size, pygame.SRCALPHA)
self._draw_background(surface)
return surface