Package pilas :: Module municion
[hide private]
[frames] | no frames]

Source Code for Module pilas.municion

  1  # -*- encoding: utf-8 -*- 
  2  # Pilas engine - A video game framework. 
  3  # 
  4  # Copyright 2010 - Hugo Ruscitti 
  5  # License: LGPLv3 (see http://www.gnu.org/licenses/lgpl.html) 
  6  # 
  7  # Website - http://www.pilas-engine.com.ar 
  8  import math 
  9   
 10  from pilas.actores.proyectil import Bala 
 11  from pilas.actores.proyectil import Misil 
 12   
 13   
14 -class Municion(object):
15 """ Clase base para representar un conjunto de proyectiles que pueden 16 ser disparados mediante la habilidad de Disparar. 17 """ 18
19 - def __init__(self):
20 self._proyectiles = []
21
22 - def disparar(self, x, y, rotacion, angulo_de_movimiento, offset_disparo_x, offset_disparo_y):
23 """ Este método debe ser sobreescrito.""" 24 raise Exception("No ha sobreescrito el metodo disparar.")
25
26 - def agregar_proyectil(self, proyectil):
27 """ Agrega un proyectil a la lista de proyectiles de la munición. 28 29 :param proyectil: Actor que se añadirá a la lista de proyectiles.""" 30 self._proyectiles.append(proyectil)
31
32 - def get_proyectiles(self):
33 """ Obtiene los proyectiles que acaba de disparar la munición. """ 34 return self._proyectiles
35 36 proyectiles = property(get_proyectiles, None, doc="Obtiene los proyectiles de la munición.")
37 38
39 -class BalaDoble(Municion):
40 """ Munición que dispara 2 balas paralelas. """ 41
42 - def __init__(self, separacion=10):
43 """ 44 Construye la Munición. 45 46 :param separacion: Separación en pixeles entre los dos proyectiles. 47 """ 48 49 Municion.__init__(self) 50 self.separacion = separacion
51
52 - def disparar(self, x, y, rotacion, angulo_de_movimiento, offset_disparo_x, offset_disparo_y):
53 """Realiza un disparo. 54 55 :param x: Posición horizontal desde donde comenzará a disparar. 56 :param y: Posición vertical desde donde comenzará a disparar. 57 :param angulo_de_movimiento: Angulo de inclinación inicial del disparo. 58 :param offset_disparo_x: Desplazamiento del disparo horizontal. 59 :param offset_disparo_y: Desplazamiento del disparo vertical. 60 """ 61 angulo = math.radians(angulo_de_movimiento) 62 63 self.agregar_proyectil(Bala(x=x + math.cos(angulo) * self.separacion, 64 y=y - math.sin(angulo) * self.separacion, 65 angulo_de_movimiento=angulo_de_movimiento, 66 rotacion=rotacion)) 67 68 self.agregar_proyectil(Bala(x=x - math.cos(angulo) * self.separacion, 69 y=y + math.sin(angulo) * self.separacion, 70 angulo_de_movimiento=angulo_de_movimiento, 71 rotacion=rotacion))
72 73
74 -class BalasDoblesDesviadas(Municion):
75 """ Munición que dispara 2 balas en angulos distintos. """ 76
77 - def __init__(self, angulo_desvio=5):
78 """ 79 Construye la Munición. 80 81 :param angulo_desvio: Angulo que formarán los dos proyectiles. 82 """ 83 84 Municion.__init__(self) 85 self.angulo_desvio = angulo_desvio
86
87 - def disparar(self, x, y, rotacion, angulo_de_movimiento, offset_disparo_x, offset_disparo_y):
88 """Realiza un disparo. 89 90 :param x: Posición horizontal desde donde comenzará a disparar. 91 :param y: Posición vertical desde donde comenzará a disparar. 92 :param angulo_de_movimiento: Angulo de inclinación inicial del disparo. 93 :param offset_disparo_x: Desplazamiento del disparo horizontal. 94 :param offset_disparo_y: Desplazamiento del disparo vertical. 95 """ 96 97 self.agregar_proyectil(Bala(x=x, 98 y=y, 99 angulo_de_movimiento=angulo_de_movimiento+self.angulo_desvio, 100 rotacion=rotacion)) 101 102 self.agregar_proyectil(Bala(x=x, 103 y=y, 104 angulo_de_movimiento=angulo_de_movimiento-self.angulo_desvio, 105 rotacion=rotacion))
106 107
108 -class MisilDoble(Municion):
109 """ Munición que dispara 2 misiles paralelos que aceleran poco a poco. """ 110
111 - def __init__(self, separacion=10):
112 """ 113 Construye la Munición. 114 115 :param separacion: Separación en pixeles entre los dos proyectiles. 116 """ 117 Municion.__init__(self) 118 self.separacion = separacion
119
120 - def disparar(self, x, y, rotacion, angulo_de_movimiento, offset_disparo_x, offset_disparo_y):
121 """Realiza un disparo. 122 123 :param x: Posición horizontal desde donde comenzará a disparar. 124 :param y: Posición vertical desde donde comenzará a disparar. 125 :param angulo_de_movimiento: Angulo de inclinación inicial del disparo. 126 :param offset_disparo_x: Desplazamiento del disparo horizontal. 127 :param offset_disparo_y: Desplazamiento del disparo vertical. 128 """ 129 130 angulo = math.radians(angulo_de_movimiento) 131 132 self.agregar_proyectil(Misil(x=x + math.cos(angulo) * self.separacion, 133 y=y - math.sin(angulo) * self.separacion, 134 angulo_de_movimiento=angulo_de_movimiento, 135 rotacion=rotacion)) 136 137 self.agregar_proyectil(Misil(x=x - math.cos(angulo) * self.separacion, 138 y=y + math.sin(angulo) * self.separacion, 139 angulo_de_movimiento=angulo_de_movimiento, 140 rotacion=rotacion))
141