comparison pytouhou/game/effect.pyx @ 631:cd8a2baf468c

Move Particle to its own module, to not pollute pytouhou.game.effect.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Tue, 05 May 2015 14:49:22 +0200
parents e35bef07290d
children
comparison
equal deleted inserted replaced
630:6c40f5840a06 631:cd8a2baf468c
13 ## 13 ##
14 14
15 from pytouhou.game.sprite cimport Sprite 15 from pytouhou.game.sprite cimport Sprite
16 from pytouhou.vm import ANMRunner 16 from pytouhou.vm import ANMRunner
17 17
18 from pytouhou.game.game cimport Game
19
20 18
21 cdef class Effect(Element): 19 cdef class Effect(Element):
22 def __init__(self, pos, index, anm): 20 def __init__(self, pos, index, anm):
23 Element.__init__(self, pos) 21 Element.__init__(self, pos)
24 self.sprite = Sprite() 22 self.sprite = Sprite()
31 29
32 if self.sprite is not None: 30 if self.sprite is not None:
33 if self.sprite.removed: 31 if self.sprite.removed:
34 self.sprite = None 32 self.sprite = None
35 self.removed = True 33 self.removed = True
36
37
38
39 cdef class Particle(Effect):
40 def __init__(self, pos, index, anm, long amp, Game game, bint reverse=False, long duration=24):
41 Effect.__init__(self, pos, index, anm)
42
43 self.frame = 0
44 self.duration = duration
45
46 random_pos = (self.x + amp * game.prng.rand_double() - amp / 2,
47 self.y + amp * game.prng.rand_double() - amp / 2)
48
49 if not reverse:
50 self.pos_interpolator = Interpolator((self.x, self.y), 0,
51 random_pos, duration, formula=(lambda x: 2. * x - x ** 2))
52 else:
53 self.pos_interpolator = Interpolator(random_pos, 0,
54 (self.x, self.y), duration, formula=(lambda x: 2. * x - x ** 2))
55 self.x, self.y = random_pos
56
57
58 cpdef update(self):
59 Effect.update(self)
60
61 self.pos_interpolator.update(self.frame)
62 self.x, self.y = self.pos_interpolator.values
63
64 self.frame += 1