{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Laser where import Flat import Color import Control.Lens import Data.Aeson import Data.Aeson.TH import Geometry.Data import TH.Derive import Data.Store data LaserType = DamageLaser {_laserTypeDamage :: Int} | TargetLaser deriving (Eq, Ord, Show, Read, Generic, Flat) data LaserStart = LaserStart { _lpPhaseV :: Float , _lpPos :: Point2 , _lpDir :: Float , _lpColor :: Color , _lpType :: LaserType } deriving (Eq, Ord, Show, Read, Generic, Flat) data Laser = Laser { _laColor :: Color , _laPoints :: [Point2] , _laType :: LaserType } deriving (Eq, Ord, Show, Read, Generic, Flat) makeLenses ''Laser makeLenses ''LaserStart makeLenses ''LaserType deriveJSON defaultOptions ''LaserType deriveJSON defaultOptions ''LaserStart deriveJSON defaultOptions ''Laser