packages feed

edge-0.8.16: SpaceJunk.hs

{-# LANGUAGE ExistentialQuantification #-}

module SpaceJunk where

import Animation ( Animation (..) )
import Updating ( InternallyUpdating (..) )
import Moving ( Colliding (..)
              , Moving (..)
              , Locatable (..)
              )
import Combat ( Damaging (..)
              , Damageable (..)
              )

data SpaceJunk = forall a. ( InternallyUpdating a
                      , Colliding a
                      , Damaging a
                      , Damageable a
                      , Animation a
                      ) => SpaceJunk a

instance Damaging SpaceJunk where
  damageEnergy (SpaceJunk a) = damageEnergy a

instance Damageable SpaceJunk where
  inflictDamage (SpaceJunk a) et = SpaceJunk (inflictDamage a et)

instance InternallyUpdating SpaceJunk where
  preUpdate (SpaceJunk a) et = SpaceJunk (preUpdate a et)
  postUpdate (SpaceJunk a) et = SpaceJunk (postUpdate a et)

instance Colliding SpaceJunk where

  collisionRadius (SpaceJunk a) = collisionRadius a

instance Moving SpaceJunk where

  velocity (SpaceJunk a) = velocity a

instance Locatable SpaceJunk where
  center (SpaceJunk a) = center a

instance Animation SpaceJunk where
  image (SpaceJunk a) = image a