{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Machine ( module Dodge.Data.Machine, module Dodge.Data.Machine.Sensor, module Dodge.Data.Material, module Dodge.Data.ObjectType, ) where import Color import Control.Lens import Data.Aeson import Data.Aeson.TH import qualified Data.IntSet as IS import qualified Data.Map.Strict as M import Dodge.Data.Damage import Dodge.Data.GenParams import Dodge.Data.Item import Dodge.Data.Machine.Sensor import Dodge.Data.Material import Dodge.Data.ObjectType import Geometry.Data import Sound.Data data MachineDraw = MachineDrawMempty | MachineDrawTerminal | MachineDrawTurret | MachineDrawDamageSensor Float (PaletteColor, DecorationShape) deriving (Eq, Show, Read) data Machine = Machine { _mcID :: Int , _mcWallIDs :: IS.IntSet , _mcDraw :: MachineDraw , _mcMaterial :: Material , _mcPos :: Point2 , _mcDir :: Float , _mcColor :: Color , _mcHP :: Int , _mcSensor :: Sensor , _mcDamage :: [Damage] , _mcType :: MachineType , _mcMounts :: M.Map ObjectType Int , _mcName :: String , _mcCloseSound :: Maybe SoundID } deriving (Eq, Show, Read) data MachineType = StaticMachine | Turret { _tuWeapon :: Item , _tuTurnSpeed :: Float , _tuFireTime :: Int , _tuMCrID :: Maybe Int } deriving (Eq, Show, Read) makeLenses ''Machine makeLenses ''MachineType deriveJSON defaultOptions ''MachineDraw deriveJSON defaultOptions ''Machine deriveJSON defaultOptions ''MachineType