{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module Dodge.Item.Data where
import Control.Lens
data HammerType
    = NoHammer
    | HasHammer {_hammerPosition :: HammerPosition}
  deriving
    (Eq, Ord, Show)
data HammerPosition 
    = HammerDown
    | HammerReleased
    | HammerUp
  deriving
    (Eq, Ord, Show)
--data ItemIdentity 
--    = Pistol
--    | SpreadGun
--    | MultGun
--    | HvAutoGun
--    | AutoGun
--    | LtAutoGun
--    | MiniGun
--    | Medkit25
--    | MagShield
--    | FrontArmour
--    | JetPack
--    | FlameShield
--    | Generic
--    | SparkGun
--    | ShatterGun
--    | LongGun
--    | Flamethrower
--    | Blinker
--    | Rewinder
--    | Grenade
--    | RemoteBomb
--    | TeslaGun
--    | LasGun
--    | ForceFieldGun
--    | GrapGun
--    | TractorGun 
--    | Launcher
--    | RemoteLauncher
--    | LightningGun
--    | PoisonSprayer
--    | FlatShield
--  deriving 
--    (Eq,Show,Ord,Enum)
data AimStance
    = TwoHandTwist
    | TwoHandFlat
    | OneHand
    | LeaveHolstered
  deriving 
    (Eq,Show,Ord,Enum)
-- TODO check how much of this is necessary
data ItZoom = ItZoom 
    { _itZoomMax    :: Float
    , _itZoomMin    :: Float
    , _itZoomFac    :: Float 
    }
data CurseStatus 
    = Uncursed 
    | UndroppableIdentified 
    | UndroppableUnidentified
data AimParams = AimParams
    { _aimWeight    :: Int
    , _aimRange     :: Float
    , _aimZoom      :: ItZoom
    , _aimStance    :: AimStance
    }
data UseDelay -- should just be Delay
    = NoDelay
    | FixedRate
        {_rateMax   :: Int
        ,_rateTime  :: Int
        }
    | VariableRate
        {_rateMax       :: Int
        ,_rateTime      :: Int
        ,_rateMaxMax    :: Int
        ,_rateMinMax    :: Int
        }
    | WarmUpNoDelay
        {_warmTime :: Int
        ,_warmMax  :: Int
        }
data BarrelSpread
    = AlignedBarrels
    | SpreadBarrels   {_spreadAngle :: Float}
    | RotatingBarrels {_rotatingBarrelInaccuracy :: Float}
makeLenses ''BarrelSpread
makeLenses ''HammerType
makeLenses ''ItZoom
makeLenses ''AimParams
makeLenses ''UseDelay
