def _random(self, scale, angle): return scale * ux2D.rotated(random.uniform(0, 2 * pi))
from warnings import warn from generic import generic from FGAme.mathtools import Vec2, dot, ux2D from FGAme.mathtools import shadow_x, shadow_y, area, center_of_mass, clip, pi from FGAme.physics import Collision from FGAme.physics import Circle, AABB, Poly, Rectangle DEFAULT_DIRECTIONS = [ux2D.rotated(n * pi / 12) for n in [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11]] class CollisionError(Exception): '''Declara que não existem colisões disponíveis para os dois tipos de objetos''' pass @generic def get_collision(A, B): '''Retorna um objeto de colisão caso ocorra uma colisão com o objeto other. Caso não haja colisão, retorna None. Esta função é implementada por multidispatch. As classes derivadas de PhysicsObject devem registrar explicitamente a colisão entre todos os pares suportados (ex.: Circle com Circle, Circle com AABB, etc). Caso não tenha nenhuma implementação registrada, então utiliza-se a lógica de AABB's.''' tA = type(A).__name__ tB = type(B).__name__ warn('no collision defined for: (%s, %s)' % (tA, tB))