{-# 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 CamInGameType = CamOnPlayer | CamOpticScope | CamRemoteScope deriving (Eq,Show,Read,Enum,Bounded) data CamControl = CamInGame { _cigType :: CamInGameType} | CamFloat deriving (Eq,Show,Read) 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 makeLenses ''CamInGameType concat <$> mapM (deriveJSON defaultOptions) [''CamInGameType ,''CamControl ,''Camera ]