# HG changeset patch # User Emmanuel Gil Peyrot # Date 1376699765 -7200 # Node ID cae83b963695b25255ec001fd480496654b4a7ed # Parent 6b4c3e250bd67e57fcb6f9eadb36912d5ab9c03e Make pytouhou.game.effect an extension type. diff --git a/pytouhou/game/effect.pxd b/pytouhou/game/effect.pxd new file mode 100644 --- /dev/null +++ b/pytouhou/game/effect.pxd @@ -0,0 +1,12 @@ +from pytouhou.game.element cimport Element +from pytouhou.utils.interpolator cimport Interpolator + +cdef class Effect(Element): + cpdef update(self) + + +cdef class Particle(Effect): + cdef long frame, duration + cdef Interpolator pos_interpolator + + cpdef update(self) diff --git a/pytouhou/game/effect.py b/pytouhou/game/effect.pyx rename from pytouhou/game/effect.py rename to pytouhou/game/effect.pyx --- a/pytouhou/game/effect.py +++ b/pytouhou/game/effect.pyx @@ -12,41 +12,37 @@ ## GNU General Public License for more details. ## - -from pytouhou.game.element import Element -from pytouhou.game.sprite import Sprite +from pytouhou.game.sprite cimport Sprite from pytouhou.vm.anmrunner import ANMRunner -from pytouhou.utils.interpolator import Interpolator - -class Effect(Element): +cdef class Effect(Element): def __init__(self, pos, index, anm): Element.__init__(self, pos) self.sprite = Sprite() self.anmrunner = ANMRunner(anm, index, self.sprite) - def update(self): - if self.anmrunner and not self.anmrunner.run_frame(): + cpdef update(self): + if self.anmrunner is not None and not self.anmrunner.run_frame(): self.anmrunner = None - if self.sprite: + if self.sprite is not None: if self.sprite.removed: self.sprite = None self.removed = True -class Particle(Effect): - def __init__(self, pos, index, anm, amp, game, reverse=False, duration=24): +cdef class Particle(Effect): + def __init__(self, pos, index, anm, long amp, game, bint reverse=False, long duration=24): Effect.__init__(self, pos, index, anm) self.frame = 0 self.duration = duration - random_pos = (self.x + amp * game.prng.rand_double() - amp / 2, - self.y + amp * game.prng.rand_double() - amp / 2) + random_pos = (self.x + amp * game.prng.rand_double() - amp / 2, + self.y + amp * game.prng.rand_double() - amp / 2) if not reverse: self.pos_interpolator = Interpolator((self.x, self.y), 0, @@ -57,11 +53,10 @@ class Particle(Effect): self.x, self.y = random_pos - def update(self): + cpdef update(self): Effect.update(self) self.pos_interpolator.update(self.frame) self.x, self.y = self.pos_interpolator.values self.frame += 1 - diff --git a/pytouhou/game/enemy.pyx b/pytouhou/game/enemy.pyx --- a/pytouhou/game/enemy.pyx +++ b/pytouhou/game/enemy.pyx @@ -18,7 +18,7 @@ from pytouhou.vm.anmrunner import ANMRun from pytouhou.game.sprite import Sprite from pytouhou.game.bullet import Bullet, LAUNCHED from pytouhou.game.laser import Laser -from pytouhou.game.effect import Effect +from pytouhou.game.effect cimport Effect cdef class Enemy(Element):