PinmikPanik/gamedata/objects/particles.py

49 lines
1.5 KiB
Python

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
self.depth = 6
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)