{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Targeting where import TH.Derive import Data.Store import Data.Binary import Flat import Control.Lens import Data.Aeson import Data.Aeson.TH import Geometry.Data import LinearHelp () data Targeting = NoTargeting | Targeting { _tgPos :: Maybe Point2 , _tgUpdate :: TargetUpdate --Item -> Creature -> World -> Targeting -> (World, Targeting) , _tgDraw :: TargetDraw --Item -> Creature -> Configuration -> World -> Picture , _tgID :: Maybe Int , _tgActive :: Bool } deriving (Eq, Ord, Show, Read, Generic, Flat) data TargetUpdate = NoTargetUpdate | TargetLaserUpdate | TargetRBPressUpdate | TargetRBCreatureUpdate | TargetCursorUpdate deriving (Eq, Ord, Show, Read, Generic, Flat) data TargetDraw = NoTargetDraw | TargetDistanceDraw | SimpleDrawTarget | TargetRBCreatureDraw deriving (Eq, Ord, Show, Read, Generic, Flat) makeLenses ''Targeting deriveJSON defaultOptions ''Targeting deriveJSON defaultOptions ''TargetUpdate deriveJSON defaultOptions ''TargetDraw $($(derive [d| instance Deriving (Store Targeting) |])) $($(derive [d| instance Deriving (Store TargetDraw) |])) $($(derive [d| instance Deriving (Store TargetUpdate) |]))