{-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE NoImplicitPrelude #-} module Imj.GameItem.Weapon.Laser.Types ( LaserRay(..) , Ray(..) , Theoretical , Actual , LaserPolicy(..) , LaserReach(..) ) where import Imj.Geo.Discrete.Types -- | A laser ray and the direction in which the laser was shot. data LaserRay a = LaserRay { _laserRayDir :: !Direction -- ^ The direction in which the laser was shot , _laserRaySeg :: !(Ray a) -- ^ The laser trajectory. } -- | A Laser ray newtype Ray a = Ray Segment -- | The laser ray was computed ignoring obstacles data Theoretical -- | The laser ray was computed taking obstacles into account. data Actual -- | Tells which obstacles are destroyed on the 'Segment' of 'Ray' 'Theoretical' data LaserPolicy = DestroyFirstObstacle -- ^ The first obstacle is destroyed. | DestroyAllObstacles -- ^ All obstacles are destroyed. -- | The reach of the laser. data LaserReach = Infinite