116 lines
3.0 KiB
Haskell
116 lines
3.0 KiB
Haskell
{-# 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
|