{-# 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