{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Cloud where 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) instance Binary CloudDraw data Cloud = Cloud { _clPos :: Point3 , _clVel :: Point3 , _clPict :: CloudDraw , _clRad :: Float , _clAlt :: Float , _clTimer :: Int , _clType :: CloudType } deriving (Eq, Ord, Show, Read, Generic, Flat) instance Binary Cloud data CloudType = SmokeCloud | GasCloud deriving (Eq, Ord, Show, Read, Generic, Flat) instance Binary CloudType makeLenses ''Cloud deriveJSON defaultOptions ''CloudDraw deriveJSON defaultOptions ''Cloud deriveJSON defaultOptions ''CloudType