{-# LANGUAGE FlexibleContexts #-} module Physics.Scenes.TwoFlyingBoxes where import Data.Proxy import Physics.Engine.Class import Physics.Scenes.Scene import Physics.World.Class boxA :: (PhysicsEngine e) => Proxy e -> PEPhysicalObj e boxA p = makePhysicalObj p (1, 0) 0 (-5, 0) 0 (2, 1) boxB :: (PhysicsEngine e) => Proxy e -> PEPhysicalObj e boxB p = makePhysicalObj p (-4, 0) 0 (5, 2) 0 (1, 0.5) boxA' :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEWorldObj' e boxA' p = makeWorldObj p (boxA p) 0.2 $ makeRectangleHull p 4 4 boxB' :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEWorldObj' e boxB' p = makeWorldObj p (boxB p) 0.2 $ makeRectangleHull p 2 2 world :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEExternalObj e -> PEWorld' e world p a b = makeWorld p [boxA' p a, boxB' p b] externals :: Proxy e -> [External] externals _ = [] contactBehavior :: (PhysicsEngine e) => Proxy e -> PEContactBehavior e contactBehavior p = makeContactBehavior p 0.01 0.02 scene :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEExternalObj e -> Scene e scene p a b = Scene (world p a b) (externals p) (contactBehavior p)