from gamedata.objects.base import BaseObject class Particle(BaseObject): def __init__(self,game,sprites,posx,posy,velx=0,vely=0,modvelx=0,modvely=0,flipx=False,flipy=False,fps=15): super().__init__(posx,posy,game) self.vel = [velx,vely] self.mod = [modvelx,modvely] self.timer = game.lib.Timer(1/fps) # Les particules s'animent en 15 FPS par défaut self.sprites = [] self.offsets = [] for i in sprites: self.sprites.append(game.pygame.transform.flip(i,flipx,flipy)) w,h = i.get_size() self.offsets.append([w/2,h/2]) self.alpha = 1 def step(self): game = self.game for j in range(2): self.rect[j]+=self.vel[j]*game.dt*60 self.vel[j]+=self.mod[j]*game.dt*60 self.timer.tick(game.dt) if self.timer.getloops()>=len(self.sprites): # Je me supprimme une fois l'animation finie game.gameloop.delid(self.id) self.alpha = max(1-(((self.timer.getloops()+1-self.timer.getratio())/len(self.sprites)))**3,0) def draw(self): game = self.game spriteindex = self.timer.getloops() posx,posy = self.rect[:2] offx,offy = self.offsets[spriteindex] pos = posx-offx-game.globals["camerax"],posy-offy-game.globals["cameray"] self.sprites[spriteindex].set_alpha(self.alpha*255) game.window.blit(self.sprites[spriteindex],pos) self.sprites[spriteindex].set_alpha(255)