from .fonts import * from .colors import * import pygame import math class ItemSelection: def __init__(self, max_item_width, max_display_count = 9): self.index = 0 self.items = [] self.surface = pygame.Surface((0,0), pygame.SRCALPHA) self.max_item_width = max_item_width self.max_display_count = max_display_count self.selected_item_srf = None def set_items(self, items): self.items = items self.surface = pygame.Surface( (self.max_item_width+50, self.get_display_count()*40), pygame.SRCALPHA) def get_display_count(self): return min(self.max_display_count, len(self.items)) def get_count(self): return len(self.items) def get_selected_item(self): return self.items[self.index] def update(self): self.surface.fill("black") for i in range(self.get_display_count()): text = self.items[(i+self.index-math.floor(self.get_display_count()/2))%len(self.items)] if len(text)> math.floor(self.max_item_width/10): text = text[0:math.floor(self.max_item_width/10)-2] text += '...' #text = self.items[i] if i == math.floor(self.get_display_count()/2): #if i == self.index: text_surface = font_helvetica16.render(text, False, color_primary_light) self.selected_item_srf = text_surface else: text_surface = font_helvetica16.render(text, False, color_primary) opacity = -15 + math.floor((i+1) * 2 * 255 / self.max_display_count if i < self.max_display_count/2 else (self.max_display_count-i) * 2 * 255 / self.max_display_count) text_surface.set_alpha(opacity) #if text_surface.get_width() > self.max_item_width: self.max_item_width = text_surface.get_width() self.surface.blit(text_surface, ((10, self.surface.get_height()/self.get_display_count()*i))) pygame.draw.rect(self.surface, color_primary_light, (0, self.surface.get_height()/2-25, self.max_item_width+20, 40), 2)