from __future__ import annotations import pygame class Explosion(pygame.sprite.Sprite): def __init__(self, pos: tuple[float, float], frames: list[pygame.Surface], frame_time: float = 0.06): super().__init__() self.frames = frames self.frame_time = float(frame_time) self.t = 0.0 self.idx = 0 self.image = self.frames[0] if self.frames else pygame.Surface((1, 1), pygame.SRCALPHA) self.rect = self.image.get_rect(center=pos) self.pos = pygame.Vector2(pos) def update(self, dt: float): if not self.frames: self.kill() return self.t += dt while self.t >= self.frame_time: self.t -= self.frame_time self.idx += 1 if self.idx >= len(self.frames): self.kill() return center = self.rect.center self.image = self.frames[self.idx] self.rect = self.image.get_rect(center=center)