Exemple #1
0
 def _random(self, scale, angle):
     return scale * ux2D.rotated(random.uniform(0, 2 * pi))
Exemple #2
0
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))