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