{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.LightSource where import Control.Lens import Data.Aeson import Data.Aeson.TH import Geometry data LightSourceDraw = DefaultLightSourceDraw deriving (Eq, Ord, Show, Read) --Generic, Flat) data TLSIntensity = ConstantIntensity | TLSFade Point3 Int deriving (Eq, Ord, Show, Read) --Generic, Flat) data TLSUpdate = DestroyTLS | TimerTLS | IntensityTLS TLSIntensity deriving (Eq, Ord, Show, Read) --Generic, Flat) data LSParam = LSParam { _lsPos :: !Point3 , _lsRad :: !Float , _lsCol :: !Point3 } deriving (Eq, Ord, Show, Read) --Generic, Flat) data LightSource = LS { _lsID :: Int , _lsParam :: LSParam , _lsDir :: Float , _lsPict :: LightSourceDraw --LightSource -> Picture } deriving (Eq, Ord, Show, Read) --Generic, Flat) data TempLightSource = TLS { _tlsParam :: LSParam , _tlsUpdate :: TLSUpdate --TempLightSource -> Maybe TempLightSource , _tlsTime :: Int } deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''LSParam makeLenses ''LightSource makeLenses ''TempLightSource deriveJSON defaultOptions ''LightSourceDraw deriveJSON defaultOptions ''TLSIntensity deriveJSON defaultOptions ''TLSUpdate deriveJSON defaultOptions ''LSParam deriveJSON defaultOptions ''LightSource deriveJSON defaultOptions ''TempLightSource