Mercurial > touhou
changeset 443:cae83b963695
Make pytouhou.game.effect an extension type.
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Sat, 17 Aug 2013 02:36:05 +0200 |
| parents | 6b4c3e250bd6 |
| children | f26c8ab57257 |
| files | pytouhou/game/effect.pxd pytouhou/game/effect.py pytouhou/game/effect.pyx pytouhou/game/enemy.pyx |
| diffstat | 4 files changed, 75 insertions(+), 68 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pytouhou/game/effect.pxd Sat Aug 17 02:36:05 2013 +0200 @@ -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)
--- a/pytouhou/game/effect.py Sat Aug 10 15:21:39 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -# -*- encoding: utf-8 -*- -## -## Copyright (C) 2011 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published -## by the Free Software Foundation; version 3 only. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## - - -from pytouhou.game.element import Element -from pytouhou.game.sprite import Sprite -from pytouhou.vm.anmrunner import ANMRunner -from pytouhou.utils.interpolator import Interpolator - - - -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(): - self.anmrunner = None - - if self.sprite: - 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): - 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) - - if not reverse: - self.pos_interpolator = Interpolator((self.x, self.y), 0, - random_pos, duration, formula=(lambda x: 2. * x - x ** 2)) - else: - self.pos_interpolator = Interpolator(random_pos, 0, - (self.x, self.y), duration, formula=(lambda x: 2. * x - x ** 2)) - self.x, self.y = random_pos - - - def update(self): - Effect.update(self) - - self.pos_interpolator.update(self.frame) - self.x, self.y = self.pos_interpolator.values - - self.frame += 1 -
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pytouhou/game/effect.pyx Sat Aug 17 02:36:05 2013 +0200 @@ -0,0 +1,62 @@ +# -*- encoding: utf-8 -*- +## +## Copyright (C) 2011 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published +## by the Free Software Foundation; version 3 only. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## + +from pytouhou.game.sprite cimport Sprite +from pytouhou.vm.anmrunner import ANMRunner + + +cdef class Effect(Element): + def __init__(self, pos, index, anm): + Element.__init__(self, pos) + self.sprite = Sprite() + self.anmrunner = ANMRunner(anm, index, self.sprite) + + + cpdef update(self): + if self.anmrunner is not None and not self.anmrunner.run_frame(): + self.anmrunner = None + + if self.sprite is not None: + if self.sprite.removed: + self.sprite = None + self.removed = True + + + +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 * <double>game.prng.rand_double() - amp / 2, + self.y + amp * <double>game.prng.rand_double() - amp / 2) + + if not reverse: + self.pos_interpolator = Interpolator((self.x, self.y), 0, + random_pos, duration, formula=(lambda x: 2. * x - x ** 2)) + else: + self.pos_interpolator = Interpolator(random_pos, 0, + (self.x, self.y), duration, formula=(lambda x: 2. * x - x ** 2)) + self.x, self.y = random_pos + + + cpdef update(self): + Effect.update(self) + + self.pos_interpolator.update(self.frame) + self.x, self.y = self.pos_interpolator.values + + self.frame += 1
--- a/pytouhou/game/enemy.pyx Sat Aug 10 15:21:39 2013 +0200 +++ b/pytouhou/game/enemy.pyx Sat Aug 17 02:36:05 2013 +0200 @@ -18,7 +18,7 @@ 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):
