(Re)Implement nozzle walking
This commit is contained in:
+29
-25
@@ -56,7 +56,7 @@ bulGunEffect' :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> Wo
|
||||
bulGunEffect' t cr w = fromMaybe (error "error in bulGunEffect") $ do
|
||||
muzzles <- t ^? ldtValue . itUse . heldAim . aimMuzzles
|
||||
let (upitm,loadedmuzzles) = mapAccumR loadMuzzle t muzzles
|
||||
cmew = foldl' (useLoadedAmmo (_ldtValue t) cr) (CME 0 0 False,w) $ loadedmuzzles
|
||||
cmew = foldl' (useLoadedAmmo (_ldtValue t) cr) (CME 0 0 False,w) $ zip [0..] loadedmuzzles
|
||||
return $ uncurry (applyCME (_ldtValue t) cr) cmew
|
||||
& cWorld . lWorld . lTestString .~ map (show . _mzAmmoSlot) muzzles
|
||||
& doWeaponRepetitions upitm cr
|
||||
@@ -177,17 +177,17 @@ isAmmoIntLink :: Int -> ComposeLinkType -> Bool
|
||||
isAmmoIntLink i (AmmoInLink j _) = i == j
|
||||
isAmmoIntLink _ _ = False
|
||||
|
||||
useLoadedAmmo :: Item -> Creature -> (CumulativeMuzzleEffect,World) -> (Muzzle,Int,Maybe Int)
|
||||
useLoadedAmmo :: Item -> Creature -> (CumulativeMuzzleEffect,World) -> (Int,(Muzzle,Int,Maybe Int))
|
||||
-> (CumulativeMuzzleEffect,World)
|
||||
useLoadedAmmo _ _ (cme,w) (_,0,_) = (cme, w)
|
||||
useLoadedAmmo itm cr (cme,w) (mz,x,mid) = (,) (cme & cmeSound .~ True) $
|
||||
useLoadedAmmo _ _ (cme,w) (_,(_,0,_)) = (cme, w)
|
||||
useLoadedAmmo itm cr (cme,w) (mzid,(mz,x,mid)) = (,) (cme & cmeSound .~ True) $
|
||||
removeAmmoFromMag x mid cr . makeMuzzleFlare mz itm cr $ case _mzEffect mz of
|
||||
MuzzleShootBullet -> shootBullet itm cr w (mz,x,mid)
|
||||
MuzzleLaser -> shootLaser' itm cr mz w
|
||||
MuzzleTesla -> shootTeslaArc itm cr mz w
|
||||
MuzzleTractor -> shootTractorBeam itm cr w
|
||||
MuzzleLauncher -> createProjectile' mid mz itm cr w
|
||||
MuzzleNozzle {} -> useGasParams mid mz itm cr $ walkNozzle mz itm cr w
|
||||
MuzzleNozzle {} -> useGasParams mid mz itm cr $ walkNozzle mzid mz itm cr w
|
||||
MuzzleShatter -> shootShatter itm cr w
|
||||
MuzzleForceField -> useForceFieldGun itm cr w
|
||||
MuzzleDetector -> itemDetectorEffect itm cr w
|
||||
@@ -197,15 +197,19 @@ itemDetectorEffect itm cr w = fromMaybe w $ do
|
||||
HELDDETECTOR dt <- itm ^? itType . iyBase . ibtHeld
|
||||
return $ detectorEffect dt itm cr w
|
||||
|
||||
walkNozzle :: Muzzle -> Item -> Creature -> World -> World
|
||||
walkNozzle _ _ _ w = w
|
||||
-- & randGen .~ g
|
||||
-- where
|
||||
-- nz = _mzEffect mz
|
||||
-- (walkamount, g) = randomR (- aspeed, aspeed) (_randGen w)
|
||||
-- aspeed = _nzWalkSpeed nz
|
||||
-- maxa = _nzMaxWalkAngle nz
|
||||
-- wa = min maxa $ max (negate maxa) (_nzCurrentWalkAngle nz + walkamount)
|
||||
walkNozzle :: Int -> Muzzle -> Item -> Creature -> World -> World
|
||||
walkNozzle mzid mz itm cr w = fromMaybe w $ do
|
||||
invid <- itm ^? itLocation . ipInvID
|
||||
return $ w
|
||||
& cWorld . lWorld . creatures . ix (_crID cr) . crInv
|
||||
. ix invid . itUse . heldAim . aimMuzzles . ix mzid . mzEffect . nzCurrentWalkAngle .~ wa
|
||||
& randGen .~ g
|
||||
where
|
||||
nz = _mzEffect mz
|
||||
(walkamount, g) = randomR (- aspeed, aspeed) (_randGen w)
|
||||
aspeed = _nzWalkSpeed nz
|
||||
maxa = _nzMaxWalkAngle nz
|
||||
wa = min maxa $ max (negate maxa) (_nzCurrentWalkAngle nz + walkamount)
|
||||
|
||||
|
||||
shootTractorBeam :: Item -> Creature -> World -> World
|
||||
@@ -313,17 +317,17 @@ useHeld hu = case hu of
|
||||
HeldShatter -> shootShatter . _ldtValue
|
||||
HeldExplodeRemoteShell itid pjid -> const $ const $ explodeRemoteRocket itid pjid
|
||||
|
||||
usePjCreation :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
|
||||
usePjCreation itm cr = fromMaybe id $ do
|
||||
atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0
|
||||
leftitms <- itm ^? ldtLeft
|
||||
mag <- lookup (AmmoInLink 0 atype) leftitms
|
||||
apm <- mag ^? ldtValue
|
||||
muz <- itm ^? ldtValue . itUse . heldAim . aimMuzzles . ix 0
|
||||
return $ createProjectile apm muz (_ldtValue itm) cr
|
||||
--usePjCreation :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
|
||||
--usePjCreation itm cr = fromMaybe id $ do
|
||||
-- atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0
|
||||
-- leftitms <- itm ^? ldtLeft
|
||||
-- mag <- lookup (AmmoInLink 0 atype) leftitms
|
||||
-- apm <- mag ^? ldtValue
|
||||
-- muz <- itm ^? ldtValue . itUse . heldAim . aimMuzzles . ix 0
|
||||
-- return $ createProjectile apm muz (_ldtValue itm) cr
|
||||
|
||||
usePjCreationX :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
|
||||
usePjCreationX = undefined
|
||||
--usePjCreationX :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
|
||||
--usePjCreationX = undefined
|
||||
--usePjCreationX ams itm cr = fromMaybe id $ do
|
||||
-- muzs <- itm ^? itUse . heldAim . aimMuzzles
|
||||
-- return $ foldr
|
||||
@@ -399,7 +403,7 @@ useGasParams mmagid mz itm cr w =
|
||||
pos = _crPos cr + rotateV (_crDir cr) (_mzPos mz + aimingWeaponZeroPos cr itm)
|
||||
(a,g') = randomR (-inacc,inacc) g
|
||||
inacc = _mzInaccuracy mz
|
||||
dir = _crDir cr + _mzRot mz + a
|
||||
dir = _crDir cr + _mzRot mz + a + (_nzCurrentWalkAngle $ _mzEffect mz)
|
||||
|
||||
gasCreate :: GasFuel -> GasCreate -> GasCreate
|
||||
gasCreate = flip const
|
||||
|
||||
Reference in New Issue
Block a user