module Classes.Physics.Collidible where

import Linear

-- | Typeclass for implementing collision results on objects.
class Mass c => Collidible c where

  -- | returns the top left and bottom right corners relative to the objects
  -- positional vector of the axis alignes bounding box (AABB).
  boundary
    :: c            -- Object
    -> ( V2 Double  -- Top left corner of AABB relative to position
       , V2 Double  -- Bottom right corner of AABB relative to position
       )

  velocity :: c -> V2 Double

  -- | This Function is called for every collision for both colliding objects.
  collide
    -> c -- ^ Original object
    -> c -- ^ Collision partner
    -> c -- ^ Updated original object
