{-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} module Dodge.Data.Item.Params where import Color import Control.Lens import Data.Aeson import Data.Aeson.TH import Dodge.Data.ArcStep import Dodge.Data.Beam import Geometry.Data data ItemParams = NoParams | MagShieldParams {_magShieldMgMIX :: Maybe Int} | ShrinkGunParams {_shrinkGunStatus :: ShrinkGunStatus} | FlatShieldParams {_flatShieldWlMIX :: Maybe Int} | ShellLauncher { _shellSpinDrag :: Int , _shellSpinAmount :: Int , _shellThrustDelay :: Int } | Refracting { _phaseV :: Float , _lasColor :: Color , _lasColor2 :: Color , _lasCycle :: Int , _lasDamage :: Int } | DualBeam { _phaseV :: Float , _lasColor :: Color , _lasColor2 :: Color , _lasCycle :: Int , _lasDamage :: Int , _lasBeam :: BeamType , _subParams :: Maybe ItemParams , _dbGap :: Float } | Attracting {_attractionPower :: Point2} | BulletShooter { _muzVel :: Float , _rifling :: Float , _bore :: Float , _gunBarrels :: GunBarrels , _recoil :: Float , _torqueAfter :: Float , _randomOffset :: Float } | Sprayer {_sprayNozzles :: [Nozzle]} | AngleWalk { _maxWalkAngle :: Float , _currentWalkAngle :: Float , _walkSpeed :: Float } | Arcing { _currentArc :: Maybe [ArcStep] , _arcSize :: Float , _arcNumber :: Int , _newArcStep :: NextArcStep --ItemParams -> World -> ArcStep -> State StdGen (Maybe ArcStep) , _previousArcEffect :: PreviousArcEffect } | ParamMID {_paramMID :: Maybe Int} | BoostPropIX {_boostPropIX :: Maybe Int} deriving (Eq, Ord, Show, Read) data ShrinkGunStatus = FullSize | Shrunk deriving (Eq, Ord, Show, Read) data PreviousArcEffect = NoPreviousArcEffect | PerturbTillBreakPreviousArc deriving (Eq, Ord, Show, Read) data GunBarrels = MultiBarrel { _brlSpread :: BarrelSpread , _brlNum :: Int , _brlInaccuracy :: Float } | RotBarrel { _brlNum :: Int , _brlInaccuracy :: Float } | SingleBarrel {_brlInaccuracy :: Float} deriving (Eq, Ord, Show, Read) data Nozzle = Nozzle { _nzPressure :: Float , _nzDir :: Float , _nzMaxWalkAngle :: Float , _nzCurrentWalkAngle :: Float , _nzWalkSpeed :: Float , _nzLength :: Float } deriving (Eq, Ord, Show, Read) data BarrelSpread = AlignedBarrels | SpreadBarrels {_spreadAngle :: Float} | RotatingBarrels {_rotatingBarrelInaccuracy :: Float} deriving (Eq, Ord, Show, Read) makeLenses ''BarrelSpread makeLenses ''ItemParams makeLenses ''Nozzle makeLenses ''GunBarrels deriveJSON defaultOptions ''ItemParams deriveJSON defaultOptions ''ShrinkGunStatus deriveJSON defaultOptions ''PreviousArcEffect deriveJSON defaultOptions ''GunBarrels deriveJSON defaultOptions ''Nozzle deriveJSON defaultOptions ''BarrelSpread