{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Machine.Sensor where import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Item.Combine import Geometry.Data data SensorType = LaserSensor | ElectricSensor | ThermalSensor | PhysicalSensor deriving (Eq, Ord, Show, Read, Bounded, Enum) data DamageSensor = DamSensor { _sensAmount :: Int , _sensType :: SensorType , _sensThreshold :: Int } data ProximitySensor = ProxSensor { _proxSensorType :: ProximitySensorType , _proxToggle :: Maybe Bool } data ProximitySensorType = SensorWithRequirement ProximityRequirement | NoItemZone [Point2] data ProximityRequirement = RequireHealth {_proxReqMinHealth :: Int} | RequireEquipment {_proxReqEquipment :: ItemType} | RequireDeadCreatures {_proxReqDead :: [Int]} deriving (Show) makeLenses ''DamageSensor makeLenses ''ProximitySensor makeLenses ''ProximitySensorType makePrisms ''ProximityRequirement deriveJSON defaultOptions ''SensorType deriveJSON defaultOptions ''ProximityRequirement deriveJSON defaultOptions ''ProximitySensorType deriveJSON defaultOptions ''ProximitySensor deriveJSON defaultOptions ''DamageSensor instance ToJSONKey SensorType instance FromJSONKey SensorType