52 lines
1.5 KiB
Haskell
52 lines
1.5 KiB
Haskell
module Dodge.Item.Held.Launcher (
|
|
rLauncher,
|
|
rLauncherX,
|
|
gLauncher,
|
|
) where
|
|
|
|
import Control.Applicative
|
|
import Control.Lens
|
|
import Dodge.Data.Item
|
|
import Dodge.Default.Item
|
|
import Geometry.Data
|
|
import qualified IntMapHelp as IM
|
|
|
|
rLauncher :: Item
|
|
rLauncher =
|
|
defaultHeldItem
|
|
& itUse . heldDelay . rateMax .~ 20
|
|
& itUse . heldMuzzles . ix 0 . mzInaccuracy .~ 0
|
|
& itUse . heldMuzzles . ix 0 . mzEffect .~ MuzzleRLauncher
|
|
& itUse . heldMuzzles . ix 0 . mzPos .~ V2 20 0
|
|
& itAmmoSlots .~ singleAmmo LauncherAmmo
|
|
& itType .~ HELD RLAUNCHER
|
|
& itUse . heldParams . muzVel .~ ConstFloat 0
|
|
& itUse . heldParams . rifling .~ ConstFloat 0
|
|
-- & itUse . heldParams . recoil .~ 0
|
|
& itUse . heldParams . torqueAfter .~ 0
|
|
|
|
-- & itUse . heldParams . bulGunSound ?~ (tap4S, 0)
|
|
|
|
gLauncher :: Item
|
|
gLauncher =
|
|
rLauncher
|
|
& itType .~ HELD GLAUNCHER
|
|
& itUse . heldMuzzles . ix 0 . mzEffect .~ MuzzleGLauncher
|
|
|
|
rLauncherX :: Int -> Item
|
|
rLauncherX i =
|
|
rLauncher
|
|
& itType .~ HELD (RLAUNCHERX i)
|
|
& itUse . heldMuzzles
|
|
.~ getZipList
|
|
( ZipList [Muzzle (V2 20 0) a 0 | a <- angles]
|
|
<*> ZipList [0 ..]
|
|
<*> pure NoFlare
|
|
<*> pure MuzzleRLauncher
|
|
<*> pure (UseExactly 1)
|
|
<*> pure 0
|
|
)
|
|
& itAmmoSlots .~ IM.fromList [(j, LauncherAmmo) | j <- [0 .. i -1]]
|
|
where
|
|
angles = take i [0, 2 * pi / fromIntegral i ..]
|