module Dodge.Item.Held.SprayGuns ( poisonSprayer, flameSpitter, blowTorch, flameThrower, flameTorrent, flameWall, ) where import Dodge.Data.Item import Dodge.Default.Item import Dodge.Reloading.Action import Geometry import LensHelp poisonSprayer :: Item poisonSprayer = flameThrower & itType . iyBase .~ HELD POISONSPRAYER & itUse . heldConsumption . laAmmoType .~ GasAmmo { _amString = "POISONGAS" , _amCreateGas = CreatePoisonGas --aGasCloud } & itUse . heldMods .~ PoisonSprayerMod flameSpitter :: Item flameSpitter = flameThrower & itType . iyBase .~ HELD FLAMESPITTER & itUse . heldConsumption . laSource . _InternalSource . iaMax .~ 10 & itUse . heldConsumption . laSource . _InternalSource . iaCycle .~ [loadEject 5, loadInsert 10, loadPrime 20] & itParams . sprayNozzles . ix 0 . nzPressure .~ 4 & itUse . heldAim . aimStance .~ OneHand & itUse . heldDelay .~ FixedRate{_rateMax = 12, _rateTime = 0} & itUse . heldMods .~ FlameSpitterMod flameTorrent :: Item flameTorrent = flameThrower & itType . iyBase .~ HELD FLAMETORRENT & itUse . heldAim . aimZoom .~ defaultItZoom & itParams . sprayNozzles . ix 0 %~ ( (nzPressure .~ 10) . (nzMaxWalkAngle .~ 1.5) . (nzWalkSpeed .~ 0.05) ) blowTorch :: Item blowTorch = flameThrower & itType . iyBase .~ HELD BLOWTORCH flameWall :: Item flameWall = flameThrower & itType . iyBase .~ HELD FLAMEWALL & itParams . sprayNozzles .~ zipWith makeNozzle [0, 0.6, -0.6] [2, 2.5, 2.5] where makeNozzle dir pres = Nozzle { _nzPressure = pres , _nzDir = dir , _nzMaxWalkAngle = 0 , _nzWalkSpeed = 0 , _nzCurrentWalkAngle = 0 , _nzLength = 20 } flameThrower :: Item flameThrower = defaultHeldItem { _itParams = Sprayer { _sprayNozzles = [ Nozzle { _nzPressure = 4 , _nzDir = 0 , _nzMaxWalkAngle = 0.2 , _nzWalkSpeed = 0.01 , _nzCurrentWalkAngle = 0 , _nzLength = 10 } ] } } & itDimension . dimRad .~ 7 & itDimension . dimCenter .~ V3 9 0 0 & itUse . heldUse .~ HeldOverNozzlesUseGasParams -- overNozzles useGasParams & itUse . heldDelay .~ NoDelay & itUse . heldMods .~ FlameThrowerMod & itUse . heldAim . aimWeight .~ 5 & itUse . heldAim . aimZoom .~ defaultItZoom{_izMax = 5, _izMin = 1.5} & itUse . heldAim . aimStance .~ TwoHandTwist & itUse . heldAim . aimHandlePos .~ 0 & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 18 0) 0 0] & itUse . heldConsumption .~ ( defaultLoadable & laSource . _InternalSource . iaMax .~ 250 & laAmmoType .~ GasAmmo { _amString = "FLAME" , _amCreateGas = CreateFlame --aFlame } & laSource . _InternalSource . iaCycle .~ [loadEject 5, loadInsert 10, loadPrime 20] ) & itType . iyBase .~ HELD FLAMETHROWER