diff options
Diffstat (limited to 'src/sliceitoff/text/text.py')
-rw-r--r-- | src/sliceitoff/text/text.py | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/sliceitoff/text/text.py b/src/sliceitoff/text/text.py index 83367e0..69a30bc 100644 --- a/src/sliceitoff/text/text.py +++ b/src/sliceitoff/text/text.py @@ -8,28 +8,35 @@ from .fonts import Fonts scaled_fonts = {} -class LetterSprite(pygame.sprite.Sprite): - """ Single letter at given properties hopefully from cache +def get_letter_surface(font_key, ch): + """ Get letter surface at given properties hopefully from cache args: font_key: (font name, width to scale, color) ch: 0-255 character on cp473 color: 0-15 as in CGA palette """ + font, w, color = font_key + if font not in Fonts.fonts: + return None + if font_key not in scaled_fonts: + scaled_fonts[font_key]=[None for _ in range(256)] + if scaled_fonts[font_key][ch] is None: + scaled_fonts[font_key][ch] = pygame.transform.scale_by( + Fonts.fonts[font].get(ch), + w/8 * Scaling.factor) + scaled_fonts[font_key][ch].fill( + CGA_COLORS[color], + special_flags = pygame.BLEND_RGBA_MULT) + return scaled_fonts[font_key][ch] + + +class LetterSprite(pygame.sprite.Sprite): + """ Make sprite out of letter surface at given position """ def __init__(self, font_key, ch, pos): super().__init__() self.dead = True - if font_key not in scaled_fonts: - scaled_fonts[font_key]=[None for _ in range(256)] - if scaled_fonts[font_key][ch] is None: - font, w, color = font_key - scaled_fonts[font_key][ch] = pygame.transform.scale_by( - Fonts.fonts[font].get(ch), - w/8 * Scaling.factor) - scaled_fonts[font_key][ch].fill( - CGA_COLORS[color], - special_flags = pygame.BLEND_RGBA_MULT) - self.image = scaled_fonts[font_key][ch] + self.image = get_letter_surface(font_key, ch) self.rect = self.image.get_rect().move(pos) self.direction = ( Scaling.factor * (1_000 - randrange(2_000)), |