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