{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Camera where import Control.Lens import Data.Aeson import Data.Aeson.TH import Geometry.Data data CamControl = CamInGame | CamFloat deriving (Eq,Show,Read,Enum,Bounded) data Camera = Camera { _camCenter :: Point2 , _camRot :: Float , _camZoom :: Float -- smaller values zoom out , _camItemZoom :: Float , _camDefaultZoom :: Float , _camViewFrom :: Point2 , _camViewDistance :: Float -- need to work out what these bounds actually do , _camBoundBox :: [Point2] , _camBoundDist :: (Float, Float, Float, Float) -- NSEW, S and W negative , _camControl :: CamControl } makeLenses ''Camera concat <$> mapM (deriveJSON defaultOptions) [''CamControl ,''Camera ]