Implement dual laser tesla
This commit is contained in:
@@ -8,6 +8,7 @@ import Dodge.Data
|
||||
import Dodge.Default
|
||||
import Dodge.Default.Weapon
|
||||
import Dodge.Item.Weapon.InventoryDisplay
|
||||
import Dodge.Item.Location
|
||||
import Dodge.SoundLogic.LoadSound
|
||||
import Dodge.WorldEvent.Explosion
|
||||
import Dodge.Item.Weapon.Shell
|
||||
@@ -294,25 +295,17 @@ remoteLauncher = launcher
|
||||
-- TODO consider allowing tweaking rocket speed
|
||||
|
||||
fireRemoteShell :: Item -> Creature -> World -> World
|
||||
fireRemoteShell it cr w = setLocation
|
||||
$ set (creatures . ix cid . crInv . ix j . itUse . rUse)
|
||||
fireRemoteShell it cr w = set (creatures . ix cid . crInv . ix j . itUse . rUse)
|
||||
(\_ _ -> explodeRemoteRocket itid i)
|
||||
$ set (creatures . ix cid . crInv . ix j . itName) remoteLauncherName
|
||||
$ addRemRocket w
|
||||
$ addRemRocket w'
|
||||
where
|
||||
(w',itid) = getHeldItemLoc cr w
|
||||
i = IM.newKey $ _props w
|
||||
cid = _crID cr
|
||||
addRemRocket = makeShell it cr $ \pj ->
|
||||
decTimMvVel pj . setRemoteScope itid pj . moveRemoteShell cid itid pj
|
||||
j = _crInvSel cr
|
||||
newitid = IM.newKey $ _itemPositions w
|
||||
maybeitid = cr ^? crInv . ix j . itID . _Just
|
||||
setLocation :: World -> World
|
||||
setLocation w' = case maybeitid of
|
||||
Nothing -> w' & creatures . ix cid . crInv . ix j . itID ?~ newitid
|
||||
& itemPositions %~ IM.insert newitid (InInv cid j)
|
||||
_ -> w'
|
||||
itid = fromMaybe newitid maybeitid
|
||||
|
||||
moveRemoteShell :: Int -> Int -> Prop -> World -> World
|
||||
moveRemoteShell cid itid pj w
|
||||
@@ -372,25 +365,15 @@ explodeRemoteRocket itid pjid w = w
|
||||
thepj = _props w IM.! pjid
|
||||
|
||||
fireTrackingShell :: Item -> Creature -> World -> World
|
||||
fireTrackingShell it cr w = setLocation
|
||||
$ addTrackRocket w
|
||||
fireTrackingShell it cr w = addTrackRocket w'
|
||||
where
|
||||
cid = _crID cr
|
||||
(w',itid) = getHeldItemLoc cr w
|
||||
addTrackRocket = makeShell it cr $ \pj -> pjEffAtTime 35 (trySpinByCID (_crID cr) spinamount) pj
|
||||
. pjThrust thrustdelay pj
|
||||
. reduceSpinBy (1-fromIntegral spindrag*2 / 200) pj
|
||||
. decTimMvVel pj
|
||||
. pjTrack itid thrustdelay pj
|
||||
. moveShell pj
|
||||
j = _crInvSel cr
|
||||
newitid = IM.newKey $ _itemPositions w
|
||||
maybeitid = cr ^? crInv . ix j . itID . _Just
|
||||
setLocation :: World -> World
|
||||
setLocation w' = case maybeitid of
|
||||
Nothing -> w' & creatures . ix cid . crInv . ix j . itID ?~ newitid
|
||||
& itemPositions %~ IM.insert newitid (InInv cid j)
|
||||
_ -> w'
|
||||
itid = fromMaybe newitid maybeitid
|
||||
. pjThrust thrustdelay pj
|
||||
. reduceSpinBy (1-fromIntegral spindrag*2 / 200) pj
|
||||
. decTimMvVel pj
|
||||
. pjTrack itid thrustdelay pj
|
||||
. moveShell pj
|
||||
spinamount = _shellSpinAmount params
|
||||
thrustdelay = _shellThrustDelay params
|
||||
spindrag = _shellSpinDrag params
|
||||
|
||||
Reference in New Issue
Block a user