2048/src/py2048/objects/abc/ui_element.py
Kristofers Solo 624401d27b [major] refactor(game): add abstract classes
I don't know anymore where and what changed
2024-01-02 22:59:30 +02:00

50 lines
1.3 KiB
Python

from abc import ABC, ABCMeta, abstractmethod
from typing import Optional
import pygame
from loguru import logger
from py2048 import Config
from py2048.utils import Position, Size
class UIElement(ABC, metaclass=ABCMeta):
def __init__(
self,
/,
*,
position: Position,
bg_color: str,
font_color: str,
size: Size = Size(50, 50),
text: str = "",
border_radius: int = 0,
border_width: int = 0,
):
super().__init__()
self.text = text
self.size = size
self.bg_color = bg_color
self.font_color = font_color
self.border_radius = border_radius
self.border_width = border_width
self.position = position
self.x, self.y = self.position
self.font = pygame.font.SysFont(Config.FONT.family, Config.FONT.size)
@abstractmethod
def draw(self, surface: pygame.Surface) -> None:
"""Draw the element on the given surface."""
@abstractmethod
def _draw_background(self, surface: pygame.Surface) -> None:
"""Draw a background for the given surface."""
@abstractmethod
def _draw_text(self) -> None:
"""Draw the text of the element."""
@abstractmethod
def _create_surface(self) -> pygame.Surface:
"""Create a surface for the element."""