{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Laser where import NewInt import Dodge.Data.Item.Location import Color import Control.Lens import Data.Aeson import Data.Aeson.TH import Geometry.Data data LaserType = DamageLaser {_laserTypeDamage :: Int} | TargetingLaser {_laserEmmiter :: NewInt ItmInt} 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 { _lzColor :: Color , _lzPoints :: [Point2] , _lzType :: LaserType } deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''Laser makeLenses ''LaserStart makeLenses ''LaserType deriveJSON defaultOptions ''LaserType deriveJSON defaultOptions ''LaserStart deriveJSON defaultOptions ''Laser