{-# 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