1
2
3
4
5
6
7
8
9 import utils
10 import pilas
11
13 "Administra todas las colisiones entre actores."
14
17
21
23 "Toma dos grupos de actores y analiza colisiones entre ellos."
24 (grupo_a, grupo_b, funcion_a_llamar) = tupla
25
26 for a in grupo_a:
27 for b in grupo_b:
28 try:
29 if id(a) != id(b) and utils.colisionan(a, b):
30 funcion_a_llamar(a, b)
31
32
33 if a not in pilas.escena_actual().actores:
34 if a in grupo_a:
35 list.remove(grupo_a, a)
36
37 if b not in pilas.escena_actual().actores:
38 if b in grupo_b:
39 list.remove(grupo_b, b)
40 except Exception as e:
41 list.remove(grupo_a, a)
42 raise e
43
47
82
83
85
86
87 return hasattr(objeto, 'figura')
88
89 - def agregar(self, grupo_a, grupo_b, funcion_a_llamar):
90 "Agrega dos listas de actores para analizar colisiones."
91
92 if not isinstance(grupo_a, list):
93 grupo_a = [grupo_a]
94
95 if not isinstance(grupo_b, list):
96 grupo_b = [grupo_b]
97
98 self.colisiones.append((grupo_a, grupo_b, funcion_a_llamar))
99
101
102 for x in self.colisiones:
103
104 grupo_a = x[0]
105 grupo_b = x[1]
106 fucion_a_llamar = x[2]
107
108 if actor in grupo_a:
109
110 if len(grupo_a) == 1:
111 self.colisiones.remove(x)
112 else:
113
114 grupo_a.remove(x)
115 break
116
117 if actor in grupo_b:
118
119 if len(grupo_b) == 1:
120 self.colisiones.remove(x)
121 else:
122
123 grupo_b.remove(x)
124 break
125
127 "Retorna una lista de los actores que colisionan con uno en particular."
128
129 lista_de_colisiones = []
130
131 for a in grupo_de_actores:
132 if id(actor) != id(a) and utils.colisionan(actor, a):
133 lista_de_colisiones.append(a)
134
135 return lista_de_colisiones
136