File size: 2,760 Bytes
a3e5f70 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | from settings import *
from timer import Timer
class Evolution:
def __init__(self, frames, start_monster, end_monster, font, end_evolution, star_frames):
self.display_surface = pygame.display.get_surface()
self.start_monster_surf = pygame.transform.scale2x(frames[start_monster]['idle'][0])
self.end_monster_surf = pygame.transform.scale2x(frames[end_monster]['idle'][0])
self.timers = {
'start': Timer(800, autostart = True),
'end': Timer(1800, func = end_evolution)
}
# star animation
self.star_frames = [pygame.transform.scale2x(frame) for frame in star_frames]
self.frame_index = 0
# screen tint
self.tint_surf = pygame.Surface(self.display_surface.get_size())
self.tint_surf.set_alpha(200)
# white tint
self.start_monster_surf_white = pygame.mask.from_surface(self.start_monster_surf).to_surface()
self.start_monster_surf_white.set_colorkey('black')
self.tint_amount, self.tint_speed = 0, 80
self.start_monster_surf_white.set_alpha(self.tint_amount)
# text
self.start_text_surf = font.render(f'{start_monster} is evolving', False, COLORS['black'])
self.end_text_surf = font.render(f'{start_monster} evolved into {end_monster}', False, COLORS['black'])
def display_stars(self, dt):
self.frame_index += 20 * dt
if self.frame_index < len(self.star_frames):
frame = self.star_frames[int(self.frame_index)]
rect = frame.get_frect(center = (WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2))
self.display_surface.blit(frame, rect)
def update(self, dt):
for timer in self.timers.values():
timer.update()
if not self.timers['start'].active:
self.display_surface.blit(self.tint_surf, (0,0))
if self.tint_amount < 255:
rect = self.start_monster_surf.get_frect(center = (WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2))
self.display_surface.blit(self.start_monster_surf, rect)
self.tint_amount += self.tint_speed * dt
self.start_monster_surf_white.set_alpha(self.tint_amount)
self.display_surface.blit(self.start_monster_surf_white, rect)
text_rect = self.start_text_surf.get_frect(midtop = rect.midbottom + vector(0,20))
pygame.draw.rect(self.display_surface, COLORS['white'], text_rect.inflate(20,20), 0, 5)
self.display_surface.blit(self.start_text_surf, text_rect)
else:
rect = self.end_monster_surf.get_frect(center = (WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2))
self.display_surface.blit(self.end_monster_surf, rect)
text_rect = self.end_text_surf.get_frect(midtop = rect.midbottom + vector(0,20))
pygame.draw.rect(self.display_surface, COLORS['white'], text_rect.inflate(20,20), 0, 5)
self.display_surface.blit(self.end_text_surf, text_rect)
self.display_stars(dt)
if not self.timers['end'].active:
self.timers['end'].activate() |