{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Muzzle where import Dodge.Data.GenFloat import Linear import Control.Lens data Muzzle = Muzzle { _mzPos :: V2 Float , _mzRot :: Float , _mzInaccuracy :: Float , _mzAmmoSlot :: Int , _mzFlareType :: FlareType , _mzEffect :: MuzzleEffect , _mzAmmoPerShot :: AmmoPerShot , _mzFrame :: Int } deriving (Eq, Ord, Show, Read) --Generic, Flat) data FlareType = NoFlare | BasicFlare | NoLightFlare | MiniGunFlare | HeavySmokeFlare | LasGunFlare | TeslaGunFlare deriving (Eq, Ord, Show, Read) --Generic, Flat) data MuzzleEffect = MuzzleShootBullet | MuzzleLaser | MuzzleTesla | MuzzleTractor | MuzzleRLauncher | MuzzleGLauncher | MuzzleNozzle { _nzPressure :: GenFloat , _nzMaxWalkAngle :: Float , _nzWalkSpeed :: Float } | MuzzleShatter | MuzzleDetector | MuzzleBlink | MuzzleUnsafeBlink | MuzzleRewind | MuzzleStopper | MuzzleScroller deriving (Eq, Ord, Show, Read) --Generic, Flat) data AmmoPerShot = UseExactly {_useExactly :: Int} | UseUpTo {_useUpTo :: Int} deriving (Eq, Ord, Show, Read) --Generic, Flat) makeLenses ''Muzzle makeLenses ''MuzzleEffect makeLenses ''AmmoPerShot