{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Cloud 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 CloudDraw = CloudColor Float Float Color -- radius-multiply fade-time color | DrawGasCloud Color deriving (Eq, Ord, Show, Read, Generic, Flat) data Cloud = Cloud { _clPos :: Point3 , _clVel :: Point3 , _clPict :: CloudDraw , _clRad :: Float , _clAlt :: Float , _clTimer :: Int , _clType :: CloudType } deriving (Eq, Ord, Show, Read, Generic, Flat) data CloudType = SmokeCloud | GasCloud deriving (Eq, Ord, Show, Read, Generic, Flat) makeLenses ''Cloud deriveJSON defaultOptions ''CloudDraw deriveJSON defaultOptions ''Cloud deriveJSON defaultOptions ''CloudType $($(derive [d| instance Deriving (Store CloudType) |])) $($(derive [d| instance Deriving (Store CloudDraw) |])) $($(derive [d| instance Deriving (Store Cloud ) |]))