Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pilas/colisiones.py
diff options
context:
space:
mode:
Diffstat (limited to 'pilas/colisiones.py')
-rw-r--r--pilas/colisiones.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/pilas/colisiones.py b/pilas/colisiones.py
new file mode 100644
index 0000000..558c396
--- /dev/null
+++ b/pilas/colisiones.py
@@ -0,0 +1,60 @@
+# -*- encoding: utf-8 -*-
+# pilas engine - a video game framework.
+#
+# copyright 2010 - hugo ruscitti
+# license: lgplv3 (see http://www.gnu.org/licenses/lgpl.html)
+#
+# website - http://www.pilas-engine.com.ar
+
+import utils
+import pilas
+
+class Colisiones:
+ "Administra todas las colisiones entre actores."
+
+ def __init__(self):
+ self.colisiones = []
+
+ def verificar_colisiones(self):
+ for x in self.colisiones:
+ self._verificar_colisiones_en_tupla(x)
+
+ def _verificar_colisiones_en_tupla(self, tupla):
+ "Toma dos grupos de actores y analiza colisiones entre ellos."
+ (grupo_a, grupo_b, funcion_a_llamar) = tupla
+
+ for a in grupo_a:
+ for b in grupo_b:
+ if id(a) != id(b) and utils.colisionan(a, b):
+ funcion_a_llamar(a, b)
+
+ # verifica si alguno de los dos objetos muere en la colision.
+ if a not in pilas.actores.todos:
+ if a in grupo_a:
+ list.remove(grupo_a, a)
+
+ if b not in pilas.actores.todos:
+ if b in grupo_b:
+ list.remove(grupo_b, b)
+
+ def agregar(self, grupo_a, grupo_b, funcion_a_llamar):
+ "Agrega dos listas de actores para analizar colisiones."
+
+ if not isinstance(grupo_a, list):
+ grupo_a = [grupo_a]
+
+ if not isinstance(grupo_b, list):
+ grupo_b = [grupo_b]
+
+ self.colisiones.append((grupo_a, grupo_b, funcion_a_llamar))
+
+ def obtener_colisiones(self, actor, grupo_de_actores):
+ "Retorna una lista de los actores que colisionan con uno en particular."
+
+ lista_de_colisiones = []
+
+ for a in grupo_de_actores:
+ if id(actor) != id(a) and utils.colisionan(actor, a):
+ lista_de_colisiones.append(a)
+
+ return lista_de_colisiones