{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
module Physics.Engine.Class where
import Data.Proxy
import Physics.World.Class
class (Fractional (PENumber e)) => PhysicsEngine e where
type PEWorld e :: * -> *
type PEWorldObj e :: * -> *
type PEExternalObj e
type PEPhysicalObj e
type PEContactBehavior e
type PENumber e
type PEShape e
makePhysicalObj :: Proxy e
-> (PENumber e, PENumber e)
-> PENumber e
-> (PENumber e, PENumber e)
-> PENumber e
-> (PENumber e, PENumber e)
-> PEPhysicalObj e
makeWorldObj :: Proxy e
-> PEPhysicalObj e
-> PENumber e
-> PEShape e
-> PEExternalObj e
-> PEWorldObj e (PEExternalObj e)
makeWorld :: Proxy e -> [PEWorldObj e (PEExternalObj e)] -> PEWorld' e
makeContactBehavior :: Proxy e -> PENumber e -> PENumber e -> PEContactBehavior e
makeConstantAccel :: Proxy e -> (PENumber e, PENumber e) -> External
makeHull :: Proxy e -> [(PENumber e, PENumber e)] -> PEShape e
makeRectangleHull :: Proxy e -> PENumber e -> PENumber e -> PEShape e
makeCircle :: Proxy e -> PENumber e -> PEShape e
type PEWorldObj' e = PEWorldObj e (PEExternalObj e)
type PEWorld' e = PEWorld e (PEWorldObj' e)