Packages

A library for creating, manipulating, and detecting and resolving collisions between polygons.

Current section

Files

Jump to
collision lib collidable.ex
Raw

lib/collidable.ex

defprotocol Collidable do
@moduledoc """
"""
@doc """
Determine whether a pair of collidable entities are in collision.
## Examples
iex> Collidable.collision?(
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2},
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2, midpoint: %{x: 4, y: 4}}
...> )
false
iex> Collidable.SeparatingAxis.collision?(
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2},
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 4,
...> midpoint: %{x: 4, y: 2}}
...> )
true
"""
def collision?(any, any)
@doc """
Determine how to resolve the collision.
Returns: {Vector, magnitude}
## Examples
iex> Collidable.resolution(
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2},
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2, midpoint: %{x: 4, y: 4}}
...> )
nil
iex> Collidable.resolution(
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2},
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 4,
...> midpoint: %{x: 4, y: 1}}
...> )
{%Collision.Vector.Vector2{x: 0.7071067811865475, y: 0.7071067811865475}, 0.7071067811865475}
"""
def resolution(any, any)
@doc """
Resolve the collision.
Returns the the first entity and the translation of the second entity.
Returns: {Collidable_entity, Collidable_entity}
## Examples
iex> Collidable.resolve_collision(
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2},
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2, midpoint: %{x: 4, y: 4}}
...> )
nil
iex> Collidable.resolve_collision(
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 2},
...> %Collision.Polygon.RegularPolygon{n_sides: 4, radius: 4,
...> midpoint: %{x: 4, y: 1}}
...> )
{%Collision.Vector.Vector2{x: 0.7071067811865475, y: 0.7071067811865475}, 0.7071067811865475}
"""
def resolve_collision(any, any)
end