pituicat/src/Types/Cast.hs

48 lines
983 B
Haskell

{-# LANGUAGE ExistentialQuantification #-}
module Types.Cast where
-- internale imports
import Classes.Actor
import Physics.Classes
data Cast = forall a. Actor a => Cast a
instance Show Cast where
show (Cast a) = show a
instance Mass Cast where
mass (Cast a) = mass a
velocity (Cast a) = velocity a
velocityUpdater (Cast a) = Cast . velocityUpdater a
forces (Cast a) = forces a
forcesUpdater (Cast a) = Cast . forcesUpdater a
position (Cast a) = position a
positionUpdater (Cast a) = Cast . positionUpdater a
instance Collidible Cast where
prevPosition (Cast c) = prevPosition c
impactForces (Cast c) = impactForces c
impactForcesUpdater (Cast c) = Cast . impactForcesUpdater c
collisionOccured (Cast c) = collisionOccured c
updateCollisionOccurence (Cast c) = Cast . updateCollisionOccurence c
boundary (Cast c) = boundary c
collisionCheck (Cast c1) c2 = collisionCheck c1 c2
collide (Cast c1) res dt = Cast $ collide c1 res dt