import pygame from random import randrange from images import Fonts from display import Scaling scaled_fonts = {} class LetterSprite(pygame.sprite.Sprite): def __init__(self, image, pos): super().__init__() self.image = image self.rect = self.image.get_rect().move(pos) self.direction = ( Scaling.factor * 40 * 1_000 + randrange(4_000), Scaling.factor * 40 * 1_000 + randrange(4_000)) class TextPage(pygame.sprite.Group): def __init__( self, text, pos = (0,0), size = (8_000,16_000), grid = None, font = 'lcd'): super().__init__() if grid == None: grid = size col, row = 0, 0 x, y = pos w, h = grid for ch_txt in text: if ch_txt == '\n': row += 1 col = 0 continue if ch_txt == '\t': col = (col + 4) % 4 continue font_key = (font, w) ch = ord(ch_txt) if font_key not in scaled_fonts: scaled_fonts[font_key]=[None for _ in range(256)] if scaled_fonts[font_key][ch] == None: scaled_fonts[font_key][ch] = pygame.transform.scale_by( Fonts.fonts[font].get(ch), size[0]/8 * Scaling.factor) image = scaled_fonts[font_key][ch] image_pos = Scaling.scale_to_display( (x+col*w, y+row*h) ) self.add(LetterSprite(image, image_pos)) col += 1