shapes-0.1.0.0: src/Physics/Scenes/FourBoxesTwoStatic.hs
module Physics.Scenes.FourBoxesTwoStatic 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)
boxC :: (PhysicsEngine e) => Proxy e -> PEPhysicalObj e
boxC p = makePhysicalObj p (0, 0) 0 (0, -6) 0 (0, 0)
boxD :: (PhysicsEngine e) => Proxy e -> PEPhysicalObj e
boxD p = makePhysicalObj p (0, 0) 0 (-5, -4) 0 (1, 0)
staticBoxD :: (PhysicsEngine e) => Proxy e -> PEPhysicalObj e
staticBoxD p = makePhysicalObj p (0, 0) 0 (-5, -4) 0 (0, 0)
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
boxC' :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEWorldObj' e
boxC' p = makeWorldObj p (boxC p) 0.2 $ makeRectangleHull p 18 1
boxD' :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEWorldObj' e
boxD' p = makeWorldObj p (boxD p) 0.2 $ makeRectangleHull p 0.4 3
staticBoxD' :: (PhysicsEngine e) => Proxy e -> PEExternalObj e -> PEWorldObj' e
staticBoxD' p = makeWorldObj p (staticBoxD p) 0.2 $ makeRectangleHull p 0.4 3
world
:: (PhysicsEngine e)
=> Proxy e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> PEWorld' e
world p a b c d = makeWorld p [boxA' p a, boxB' p b, boxC' p c, boxD' p d]
world'
:: (PhysicsEngine e)
=> Proxy e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> PEWorld' e
world' p a b c d = makeWorld p [boxA' p a, boxB' p b, boxC' p c, staticBoxD' p d]
externals :: (PhysicsEngine e) => Proxy e -> [External]
externals p = [makeConstantAccel p (0, -2)]
contactBehavior :: (PhysicsEngine e) => Proxy e -> PEContactBehavior e
contactBehavior p = makeContactBehavior p 0.01 0.02
scene
:: (PhysicsEngine e)
=> Proxy e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> Scene e
scene p a b c d = Scene (world p a b c d) (externals p) (contactBehavior p)
scene'
:: (PhysicsEngine e)
=> Proxy e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> PEExternalObj e
-> Scene e
scene' p a b c d = Scene (world' p a b c d) (externals p) (contactBehavior p)