Partial refactor of bullet weapon effect chain

This commit is contained in:
2024-09-16 13:05:59 +01:00
parent 6f372109d9
commit abc0dd1106
23 changed files with 655 additions and 510 deletions
+1 -99
View File
@@ -1,99 +1 @@
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:(32,25)-(316,68): warning: [-Wincomplete-patterns] All good (616 modules, at 13:05:37)
Pattern match(es) are non-exhaustive
In a case alternative:
Patterns not matched:
FireRemoteShellMod
ExplodeRemoteShellMod
DoNothingMod
ForceFieldMod
...
|
32 | heldEffect effecttype = case effecttype of
| ^^^^^^^^^^^^^^^^^^...
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:325:5-18: warning: [-Wunused-local-binds]
Defined but not used: directedTelPos
|
325 | directedTelPos _ cr w = (p, a)
| ^^^^^^^^^^^^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:335:1-9: warning: [-Wmissing-signatures]
Top-level binding with no type signature:
gasEffect :: [(LabelDoubleTree ComposeLinkType Item
-> Creature -> World -> World)
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World]
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World
|
335 | gasEffect = foldl' (&) (overNozzles useGasParams)
| ^^^^^^^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:337:1-15: warning: [-Wmissing-signatures]
Top-level binding with no type signature:
bulletGunEffect :: [(LabelDoubleTree ComposeLinkType Item
-> Creature -> World -> World)
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World]
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World
|
337 | bulletGunEffect = foldl' (&) shootBullet
| ^^^^^^^^^^^^^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:(342,13)-(644,9): warning: [-Wincomplete-patterns]
Pattern match(es) are non-exhaustive
In a case alternative:
Patterns not matched:
TractorMod
FireRemoteShellMod
ExplodeRemoteShellMod
DoNothingMod
...
|
342 | useMod hm = case hm of
| ^^^^^^^^^^...
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:649:5-26: warning: [-Wunused-local-binds]
Defined but not used: increasecycleLasCircle
|
649 | increasecycleLasCircle it = it & itParams . lasCycle %~ (flip mod 2000 . (+ 1))
| ^^^^^^^^^^^^^^^^^^^^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:651:5-14: warning: [-Wunused-local-binds]
Defined but not used: fLasCircle
|
651 | fLasCircle it = [it & itParams . lasCycle +~ x | x <- [0, 50 .. 1999]]
| ^^^^^^^^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:656:5-18: warning: [-Wunused-local-binds]
Defined but not used: directedTelPos
|
656 | directedTelPos _ cr w = (p, a)
| ^^^^^^^^^^^^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:703:16-18: warning: [-Wunused-matches]
Defined but not used: itm
|
703 | usePjCreationX itm cr = undefined
| ^^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:703:20-21: warning: [-Wunused-matches]
Defined but not used: cr
|
703 | usePjCreationX itm cr = undefined
| ^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:778:17-18: warning: [-Wunused-matches]
Defined but not used: it
|
778 | fireRemoteShell it cr w = undefined
| ^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:778:20-21: warning: [-Wunused-matches]
Defined but not used: cr
|
778 | fireRemoteShell it cr w = undefined
| ^^
/home/justin/Haskell/loop/src/Dodge/HeldUse.hs:778:23: warning: [-Wunused-matches]
Defined but not used: w
|
778 | fireRemoteShell it cr w = undefined
| ^
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -62,7 +62,7 @@ shootBullet :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> Worl
shootBullet itm cr w = fromMaybe (error "cannot find bullet ammo when expected to") $ do shootBullet itm cr w = fromMaybe (error "cannot find bullet ammo when expected to") $ do
atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0
leftitms <- itm ^? ldtLeft leftitms <- itm ^? ldtLeft
mag <- lookup (AmmoInLink atype) leftitms mag <- lookup (AmmoInLink 0 atype) leftitms
thebullet <- mag ^? ldtValue . itUse . amagParams . ampBullet thebullet <- mag ^? ldtValue . itUse . amagParams . ampBullet
return $ w & cWorld . lWorld . instantBullets return $ w & cWorld . lWorld . instantBullets
.:~ ( thebullet .:~ ( thebullet
+1 -1
View File
@@ -11,7 +11,7 @@ import Data.Aeson.TH
import Dodge.Data.Item.Use.Consumption.Ammo import Dodge.Data.Item.Use.Consumption.Ammo
data ComposeLinkType data ComposeLinkType
= AmmoInLink AmmoType = AmmoInLink Int AmmoType
| AmmoModLink | AmmoModLink
deriving (Eq,Ord,Show,Read) deriving (Eq,Ord,Show,Read)
+1
View File
@@ -9,6 +9,7 @@ import Control.Lens
import Data.Aeson import Data.Aeson
import Data.Aeson.TH import Data.Aeson.TH
import Data.Bifunctor import Data.Bifunctor
--import qualified Data.Map.Strict as M
data DoubleTreeNodeType data DoubleTreeNodeType
= DTRootNode = DTRootNode
+25 -1
View File
@@ -13,6 +13,8 @@ module Dodge.Data.Item.Use (
module Dodge.Data.Item.Targeting, module Dodge.Data.Item.Targeting,
) where ) where
import Sound.Data
import qualified Data.IntMap.Strict as IM
import Geometry.Data import Geometry.Data
import Control.Lens import Control.Lens
import Data.Aeson import Data.Aeson
@@ -32,8 +34,9 @@ data ItemUse
, _heldMods :: HeldMod , _heldMods :: HeldMod
, _heldHammer :: HammerPosition , _heldHammer :: HammerPosition
, _heldAim :: AimParams , _heldAim :: AimParams
, _heldAmmoTypes :: [AmmoType] , _heldAmmoTypes :: IM.IntMap AmmoType
, _heldParams :: HeldParams , _heldParams :: HeldParams
, _heldTriggerType :: TriggerType
-- , _useTargeting :: Maybe TargetType -- , _useTargeting :: Maybe TargetType
} }
| LeftUse | LeftUse
@@ -62,6 +65,10 @@ data ItemUse
} }
deriving (Eq, Show, Read) --Generic, Flat) deriving (Eq, Show, Read) --Generic, Flat)
data TriggerType = AutoTrigger
| HammerTrigger
deriving (Eq, Show, Read) --Generic, Flat)
data HeldParams data HeldParams
= DefaultHeldParams = DefaultHeldParams
| GasSprayParams | GasSprayParams
@@ -72,6 +79,8 @@ data HeldParams
, _recoil :: Float , _recoil :: Float
, _torqueAfter :: Float , _torqueAfter :: Float
, _randomOffset :: Float , _randomOffset :: Float
, _sidePush :: Float
, _bulGunSound :: SoundID
} }
deriving (Eq, Show, Read) --Generic, Flat) deriving (Eq, Show, Read) --Generic, Flat)
@@ -114,11 +123,24 @@ data AimParams = AimParams
} }
deriving (Eq, Ord, Show, Read) --Generic, Flat) deriving (Eq, Ord, Show, Read) --Generic, Flat)
data FlareType = DefaultFlareType
deriving (Eq, Ord, Show, Read) --Generic, Flat)
data Muzzle = Muzzle data Muzzle = Muzzle
{ _mzPos :: V2 Float { _mzPos :: V2 Float
, _mzRot :: Float , _mzRot :: Float
, _mzInaccuracy :: Float , _mzInaccuracy :: Float
, _mzAmmoSlot :: Int , _mzAmmoSlot :: Int
, _mzFlareType :: FlareType
-- , _mzRecoil :: Float
-- , _mzTorque :: Float
-- , _mzSidePush :: Float
-- , _mzRandomOffset :: Float
-- , _mzVel :: Float
-- , _mzRifling :: Float
-- , _mzAmmoSlot :: Either Int
-- , _mzAmmoPerShot :: Int
} }
deriving (Eq, Ord, Show, Read) --Generic, Flat) deriving (Eq, Ord, Show, Read) --Generic, Flat)
@@ -147,6 +169,8 @@ makeLenses ''HeldParams
makeLenses ''AttachParams makeLenses ''AttachParams
makeLenses ''ScrollAttachParams makeLenses ''ScrollAttachParams
makeLenses ''AmmoParams makeLenses ''AmmoParams
deriveJSON defaultOptions ''FlareType
deriveJSON defaultOptions ''TriggerType
deriveJSON defaultOptions ''AmmoParams deriveJSON defaultOptions ''AmmoParams
deriveJSON defaultOptions ''HeldParams deriveJSON defaultOptions ''HeldParams
deriveJSON defaultOptions ''Muzzle deriveJSON defaultOptions ''Muzzle
+5 -1
View File
@@ -4,6 +4,7 @@ module Dodge.Default.Item (
module Dodge.Default.Item.Effect, module Dodge.Default.Item.Effect,
) where ) where
import qualified Data.IntMap.Strict as IM
import Control.Lens import Control.Lens
import qualified Data.Map.Strict as M import qualified Data.Map.Strict as M
import Dodge.Data.Item import Dodge.Data.Item
@@ -41,10 +42,13 @@ defaultLeftItem = defaultHeldItem & itUse .~ defaultLeftUse
defaultCraftItem :: Item defaultCraftItem :: Item
defaultCraftItem = defaultHeldItem & itUse .~ CraftUse defaultCraftItem = defaultHeldItem & itUse .~ CraftUse
singleAmmo :: a -> IM.IntMap a
singleAmmo x = IM.insert 0 x mempty
defaultBulletWeapon :: Item defaultBulletWeapon :: Item
defaultBulletWeapon = defaultBulletWeapon =
defaultWeapon defaultWeapon
& itUse . heldAmmoTypes .~ [BulletAmmo] & itUse . heldAmmoTypes .~ singleAmmo BulletAmmo
-- & itUse . heldUse .~ HeldUseAmmoParams -- useAmmoParams -- & itUse . heldUse .~ HeldUseAmmoParams -- useAmmoParams
& itType . iyModules . at ModBulletCollision ?~ EMPTYMODULE & itType . iyModules . at ModBulletCollision ?~ EMPTYMODULE
-- & itType . iyModules . at ModBulletPayload ?~ EMPTYMODULE -- & itType . iyModules . at ModBulletPayload ?~ EMPTYMODULE
+5 -1
View File
@@ -5,6 +5,7 @@ module Dodge.Default.Item.Use (
module Dodge.Default.Item.Use.Equipment, module Dodge.Default.Item.Use.Equipment,
) where ) where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Data.Item.Use import Dodge.Data.Item.Use
import Dodge.Default.Item.Use.AimParams import Dodge.Default.Item.Use.AimParams
import Dodge.Default.Item.Use.Consumption import Dodge.Default.Item.Use.Consumption
@@ -33,12 +34,15 @@ defaultHeldUse =
, _heldMods = DoNothingMod , _heldMods = DoNothingMod
, _heldHammer = HammerUp , _heldHammer = HammerUp
, _heldAim = defaultAimParams , _heldAim = defaultAimParams
, _heldAmmoTypes = [] , _heldAmmoTypes = mempty
, _heldParams = BulletShooterParams , _heldParams = BulletShooterParams
{ _muzVel = 0.8 { _muzVel = 0.8
, _rifling = 0.8 , _rifling = 0.8
, _recoil = 10 , _recoil = 10
, _torqueAfter = 0.2 , _torqueAfter = 0.2
, _randomOffset = 0 , _randomOffset = 0
, _sidePush = 0
, _bulGunSound = tap3S
} }
, _heldTriggerType = HammerTrigger
} }
+11 -1
View File
@@ -13,10 +13,20 @@ defaultAimParams =
, _aimStance = OneHand , _aimStance = OneHand
, --, _aimHandlePos = 10 , --, _aimHandlePos = 10
_aimHandlePos = V2 3 0 _aimHandlePos = V2 3 0
, _aimMuzzles = [Muzzle (V2 20 0) 0 0 0] , _aimMuzzles = [defaultMuzzle]
-- , _aimMuzPos = 20 -- , _aimMuzPos = 20
} }
defaultMuzzle :: Muzzle
defaultMuzzle = Muzzle
{ _mzPos = V2 20 0
, _mzRot = 0
, _mzInaccuracy = 0.05
, _mzAmmoSlot = 0
, _mzFlareType = DefaultFlareType
}
defaultItZoom :: ItZoom defaultItZoom :: ItZoom
defaultItZoom = defaultItZoom =
ItZoom ItZoom
+172 -29
View File
@@ -1,10 +1,14 @@
module Dodge.HeldUse where module Dodge.HeldUse where
import qualified SDL
import Dodge.Base.You
import Dodge.Data.MuzzleEffect
import ListHelp
import Dodge.Data.ComposedItem import Dodge.Data.ComposedItem
import Dodge.Data.DoubleTree import Dodge.Data.DoubleTree
import Color import Color
import Data.Maybe import Data.Maybe
import Data.Traversable --import Data.Traversable
import Dodge.Base.Coordinate import Dodge.Base.Coordinate
import Dodge.Bullet import Dodge.Bullet
import Dodge.Creature.HandPos import Dodge.Creature.HandPos
@@ -26,7 +30,7 @@ import qualified IntMapHelp as IM
import LensHelp import LensHelp
import RandomHelp import RandomHelp
import Sound.Data import Sound.Data
import Data.Foldable --import Data.Foldable
heldEffect :: HeldMod -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World heldEffect :: HeldMod -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
heldEffect effecttype = case effecttype of heldEffect effecttype = case effecttype of
@@ -215,18 +219,19 @@ heldEffect effecttype = case effecttype of
, ammoCheckI , ammoCheckI
, blCheck , blCheck
] ]
PistolMod -> bulletGunEffect PistolMod -> bulGunEffect
[ withSidePushI 50 -- bulletGunEffect
, withRecoil -- [ withSidePushI 50
, withFlare -- , withRecoil
, withTorqueAfter -- , withFlare
, duplicateLoadedBarrels -- , withTorqueAfter
, withSoundStart tap3S -- , duplicateLoadedBarrels
, useAmmoAmount 1 -- , withSoundStart tap3S
, useTimeCheck -- , useAmmoAmount 1
, ammoCheckI -- , useTimeCheck
, blCheck -- , ammoCheckI
] -- , blCheck
-- ]
AutoPistolMod -> bulletGunEffect AutoPistolMod -> bulletGunEffect
[ withFlare [ withFlare
, withSidePushI 50 , withSidePushI 50
@@ -314,6 +319,11 @@ heldEffect effecttype = case effecttype of
, blCheck , blCheck
] ]
TractorMod -> foldl' (&) (aTractorBeam . _ldtValue) [ammoCheckI] TractorMod -> foldl' (&) (aTractorBeam . _ldtValue) [ammoCheckI]
FireRemoteShellMod -> undefined
ExplodeRemoteShellMod -> undefined
DoNothingMod -> const $ const id
ForceFieldMod -> undefined
DetectorMod _ -> undefined
where where
f = do f = do
nzpres <- state $ randomR (3, 4) nzpres <- state $ randomR (3, 4)
@@ -322,24 +332,157 @@ heldEffect effecttype = case effecttype of
HammerUp -> it & itParams . lasCycle .~ 1 HammerUp -> it & itParams . lasCycle .~ 1
_ -> it & itParams . lasCycle %~ (min (n * lasWideRate) . (+ 1)) _ -> it & itParams . lasCycle %~ (min (n * lasWideRate) . (+ 1))
thegapDualBeam = _dbGap . _itParams thegapDualBeam = _dbGap . _itParams
directedTelPos _ cr w = (p, a) --directedTelPos _ cr w = (p, a)
where -- where
p = fromMaybe (_crPos cr) $ cr ^? crTargeting . ctPos . _Just -- p = fromMaybe (_crPos cr) $ cr ^? crTargeting . ctPos . _Just
a = argV (mouseWorldPos (w ^. input) (w ^. wCam) -.- p) -- a = argV (mouseWorldPos (w ^. input) (w ^. wCam) -.- p)
modcrpos x cr = fromMaybe cr $ do modcrpos x cr = fromMaybe cr $ do
invid <- cr ^? crManipulation . manObject . inInventory . ispItem invid <- cr ^? crManipulation . manObject . inInventory . ispItem
return $ cr & crDir %~ tweenAngles x (_crOldDir cr) return $ cr & crDir %~ tweenAngles x (_crOldDir cr)
& crPos %~ alongSegBy x (_crOldPos cr) & crPos %~ alongSegBy x (_crOldPos cr)
& crInv . ix (invid + 1) . itUse . amagParams . ampBullet . buDelayFraction .~ x & crInv . ix (invid + 1) . itUse . amagParams . ampBullet . buDelayFraction .~ x
gasEffect :: [(LabelDoubleTree ComposeLinkType Item
-> Creature -> World -> World)
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World]
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World
gasEffect = foldl' (&) (overNozzles useGasParams) gasEffect = foldl' (&) (overNozzles useGasParams)
bulGunEffect :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
bulGunEffect = hammerCheck $ useTimeCheck bulGunEffect'
bulGunEffect' :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
bulGunEffect' t cr w = fromMaybe (error "error in bulGunEffect") $ do
muzzles <- t ^? ldtValue . itUse . heldAim . aimMuzzles
let (_,loadedmuzzles) = mapAccumR loadMuzzle t muzzles
cmew = foldl' (useLoadedAmmo (_ldtValue t) cr) (CME 0 0 False,w) loadedmuzzles
return $ uncurry (applyCME (_ldtValue t) cr) cmew
applyCME :: Item -> Creature -> CumulativeMuzzleEffect -> World -> World
applyCME itm cr cme
| _cmeSound cme = applySidePush spush cr . applyTorqueCME itm cr . applyRecoil itm cr
| otherwise = id
where
spush = fromMaybe 0 $ itm ^? itUse . heldParams . sidePush
applyRecoil :: Item -> Creature -> World -> World
applyRecoil itm cr = over (cWorld . lWorld . creatures . ix cid) pushback
where
cid = _crID cr
recoilAmount = fromMaybe 0 $ itm ^? itUse . heldParams . recoil
pushback = over crPos (+.+ rotateV (_crDir cr) (V2 ((- recoilAmount) / _crMass cr) 0))
applySidePush :: Float -> Creature -> World -> World
applySidePush 0 _ w = w
applySidePush maxSide cr w = w
& cWorld . lWorld . creatures . ix cid %~ push
& randGen .~ g
where
cid = _crID cr
push = over crPos (+.+ rotateV (_crDir cr) (V2 0 (pushAmount / _crMass cr)))
(pushAmount, g) = randomR (- maxSide, maxSide) $ _randGen w
applyTorqueCME :: Item -> Creature -> World -> World
applyTorqueCME itm cr w
| cid == 0 = w
& wCam . camRot +~ rot
& rotateScope
& randGen .~ g
| otherwise = w
& cWorld . lWorld . creatures . ix cid . crDir +~ rot
& randGen .~ g
where
cid = _crID cr
(rot, g) = randomR (- torque, torque) $ _randGen w
torque = fromMaybe 0 $ itm ^? itUse . heldParams . torqueAfter
rotateScope = fromMaybe id $ do
i <- yourScopeInvID w
return $ cWorld . lWorld . creatures . ix cid . crInv . ix i . itUse . attachParams . scrollAttachParams . opticPos %~ rotateV rot
-- (Muzzle,Int,Int) = (muzzle, amountloaded, id of mag taken from)
loadMuzzle :: LabelDoubleTree ComposeLinkType Item
-> Muzzle -> (LabelDoubleTree ComposeLinkType Item,(Muzzle, Int,Maybe Int))
loadMuzzle t@(LDT _ l _) mz = fromMaybe (t,(mz, 0,Nothing)) $ do
let as = _mzAmmoSlot mz
amamount = 1
(i,(_,mag)) <- findWithIx (isAmmoIntLink as . fst) l
availableammo <- mag ^? ldtValue . itUse . amagLoadStatus . iaLoaded
let usedammo = min amamount availableammo
return (t & ldtLeft . ix i . _2 . ldtValue . itUse . amagLoadStatus . iaLoaded -~ usedammo
, (mz, usedammo, mag ^? ldtValue . itLocation . ipInvID)
)
makeMuzzleFlare :: (Muzzle,Int,Maybe Int) -> Item -> Creature -> World -> World
makeMuzzleFlare _ _ _ = id
isAmmoIntLink :: Int -> ComposeLinkType -> Bool
isAmmoIntLink i (AmmoInLink j _) = i == j
isAmmoIntLink _ _ = False
useLoadedAmmo :: Item -> Creature -> (CumulativeMuzzleEffect,World) -> (Muzzle,Int,Maybe Int)
-> (CumulativeMuzzleEffect,World)
useLoadedAmmo _ cr (cme,w) (_,0,_) = (cme,failsound w)
where
failsound = case w ^? input . mouseButtons . ix SDL.ButtonLeft of
Just 0 -> soundStart (CrWeaponSound (_crID cr) 0) (_crPos cr) click1S Nothing
_ -> soundContinue (CrWeaponSound (_crID cr) 0) (_crPos cr) click1S Nothing
useLoadedAmmo itm cr (cme,w) (mz,x,mid) = fromMaybe (cme,w) $ do
magid <- mid
-- should be able to pass the magazine in from elsewhere?
thebullet <- cr ^? crInv . ix magid . itUse . amagParams . ampBullet
return $ (cme & cmeSound .~ True,
w & cWorld . lWorld . creatures . ix cid . crInv . ix magid . itUse . amagLoadStatus . iaLoaded -~ x
& flip (foldl' (&)) (replicate x (makeBullet thebullet itm cr mz))
)
where
cid = _crID cr
makeBullet :: Bullet -> Item -> Creature -> Muzzle -> World -> World
makeBullet thebullet itm cr mz w =
w & randGen .~ g
& cWorld . lWorld . instantBullets
.:~ (thebullet
& buPos .~ bulpos
-- & buTrajectory .~ BasicBulletTrajectory
& buVel %~ (rotateV dir . (muzvel *.*))
& buDrag *~ _rifling (_heldParams $ _itUse itm)
)
where
bulpos = _crPos cr + rotateV (_crDir cr) (_mzPos mz + aimingWeaponZeroPos cr itm)
(a,g) = randomR (-inacc,inacc) $ _randGen w
inacc = _mzInaccuracy mz
muzvel = _muzVel $ _heldParams $ _itUse itm
dir = _crDir cr + _mzRot mz + a
bulletGunEffect :: [(LabelDoubleTree ComposeLinkType Item
-> Creature -> World -> World)
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World]
-> LabelDoubleTree ComposeLinkType Item
-> Creature
-> World
-> World
bulletGunEffect = foldl' (&) shootBullet bulletGunEffect = foldl' (&) shootBullet
useMod :: HeldMod -> useMod :: HeldMod ->
[(LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World) [(LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World)
-> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World] -> LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World]
useMod hm = case hm of useMod hm = case hm of
TractorMod -> undefined
FireRemoteShellMod -> undefined
ExplodeRemoteShellMod -> undefined
DoNothingMod -> undefined
ForceFieldMod -> undefined
DetectorMod _ -> undefined
-- HeldModNothing -> [] -- HeldModNothing -> []
PoisonSprayerMod -> PoisonSprayerMod ->
[ useAmmoAmount 1 [ useAmmoAmount 1
@@ -646,17 +789,17 @@ useMod hm = case hm of
f = do f = do
nzpres <- state $ randomR (3, 4) nzpres <- state $ randomR (3, 4)
return $ sprayNozzles . ix 0 . nzPressure .~ nzpres return $ sprayNozzles . ix 0 . nzPressure .~ nzpres
increasecycleLasCircle it = it & itParams . lasCycle %~ (flip mod 2000 . (+ 1)) --increasecycleLasCircle it = it & itParams . lasCycle %~ (flip mod 2000 . (+ 1))
--f it = [it & itParams . lasCycle +~ x | x <- [0,100 .. 1900] ] ----f it = [it & itParams . lasCycle +~ x | x <- [0,100 .. 1900] ]
fLasCircle it = [it & itParams . lasCycle +~ x | x <- [0, 50 .. 1999]] --fLasCircle it = [it & itParams . lasCycle +~ x | x <- [0, 50 .. 1999]]
increasecycleLasWide n it = case _heldHammer (_itUse it) of increasecycleLasWide n it = case _heldHammer (_itUse it) of
HammerUp -> it & itParams . lasCycle .~ 1 HammerUp -> it & itParams . lasCycle .~ 1
_ -> it & itParams . lasCycle %~ (min (n * lasWideRate) . (+ 1)) _ -> it & itParams . lasCycle %~ (min (n * lasWideRate) . (+ 1))
thegapDualBeam = _dbGap . _itParams thegapDualBeam = _dbGap . _itParams
directedTelPos _ cr w = (p, a) --directedTelPos _ cr w = (p, a)
where -- where
p = fromMaybe (_crPos cr) $ cr ^? crTargeting . ctPos . _Just -- p = fromMaybe (_crPos cr) $ cr ^? crTargeting . ctPos . _Just
a = argV (mouseWorldPos (w ^. input) (w ^. wCam) -.- p) -- a = argV (mouseWorldPos (w ^. input) (w ^. wCam) -.- p)
modcrpos x cr = fromMaybe cr $ do modcrpos x cr = fromMaybe cr $ do
invid <- cr ^? crManipulation . manObject . inInventory . ispItem invid <- cr ^? crManipulation . manObject . inInventory . ispItem
return $ cr & crDir %~ tweenAngles x (_crOldDir cr) return $ cr & crDir %~ tweenAngles x (_crOldDir cr)
@@ -694,13 +837,13 @@ usePjCreation :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> Wo
usePjCreation itm cr = fromMaybe id $ do usePjCreation itm cr = fromMaybe id $ do
atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0
leftitms <- itm ^? ldtLeft leftitms <- itm ^? ldtLeft
mag <- lookup (AmmoInLink atype) leftitms mag <- lookup (AmmoInLink 0 atype) leftitms
apm <- mag ^? ldtValue apm <- mag ^? ldtValue
muz <- itm ^? ldtValue . itUse . heldAim . aimMuzzles . ix 0 muz <- itm ^? ldtValue . itUse . heldAim . aimMuzzles . ix 0
return $ createProjectile apm muz (_ldtValue itm) cr return $ createProjectile apm muz (_ldtValue itm) cr
usePjCreationX :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World usePjCreationX :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
usePjCreationX itm cr = undefined usePjCreationX = undefined
--usePjCreationX ams itm cr = fromMaybe id $ do --usePjCreationX ams itm cr = fromMaybe id $ do
-- muzs <- itm ^? itUse . heldAim . aimMuzzles -- muzs <- itm ^? itUse . heldAim . aimMuzzles
-- return $ foldr -- return $ foldr
@@ -769,13 +912,13 @@ useGasParams nz itm cr =
gastype = fromMaybe (error "cannot find gas ammo") $ do gastype = fromMaybe (error "cannot find gas ammo") $ do
atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0
leftitms <- itm ^? ldtLeft leftitms <- itm ^? ldtLeft
mag <- lookup (AmmoInLink atype) leftitms mag <- lookup (AmmoInLink 0 atype) leftitms
mag ^? ldtValue . itUse . amagParams . ampCreateGas mag ^? ldtValue . itUse . amagParams . ampCreateGas
dir = _crDir cr dir = _crDir cr
pos = _crPos cr +.+ (_nzLength nz *.* unitVectorAtAngle (_crDir cr)) pos = _crPos cr +.+ (_nzLength nz *.* unitVectorAtAngle (_crDir cr))
fireRemoteShell :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World fireRemoteShell :: LabelDoubleTree ComposeLinkType Item -> Creature -> World -> World
fireRemoteShell it cr w = undefined fireRemoteShell = undefined
--fireRemoteShell :: [Item] -> Item -> Creature -> World -> World --fireRemoteShell :: [Item] -> Item -> Creature -> World -> World
--fireRemoteShell ams it cr w = --fireRemoteShell ams it cr w =
-- set -- set
+2 -2
View File
@@ -38,8 +38,8 @@ baseComposedItem ibt itm = case ibt of
heldComposedItem :: Item -> CIL heldComposedItem :: Item -> CIL
heldComposedItem itm = (WeaponCI, map f ats, []) heldComposedItem itm = (WeaponCI, map f ats, [])
where where
ats = itm ^.. itUse . heldAmmoTypes . traverse ats = maybe [] IM.toList $ itm ^? itUse . heldAmmoTypes
f atype = (AmmoInLink atype,AmmoCI atype) f (i,atype) = (AmmoInLink i atype,AmmoCI atype)
ammoComposedItem :: Item -> CIL ammoComposedItem :: Item -> CIL
ammoComposedItem itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do ammoComposedItem itm = fromMaybe (error "in ammoComposedItem, wrong item") $ do
+6 -6
View File
@@ -30,13 +30,13 @@ teslaGun =
& itUse . heldAim . aimWeight .~ 6 & itUse . heldAim . aimWeight .~ 6
& itUse . heldAim . aimStance .~ TwoHandFlat & itUse . heldAim . aimStance .~ TwoHandFlat
-- & itUse . heldAim . aimMuzPos .~ 4 -- & itUse . heldAim . aimMuzPos .~ 4
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 4 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 4 0) 0 0 0 DefaultFlareType]
& itType . iyBase .~ HELD TESLAGUN & itType . iyBase .~ HELD TESLAGUN
lasGun :: Item lasGun :: Item
lasGun = lasGun =
defaultAutoBatteryGun defaultAutoBatteryGun
& itUse . heldAmmoTypes .~ [ElectricalAmmo] & itUse . heldAmmoTypes .~ singleAmmo ElectricalAmmo
& itParams & itParams
.~ Refracting .~ Refracting
{ _phaseV = 1 { _phaseV = 1
@@ -59,7 +59,7 @@ lasGun =
& itUse . heldAim . aimStance .~ TwoHandUnder & itUse . heldAim . aimStance .~ TwoHandUnder
-- & itUse . heldAim . aimHandlePos .~ 5 -- & itUse . heldAim . aimHandlePos .~ 5
-- & itUse . heldAim . aimMuzPos .~ 30 -- & itUse . heldAim . aimMuzPos .~ 30
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0 0 DefaultFlareType]
& itType . iyBase .~ HELD LASGUN & itType . iyBase .~ HELD LASGUN
lasGunTweak :: TweakParam lasGunTweak :: TweakParam
@@ -84,7 +84,7 @@ tractorGun =
& itUse . heldMods .~ TractorMod & itUse . heldMods .~ TractorMod
& itUse . heldAim . aimWeight .~ 6 & itUse . heldAim . aimWeight .~ 6
& itUse . heldAim . aimRange .~ 1 & itUse . heldAim . aimRange .~ 1
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0 0 DefaultFlareType]
& itType . iyBase .~ HELD TRACTORGUN & itType . iyBase .~ HELD TRACTORGUN
tractorGunTweak :: TweakParam tractorGunTweak :: TweakParam
@@ -102,7 +102,7 @@ lasWide n =
& itParams . lasColor .~ yellow & itParams . lasColor .~ yellow
& itParams . lasDamage .~ 2 & itParams . lasDamage .~ 2
& itUse . heldMods .~ LasWideMod n & itUse . heldMods .~ LasWideMod n
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 y) 0 0 0 | y <- spreadFromCenter n 1] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 y) 0 0 0 DefaultFlareType | y <- spreadFromCenter n 1]
defaultBatteryGun :: Item defaultBatteryGun :: Item
defaultBatteryGun = defaultBatteryGun =
@@ -137,7 +137,7 @@ dualBeam :: Item
dualBeam = dualBeam =
lasGun lasGun
& itType . iyBase .~ HELD DUALBEAM & itType . iyBase .~ HELD DUALBEAM
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0 0 DefaultFlareType]
& itParams & itParams
.~ DualBeam .~ DualBeam
{ _phaseV = 1 { _phaseV = 1
+9 -6
View File
@@ -8,6 +8,7 @@ module Dodge.Item.Held.Cane (
miniGunX, miniGunX,
) where ) where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Base import Dodge.Base
import Dodge.Data.Item import Dodge.Data.Item
import Dodge.Default import Dodge.Default
@@ -25,6 +26,8 @@ defaultBangCane =
, _recoil = 50 , _recoil = 50
, _torqueAfter = 0.1 , _torqueAfter = 0.1
, _randomOffset = 0 , _randomOffset = 0
, _sidePush = 0
, _bulGunSound = tap3S
} }
& itDimension . dimRad .~ 8 & itDimension . dimRad .~ 8
& itDimension . dimCenter .~ V3 5 0 0 & itDimension . dimCenter .~ V3 5 0 0
@@ -32,7 +35,7 @@ defaultBangCane =
& itUse . heldMods .~ BangCaneMod & itUse . heldMods .~ BangCaneMod
& itUse . heldAim . aimStance .~ OneHand & itUse . heldAim . aimStance .~ OneHand
-- & itUse . heldAim . aimHandlePos .~ 5 -- & itUse . heldAim . aimHandlePos .~ 5
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 15 0) 0 0.01 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 15 0) 0 0.01 0 DefaultFlareType]
volleyGun :: Int -> Item volleyGun :: Int -> Item
volleyGun i = volleyGun i =
@@ -43,7 +46,7 @@ volleyGun i =
& itUse . heldAim . aimStance .~ TwoHandFlat & itUse . heldAim . aimStance .~ TwoHandFlat
& itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} & itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5}
& itUse . heldAim . aimMuzzles .~ & itUse . heldAim . aimMuzzles .~
([Muzzle (V2 15 x) 0 0.01 | x <- spreadAroundCenter i 3] <*> [0..]) ([Muzzle (V2 15 x) 0 0.01 | x <- spreadAroundCenter i 3] <*> [0..] <*> repeat DefaultFlareType)
& itUse . heldParams . torqueAfter .~ 0.15 + 0.05 * fromIntegral i & itUse . heldParams . torqueAfter .~ 0.15 + 0.05 * fromIntegral i
& itType . iyBase .~ HELD (VOLLEYGUN i) & itType . iyBase .~ HELD (VOLLEYGUN i)
@@ -56,7 +59,7 @@ multiGun i =
& itUse . heldAim . aimStance .~ TwoHandFlat & itUse . heldAim . aimStance .~ TwoHandFlat
& itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} & itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5}
& itUse . heldAim . aimMuzzles .~ & itUse . heldAim . aimMuzzles .~
([Muzzle (V2 15 x) 0 0.01 | x <- spreadAroundCenter i 3] <*> [0..]) ([Muzzle (V2 15 x) 0 0.01 | x <- spreadAroundCenter i 3] <*> [0..] <*> repeat DefaultFlareType)
& itUse . heldParams . torqueAfter .~ 0.15 + 0.05 * fromIntegral i & itUse . heldParams . torqueAfter .~ 0.15 + 0.05 * fromIntegral i
& itType . iyBase .~ HELD (MULTIGUN i) & itType . iyBase .~ HELD (MULTIGUN i)
@@ -68,7 +71,7 @@ rifle =
& itUse . heldAim . aimWeight .~ 6 & itUse . heldAim . aimWeight .~ 6
& itUse . heldAim . aimRange .~ 1 & itUse . heldAim . aimRange .~ 1
& itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} & itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5}
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 25 0) 0 0.01 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 25 0) 0 0.01 0 DefaultFlareType]
& itType . iyModules . at ModHeldAttach ?~ EMPTYMODULE & itType . iyModules . at ModHeldAttach ?~ EMPTYMODULE
repeater :: Item repeater :: Item
@@ -103,14 +106,14 @@ miniGunUse i =
& heldAim . aimRange .~ 1 & heldAim . aimRange .~ 1
& heldAim . aimStance .~ TwoHandUnder & heldAim . aimStance .~ TwoHandUnder
& heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} & heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5}
& heldAmmoTypes .~ [BeltBulletAmmo] & heldAmmoTypes .~ singleAmmo BeltBulletAmmo
miniGunX :: Int -> Item miniGunX :: Int -> Item
miniGunX i = miniGunX i =
autoRifle autoRifle
& itUse .~ miniGunUse i & itUse .~ miniGunUse i
& itUse . heldAim . aimTurnSpeed .~ 0.5 & itUse . heldAim . aimTurnSpeed .~ 0.5
& itUse . heldAim . aimMuzzles .~ replicate i (Muzzle (V2 30 0) 0 0.05 0) & itUse . heldAim . aimMuzzles .~ replicate i (Muzzle (V2 30 0) 0 0.05 0 DefaultFlareType)
& itUse . heldParams . recoil .~ 10 & itUse . heldParams . recoil .~ 10
& itUse . heldParams . torqueAfter .~ 0.01 & itUse . heldParams . torqueAfter .~ 0.01
& itUse . heldParams . randomOffset .~ 10 & itUse . heldParams . randomOffset .~ 10
+4 -1
View File
@@ -1,5 +1,6 @@
module Dodge.Item.Held.Cone where module Dodge.Item.Held.Cone where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Control.Lens import Control.Lens
import Dodge.Data.Item import Dodge.Data.Item
import Dodge.Default.Item import Dodge.Default.Item
@@ -15,13 +16,15 @@ bangCone =
& itUse . heldDelay . rateMax .~ 20 & itUse . heldDelay . rateMax .~ 20
& itUse . heldMods .~ BangConeMod & itUse . heldMods .~ BangConeMod
-- & itUse . heldAim . aimHandlePos .~ 5 -- & itUse . heldAim . aimHandlePos .~ 5
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 15 0) 0 0.5 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 15 0) 0 0.5 0 DefaultFlareType]
& itUse . heldParams .~ BulletShooterParams & itUse . heldParams .~ BulletShooterParams
{ _muzVel = 0.7 { _muzVel = 0.7
, _rifling = 0.8 , _rifling = 0.8
, _recoil = 150 , _recoil = 150
, _torqueAfter = 0.1 , _torqueAfter = 0.1
, _randomOffset = 12 , _randomOffset = 12
, _sidePush = 0
, _bulGunSound = bangEchoS
} }
& itType . iyBase .~ HELD BANGCONE & itType . iyBase .~ HELD BANGCONE
+3 -3
View File
@@ -31,8 +31,8 @@ launcher =
& itUse . heldAim . aimStance .~ TwoHandOver & itUse . heldAim . aimStance .~ TwoHandOver
-- & itUse . heldAim . aimHandlePos .~ V2 3 0 -- & itUse . heldAim . aimHandlePos .~ V2 3 0
-- & itUse . heldAim . aimMuzPos .~ 20 -- & itUse . heldAim . aimMuzPos .~ 20
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 20 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 20 0) 0 0 0 DefaultFlareType]
& itUse . heldAmmoTypes .~ [ProjectileAmmo] & itUse . heldAmmoTypes .~ singleAmmo ProjectileAmmo
& itType . iyBase .~ HELD LAUNCHER & itType . iyBase .~ HELD LAUNCHER
& itType . iyModules . at ModLauncherHoming ?~ EMPTYMODULE & itType . iyModules . at ModLauncherHoming ?~ EMPTYMODULE
@@ -42,7 +42,7 @@ launcherX i =
& itType . iyBase .~ HELD (LAUNCHERX i) & itType . iyBase .~ HELD (LAUNCHERX i)
-- & itUse . heldUse .~ HeldPJCreationX i -- & itUse . heldUse .~ HeldPJCreationX i
& itUse . heldMods .~ LauncherXMod i & itUse . heldMods .~ LauncherXMod i
& itUse . heldAim . aimMuzzles .~ ([Muzzle (V2 20 0) a 0 | a <- angles] <*> [0..]) & itUse . heldAim . aimMuzzles .~ ([Muzzle (V2 20 0) a 0 | a <- angles] <*> [0..] <*> [DefaultFlareType])
where where
angles = take i [0,2*pi/ fromIntegral i ..] angles = take i [0,2*pi/ fromIntegral i ..]
--angles = take i [1,2 ..] --angles = take i [1,2 ..]
+4 -1
View File
@@ -7,6 +7,7 @@ module Dodge.Item.Held.Rod (
machineGun, machineGun,
) where ) where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Data.Item import Dodge.Data.Item
import Dodge.Default import Dodge.Default
--import Dodge.Item.Weapon.Bullet --import Dodge.Item.Weapon.Bullet
@@ -24,6 +25,8 @@ bangRod =
, _recoil = 50 , _recoil = 50
, _torqueAfter = 0.3 , _torqueAfter = 0.3
, _randomOffset = 0 , _randomOffset = 0
, _sidePush = 0
, _bulGunSound = bangEchoS
} }
& itUse . heldDelay . rateMax .~ 12 & itUse . heldDelay . rateMax .~ 12
& itUse . heldMods .~ BangRodMod & itUse . heldMods .~ BangRodMod
@@ -35,7 +38,7 @@ bangRod =
& itUse . heldAim . aimStance .~ OneHand & itUse . heldAim . aimStance .~ OneHand
& itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5} & itUse . heldAim . aimZoom .~ defaultItZoom{_izFac = 1.5}
-- & itUse . heldAim . aimHandlePos .~ 5 -- & itUse . heldAim . aimHandlePos .~ 5
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0.1 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 30 0) 0 0.1 0 DefaultFlareType]
-- & itUse . heldConsumption . laAmmoType .~ hvBulletAmmo -- & itUse . heldConsumption . laAmmoType .~ hvBulletAmmo
elephantGun :: Item elephantGun :: Item
+3 -3
View File
@@ -17,7 +17,7 @@ poisonSprayer :: Item
poisonSprayer = poisonSprayer =
flameThrower flameThrower
& itType . iyBase .~ HELD POISONSPRAYER & itType . iyBase .~ HELD POISONSPRAYER
& itUse . heldAmmoTypes .~ [GasAmmo] & itUse . heldAmmoTypes .~ singleAmmo GasAmmo
& itUse . heldParams .~ GasSprayParams CreatePoisonGas --aGasCloud & itUse . heldParams .~ GasSprayParams CreatePoisonGas --aGasCloud
& itUse . heldMods .~ PoisonSprayerMod & itUse . heldMods .~ PoisonSprayerMod
@@ -88,7 +88,7 @@ flameThrower =
& itUse . heldAim . aimZoom .~ defaultItZoom{_izMax = 5, _izMin = 1.5} & itUse . heldAim . aimZoom .~ defaultItZoom{_izMax = 5, _izMin = 1.5}
& itUse . heldAim . aimStance .~ TwoHandUnder & itUse . heldAim . aimStance .~ TwoHandUnder
-- & itUse . heldAim . aimHandlePos .~ 0 -- & itUse . heldAim . aimHandlePos .~ 0
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 18 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 18 0) 0 0 0 DefaultFlareType]
& itUse . heldAmmoTypes .~ [GasAmmo] & itUse . heldAmmoTypes .~ singleAmmo GasAmmo
& itType . iyBase .~ HELD FLAMETHROWER & itType . iyBase .~ HELD FLAMETHROWER
& itUse . heldParams .~ GasSprayParams CreateFlame --aGasCloud & itUse . heldParams .~ GasSprayParams CreateFlame --aGasCloud
+9 -4
View File
@@ -6,6 +6,7 @@ module Dodge.Item.Held.Stick (
smg, smg,
) where ) where
import Dodge.SoundLogic.ExternallyGeneratedSounds
import Dodge.Base import Dodge.Base
import Dodge.Data.Item import Dodge.Data.Item
import Dodge.Default.Item import Dodge.Default.Item
@@ -23,6 +24,8 @@ bangStick i =
, _recoil = 25 , _recoil = 25
, _torqueAfter = 0.18 + 0.02 * fromIntegral i , _torqueAfter = 0.18 + 0.02 * fromIntegral i
, _randomOffset = 0 , _randomOffset = 0
, _sidePush = 0
, _bulGunSound = tap3S
} }
& itType . iyBase .~ HELD (BANGSTICK i) & itType . iyBase .~ HELD (BANGSTICK i)
& itInvSize .~ fromIntegral i / 3 & itInvSize .~ fromIntegral i / 3
@@ -30,7 +33,8 @@ bangStick i =
& itDimension . dimCenter .~ V3 5 0 0 & itDimension . dimCenter .~ V3 5 0 0
& itUse . heldDelay . rateMax .~ 8 & itUse . heldDelay . rateMax .~ 8
& itUse . heldMods .~ BangStickMod & itUse . heldMods .~ BangStickMod
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 10 0) a 0.01 0 | a <- spreadAroundCenter i baseStickSpread] & itUse . heldAim . aimMuzzles
.~ [Muzzle (V2 10 0) a 0.01 0 DefaultFlareType | a <- spreadAroundCenter i baseStickSpread]
baseStickSpread :: Float baseStickSpread :: Float
baseStickSpread = 0.2 baseStickSpread = 0.2
@@ -38,15 +42,16 @@ baseStickSpread = 0.2
pistol :: Item pistol :: Item
pistol = pistol =
bangStick 1 bangStick 1
& itUse . heldAmmoTypes .~ [BulletAmmo] -- & itUse . heldAmmoTypes .~ [BulletAmmo]
& itUse . heldDelay . rateMax .~ 6 & itUse . heldDelay . rateMax .~ 6
& itUse . heldMods .~ PistolMod & itUse . heldMods .~ PistolMod
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 10 0) 0 0.05 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 10 0) 0 0.05 0 DefaultFlareType]
& itUse . heldParams & itUse . heldParams
%~ ( (muzVel .~ 0.8) %~ ( (muzVel .~ 0.8)
. (rifling .~ 0.8) . (rifling .~ 0.8)
. (recoil .~ 10) . (recoil .~ 10)
. (torqueAfter .~ 0.2) . (torqueAfter .~ 0.2)
. (sidePush .~ 50)
) )
& itType . iyBase .~ HELD PISTOL & itType . iyBase .~ HELD PISTOL
@@ -72,6 +77,6 @@ smg =
& itUse . heldMods .~ SmgMod --(ammoCheckI : smgAfterHamMods) & itUse . heldMods .~ SmgMod --(ammoCheckI : smgAfterHamMods)
& itType . iyBase .~ HELD SMG & itType . iyBase .~ HELD SMG
& itUse . heldAim . aimStance .~ TwoHandUnder & itUse . heldAim . aimStance .~ TwoHandUnder
& itUse . heldAim . aimMuzzles .~ [Muzzle (V2 20 0) 0 0 0] & itUse . heldAim . aimMuzzles .~ [Muzzle (V2 20 0) 0 0 0 DefaultFlareType]
-- & itUse . heldAim . aimHandlePos .~ 2 -- & itUse . heldAim . aimHandlePos .~ 2
& itUse . heldParams . torqueAfter .~ 0.05 & itUse . heldParams . torqueAfter .~ 0.05
+1 -1
View File
@@ -44,7 +44,7 @@ forceFieldGun =
-- than the list below -- than the list below
--[ hammerCheckI , ammoCheckI , useAmmoAmount 1] --[ hammerCheckI , ammoCheckI , useAmmoAmount 1]
& itType . iyBase .~ HELD FORCEFIELDGUN & itType . iyBase .~ HELD FORCEFIELDGUN
& itUse . heldAmmoTypes .~ [ElectricalAmmo] & itUse . heldAmmoTypes .~ singleAmmo ElectricalAmmo
{- | {- |
Sends out pulses that display walls. Sends out pulses that display walls.
+1 -1
View File
@@ -16,7 +16,7 @@ droneLauncher =
& itUse . heldAim . aimWeight .~ 8 & itUse . heldAim . aimWeight .~ 8
& itUse . heldAim . aimRange .~ 0.5 & itUse . heldAim . aimRange .~ 0.5
& itUse . heldAim . aimStance .~ TwoHandOver & itUse . heldAim . aimStance .~ TwoHandOver
& itUse . heldAmmoTypes .~ [DroneAmmo] & itUse . heldAmmoTypes .~ singleAmmo DroneAmmo
& itType . iyBase .~ HELD DRONELAUNCHER & itType . iyBase .~ HELD DRONELAUNCHER
lasDronesPic :: Item -> SPic lasDronesPic :: Item -> SPic
+13 -3
View File
@@ -53,6 +53,7 @@ module Dodge.Item.Weapon.TriggerType (
duplicateOffsetsV2, duplicateOffsetsV2,
duplicateOffsetsFocus, duplicateOffsetsFocus,
hammerCheckL, hammerCheckL,
hammerCheck,
shootL, shootL,
useTimeCheck, useTimeCheck,
ammoCheckI, ammoCheckI,
@@ -145,7 +146,7 @@ ammoCheckI :: ChainEffect
ammoCheckI eff itm cr w = fromMaybe (failsound w) $ do ammoCheckI eff itm cr w = fromMaybe (failsound w) $ do
atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0 atype <- itm ^? ldtValue . itUse . heldAmmoTypes . ix 0
leftitms <- itm ^? ldtLeft leftitms <- itm ^? ldtLeft
mag <- lookup (AmmoInLink atype) leftitms mag <- lookup (AmmoInLink 0 atype) leftitms
x <- mag ^? ldtValue . itUse . amagLoadStatus . iaLoaded x <- mag ^? ldtValue . itUse . amagLoadStatus . iaLoaded
guard $ x > 0 guard $ x > 0
return $ eff itm cr $ w -- & cWorld . lWorld . creatures . ix (_crID cr) %~ crCancelReloading return $ eff itm cr $ w -- & cWorld . lWorld . creatures . ix (_crID cr) %~ crCancelReloading
@@ -363,7 +364,7 @@ useAmmoAmount :: Int -> ChainEffect
useAmmoAmount amAmount eff item cr = fromMaybe id $ do useAmmoAmount amAmount eff item cr = fromMaybe id $ do
atype <- item ^? ldtValue . itUse . heldAmmoTypes . ix 0 atype <- item ^? ldtValue . itUse . heldAmmoTypes . ix 0
leftitms <- item ^? ldtLeft leftitms <- item ^? ldtLeft
mag <- lookup (AmmoInLink atype) leftitms mag <- lookup (AmmoInLink 0 atype) leftitms
magid <- mag ^? ldtValue . itLocation . ipInvID magid <- mag ^? ldtValue . itLocation . ipInvID
-- invid <- ams ^? ix 0 . itLocation . ipInvID -- invid <- ams ^? ix 0 . itLocation . ipInvID
return $ eff item cr return $ eff item cr
@@ -380,7 +381,8 @@ useTimeCheck f item cr w = case item ^? ldtValue . itUse . heldDelay . rateTime
_ -> w _ -> w
where where
cid = _crID cr cid = _crID cr
setUseTime = cWorld . lWorld . creatures . ix cid . crInv . ix itRef . itUse . heldDelay . rateTime +~ userate setUseTime = cWorld . lWorld . creatures . ix cid . crInv . ix itRef . itUse . heldDelay . rateTime
+~ userate
itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change itRef = cr ^?! crManipulation . manObject . inInventory . ispItem -- unsafe!! TODO change
userate = fromMaybe 0 $ item ^? ldtValue . itUse . heldDelay . rateMax userate = fromMaybe 0 $ item ^? ldtValue . itUse . heldDelay . rateMax
@@ -390,6 +392,14 @@ blCheck f it cr w = case w ^? input . mouseButtons . ix SDL.ButtonLeft of
Just 0 -> f it cr w Just 0 -> f it cr w
_ -> w _ -> w
hammerCheck :: ChainEffect
hammerCheck f it cr w = case it ^? ldtValue . itUse . heldTriggerType of
Just HammerTrigger -> case w ^? input . mouseButtons . ix SDL.ButtonLeft of
Just 0 -> f it cr w
_ -> w
_ -> f it cr w
{- | Applies a world effect after a hammer position check. {- | Applies a world effect after a hammer position check.
Arbitrary inventory position. Arbitrary inventory position.
-} -}
+5
View File
@@ -20,6 +20,8 @@ module ListHelp
, foldrWhileArb , foldrWhileArb
, wordsBy , wordsBy
, findWithIx
) where ) where
import Data.List import Data.List
import Data.Ord import Data.Ord
@@ -117,3 +119,6 @@ wordsBy x xs = case dropWhile (==x) xs of
xs' -> w : wordsBy x xs'' xs' -> w : wordsBy x xs''
where where
(w,xs'') = break (==x) xs' (w,xs'') = break (==x) xs'
findWithIx :: (a -> Bool) -> [a] -> Maybe (Int,a)
findWithIx t = find (t . snd) . zip [0..]
+372 -344
View File
File diff suppressed because it is too large Load Diff