58 lines
1.4 KiB
Haskell
58 lines
1.4 KiB
Haskell
{-# 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
|