Files
loop/src/Dodge/Item/Held/Launcher.hs
T

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 ..]