{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} {- Datatypes describing the type of damage effects that are to be applied to creatures. -} module Dodge.Data.Damage ( module Dodge.Data.Damage, module Dodge.Data.Damage.Type, ) where import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.Damage.Type import Geometry.Data data DamageEffect = PushDamage { _dePush :: Float , _dePushExp :: Float , _dePushRadius :: Float } | TorqueDamage {_deTorque :: Float} | PushBackDamage {_dePushBack :: Float} | NoDamageEffect deriving (Eq, Ord, Show, Read) --Generic, Flat) data Damage = Damage { _dmType :: DamageType , _dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 , _dmEffect :: DamageEffect } deriving (Eq, Ord, Show, Read) --Generic, Flat) isElectrical :: Damage -> Bool isElectrical dm = case _dmType dm of ELECTRICAL -> True _ -> False makeLenses ''Damage makeLenses ''DamageEffect deriveJSON defaultOptions ''DamageEffect deriveJSON defaultOptions ''Damage