{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE StrictData #-} module Dodge.Data.Cloud where import GHC.Generics import Data.Aeson import Geometry import Color import Control.Lens data CloudDraw = CloudColor Float Float Color -- radius-multiply fade-time color | DrawGasCloud Color deriving (Eq,Ord,Show,Read,Generic) instance ToJSON CloudDraw where toEncoding = genericToEncoding defaultOptions instance FromJSON CloudDraw data Cloud = Cloud { _clPos :: Point3 , _clVel :: Point3 , _clPict :: CloudDraw , _clRad :: Float , _clAlt :: Float , _clTimer :: Int , _clType :: CloudType } deriving (Eq,Ord,Show,Read,Generic) instance ToJSON Cloud where toEncoding = genericToEncoding defaultOptions instance FromJSON Cloud data CloudType = SmokeCloud | GasCloud deriving (Eq,Ord,Show,Read,Generic) instance ToJSON CloudType where toEncoding = genericToEncoding defaultOptions instance FromJSON CloudType makeLenses ''Cloud