{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE StrictData #-}
{- 
Datatypes describing the type of damage effects that are to be applied to
creatures.
-}
module Dodge.Data.DamageType
    where
--import Geometry
import Geometry.Data

import Control.Lens

data DamageType
    = Piercing {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
    | Blunt    {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 } 
    | SparkDam {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 } 
    | Flaming  {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
    | Lasering {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
    | Electrical {_dmAmount :: Int , _dmFrom :: Point2 , _dmAt :: Point2 , _dmTo :: Point2 }
    | Concussive 
        { _dmAmount :: Int 
        , _dmFrom :: Point2 
        , _dmPush :: Float 
        , _dmPushExp :: Float
        , _dmPushRadius :: Float
        }
    | TorqueDam {_dmAmount :: Int , _dmTorque :: Float }
    | PushDam   {_dmAmount :: Int , _dmPushBack :: Point2 }
    | PoisonDam {_dmAmount :: Int}
  deriving (Eq,Ord,Show)

makeLenses ''DamageType
