diff --git a/src/Dodge/Barreloid.hs b/src/Dodge/Barreloid.hs index fdf5f5459..ff494dde5 100644 --- a/src/Dodge/Barreloid.hs +++ b/src/Dodge/Barreloid.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE LambdaCase #-} + module Dodge.Barreloid (updateBarreloid) where import Data.List @@ -9,37 +11,32 @@ import Dodge.Spark import Dodge.WorldEvent.Explosion import Geometry import LensHelp -import System.Random -updateBarreloid :: Creature -> World -> World -updateBarreloid cr = case cr ^?! crType . barrelType of - ExplosiveBarrel{} -> updateExpBarrel cr - PlainBarrel -> updateBarrel cr +updateBarreloid :: BarrelType -> Creature -> World -> World +updateBarreloid = \case + ExplosiveBarrel ps -> updateExpBarrel ps + PlainBarrel -> updateBarrel --- should generate the sparks externally using new random generators -updateExpBarrel :: Creature -> World -> World -updateExpBarrel cr w - | _crHP cr > 0 = foldl' (flip ($)) (hiss w & cWorld . lWorld . creatures . at (_crID cr) .~ newCr) pierceSparks - | otherwise = makeExplosionAt (_crPos cr) 0 $ stopSounds w & cWorld . lWorld . creatures . at (_crID cr) .~ Nothing +updateExpBarrel :: [Point2] -> Creature -> World -> World +updateExpBarrel ps cr w + | cr ^. crHP > 0 = + w + & hiss + & cWorld . lWorld . creatures . ix (_crID cr) %~ damsToExpBarrel damages + & cWorld . lWorld . creatures . ix (_crID cr) . crHP + -~ length (_piercedPoints . _barrelType $ _crType cr) + & cWorld . lWorld . creatures . ix (_crID cr) . crDamage .~ mempty + & flip (foldl' f) ps + | otherwise = + w + & makeExplosionAt (cr ^. crPos) 0 + & cWorld . lWorld . creatures . at (_crID cr) .~ Nothing where - g = _randGen w + f w' p = makeSpark NormalSpark (p + normalizeV p + cr ^. crPos) (argV p) w' damages = cr ^. crDamage - pierceSparks :: [World -> World] - pierceSparks = - zipWith - (\p a -> sparkRandDir 0.1 (_crPos cr +.+ p) (a + argV p)) - poss - as - as = randomRs (-0.7, 0.7) g - poss = _piercedPoints $ _barrelType $ _crType cr - newCr = Just $ applyFuseDamage $ set crDamage [] $ damsToExpBarrel damages cr - applyFuseDamage cr' = - cr' & crHP - %~ subtract (length . _piercedPoints . _barrelType $ _crType cr') hiss - | null poss = id - | otherwise = soundMultiFrom [BarrelHiss 0, BarrelHiss 1] (_crPos cr) foamSprayLoopS (Just 1) - stopSounds = stopSoundFrom (BarrelHiss 0) . stopSoundFrom (BarrelHiss 1) + | null ps = id + | otherwise = soundContinue (BarrelHiss (_crID cr)) (_crPos cr) foamSprayLoopS (Just 1) updateBarrel :: Creature -> World -> World updateBarrel cr diff --git a/src/Dodge/Creature/Update.hs b/src/Dodge/Creature/Update.hs index 82e5749aa..645d4728e 100644 --- a/src/Dodge/Creature/Update.hs +++ b/src/Dodge/Creature/Update.hs @@ -15,7 +15,7 @@ updateCreature cr = case _crType cr of Avatar{} -> (cWorld . lWorld . creatures . ix 0 . crType . avatarPulse %~ updatePulse) . crUpdate yourControl cr LampCrit{} -> updateLampoid cr - BarrelCrit{} -> updateBarreloid cr + BarrelCrit bt -> updateBarreloid bt cr AvatarDead -> id _ -> updateHumanoid cr diff --git a/src/Dodge/WorldEvent/Explosion.hs b/src/Dodge/WorldEvent/Explosion.hs index f58910589..28adb0caa 100644 --- a/src/Dodge/WorldEvent/Explosion.hs +++ b/src/Dodge/WorldEvent/Explosion.hs @@ -71,7 +71,7 @@ makeFlameExplosionAt p w = makeExplosionAt :: Point2 -> Point2 -> World -> World makeExplosionAt p vel w = w - & soundMultiFrom [Explosion 0, Explosion 1] p bangS Nothing + & soundStart (Explosion (w ^. cWorld . lWorld . lClock)) p bangS Nothing & addFlames & cWorld . lWorld . worldEvents .:~ MakeTempLight (LSParam (addZ 20 p) 150 (V3 1 0.5 0)) 20 diff --git a/tags b/tags index 7ad04373b..c04faf5b0 100644 --- a/tags +++ b/tags @@ -3389,7 +3389,7 @@ applyGravityPU src/Dodge/Projectile/Update.hs 56;" f applyIndividualDamage src/Dodge/Creature/Damage.hs 47;" f applyInvLock src/Dodge/HeldUse.hs 423;" f applyMagnetsToBul src/Dodge/Bullet.hs 30;" f -applyPastDamages src/Dodge/Creature/State.hs 135;" f +applyPastDamages src/Dodge/Creature/State.hs 131;" f applyPiercingDamage src/Dodge/Creature/Damage.hs 52;" f applyPosition src/Sound.hs 111;" f applyRecoil src/Dodge/HeldUse.hs 455;" f @@ -3577,7 +3577,7 @@ centerVaultRoom src/Dodge/Room/Procedural.hs 289;" f centroid src/Geometry/Polygon.hs 130;" f centroidNum src/Geometry/Polygon.hs 133;" f chainCreatureUpdates src/Dodge/Creature/ChainUpdates.hs 6;" f -chainLinkOrientation src/Dodge/Creature/State.hs 270;" f +chainLinkOrientation src/Dodge/Creature/State.hs 261;" f chainPairs src/Geometry.hs 359;" f changeSwapOther src/Dodge/Inventory.hs 144;" f changeSwapSel src/Dodge/Inventory.hs 137;" f @@ -3592,7 +3592,7 @@ chaseCritPerceptionUpdate src/Dodge/Creature/Perception.hs 31;" f chaseCritVocalization src/Dodge/Creature/ChaseCrit.hs 37;" f checkCombineSelectionExists src/Dodge/DisplayInventory.hs 100;" f checkConnection src/Dodge/Inventory/Swap.hs 64;" f -checkDeath src/Dodge/Creature/State.hs 78;" f +checkDeath src/Dodge/Creature/State.hs 76;" f checkEndGame src/Dodge/Update.hs 705;" f checkErrorGL src/Shader/Compile.hs 255;" f checkFBO src/Framebuffer/Check.hs 6;" f @@ -3704,13 +3704,13 @@ convexHull src/Geometry/Polygon.hs 104;" f convexHullSafe src/Geometry/Polygon.hs 111;" f convexPolysOverlap src/Geometry/ConvexPoly.hs 50;" f copier src/Dodge/Item/Scope.hs 88;" f -copierItemUpdate src/Dodge/Creature/State.hs 176;" f +copierItemUpdate src/Dodge/Creature/State.hs 168;" f copierItemUpdate src/Dodge/ItEffect.hs 37;" f copyItemToFloor src/Dodge/FloorItem.hs 18;" f copyItemToFloorID src/Dodge/FloorItem.hs 22;" f corDoor src/Dodge/Room/Room.hs 376;" f cornerList src/Preload/Render.hs 195;" f -corpseOrGib src/Dodge/Creature/State.hs 107;" f +corpseOrGib src/Dodge/Creature/State.hs 105;" f corridor src/Dodge/Room/Corridor.hs 17;" f corridorBoss src/Dodge/LockAndKey.hs 133;" f corridorN src/Dodge/Room/Corridor.hs 52;" f @@ -3821,7 +3821,7 @@ cylinderPoly src/Shape.hs 87;" f cylinderRoundIndices src/Shader/Poke.hs 389;" f dShadCol src/Dodge/Render/List.hs 215;" f damThingHitWith src/Dodge/WorldEvent/Damage.hs 10;" f -damToExpBarrel src/Dodge/Barreloid.hs 52;" f +damToExpBarrel src/Dodge/Barreloid.hs 44;" f damageBlocksBy src/Dodge/Wall/Damage.hs 36;" f damageCircle src/Dodge/DamageCircle.hs 12;" f damageCircle src/Dodge/EnergyBall.hs 104;" f @@ -3842,7 +3842,7 @@ damageWallEffect src/Dodge/Wall/DamageEffect.hs 12;" f damageWlCircle src/Dodge/DamageCircle.hs 26;" f damageWlCircle src/Dodge/EnergyBall.hs 125;" f dampField src/Dodge/Magnet.hs 8;" f -damsToExpBarrel src/Dodge/Barreloid.hs 49;" f +damsToExpBarrel src/Dodge/Barreloid.hs 41;" f dark src/Color.hs 108;" f darkenBackground src/Dodge/Render/MenuScreen.hs 52;" f dbArg src/Dodge/Base.hs 165;" f @@ -3999,7 +3999,7 @@ dmType src/Dodge/Damage.hs 34;" f doAfterPlacement src/Dodge/Layout.hs 86;" f doAfterPlacements src/Dodge/Layout.hs 83;" f doAimTwist src/Dodge/Creature/YourControl.hs 140;" f -doAnyEquipmentEffect src/Dodge/Creature/State.hs 187;" f +doAnyEquipmentEffect src/Dodge/Creature/State.hs 178;" f doArcStep src/Dodge/Tesla/Arc.hs 135;" f doBackspace src/Dodge/Update/Input/Text.hs 31;" f doBlBl src/Dodge/BlBl.hs 5;" f @@ -4015,7 +4015,7 @@ doCrImp src/Dodge/CreatureEffect.hs 28;" f doCrWdAc src/Dodge/CreatureEffect.hs 77;" f doCrWdImp src/Dodge/CreatureEffect.hs 16;" f doCrWdWd src/Dodge/CreatureEffect.hs 20;" f -doDamage src/Dodge/Creature/State.hs 129;" f +doDamage src/Dodge/Creature/State.hs 127;" f doDeathToggle src/Dodge/WorldEffect.hs 98;" f doDeathTriggers src/Dodge/WorldEffect.hs 93;" f doDebugTest src/Dodge/Update/Input/DebugTest.hs 22;" f @@ -4096,7 +4096,7 @@ doublePair src/Geometry.hs 161;" f doublePairSet src/Geometry.hs 165;" f doubleTreeToIndentList src/Dodge/DoubleTree.hs 72;" f doubleV2 src/Geometry.hs 168;" f -drawARHUD src/Dodge/Creature/State.hs 297;" f +drawARHUD src/Dodge/Creature/State.hs 288;" f drawAimSweep src/Dodge/Render/Picture.hs 271;" f drawAllShadows src/Dodge/Shadows.hs 5;" f drawBaseMachine src/Dodge/Machine/Draw.hs 57;" f @@ -4223,7 +4223,7 @@ drawWlIDs src/Dodge/Debug/Picture.hs 367;" f drawZoneCol src/Dodge/Debug/Picture.hs 142;" f drawZoneNearPointCursor src/Dodge/Debug/Picture.hs 279;" f droneLauncher src/Dodge/Item/Weapon/Drone.hs 11;" f -dropAll src/Dodge/Creature/State.hs 126;" f +dropAll src/Dodge/Creature/State.hs 124;" f dropExcept src/Dodge/Creature/Action.hs 166;" f dropInventoryPath src/Dodge/HeldUse.hs 1354;" f dropItem src/Dodge/Creature/Action.hs 172;" f @@ -4644,16 +4644,15 @@ invCursorParams src/Dodge/ListDisplayParams.hs 36;" f invDP src/Dodge/ListDisplayParams.hs 30;" f invDimColor src/Dodge/DisplayInventory.hs 192;" f invHead src/Dodge/Render/HUD.hs 405;" f -invItemLocUpdate src/Dodge/Creature/State.hs 160;" f +invItemLocUpdate src/Dodge/Creature/State.hs 152;" f invLDT src/Dodge/Item/Grammar.hs 279;" f -invRootItemEffs src/Dodge/Creature/State.hs 153;" f +invRootItemEffs src/Dodge/Creature/State.hs 145;" f invRootMap src/Dodge/Item/Grammar.hs 288;" f invRootTrees src/Dodge/Item/Grammar.hs 309;" f invSelectionItem src/Dodge/Inventory/SelectionList.hs 32;" f invSetSelection src/Dodge/Inventory.hs 185;" f invSetSelectionPos src/Dodge/Inventory.hs 193;" f invShiftPointBy src/Dodge/ShiftPoint.hs 8;" f -invSideEff src/Dodge/Creature/State.hs 149;" f invSize src/Dodge/Inventory/CheckSlots.hs 30;" f inventoryX src/Dodge/Creature.hs 114;" f inverseSelNumPos src/Dodge/SelectionSections.hs 228;" f @@ -5270,7 +5269,7 @@ pointerToItemLocation src/Dodge/Item/Location.hs 14;" f pointerYourRootItem src/Dodge/Item/Location.hs 31;" f pointerYourSelectedItem src/Dodge/Item/Location.hs 25;" f pointsToPoly src/Geometry/ConvexPoly.hs 39;" f -poisonSPic src/Dodge/Creature/State.hs 120;" f +poisonSPic src/Dodge/Creature/State.hs 118;" f poisonSprayer src/Dodge/Item/Held/SprayGuns.hs 17;" f poke34 src/Shader/Poke.hs 506;" f pokeArrayOff src/Shader/Poke.hs 517;" f @@ -5619,7 +5618,7 @@ scaleSH src/Shape.hs 269;" f scalp src/Dodge/Creature/Picture.hs 90;" f scancodeToHotkey src/Dodge/Creature/YourControl.hs 95;" f scodeToChar src/Dodge/ScodeToChar.hs 6;" f -scorchSPic src/Dodge/Creature/State.hs 117;" f +scorchSPic src/Dodge/Creature/State.hs 115;" f screenBox src/Dodge/Base/Window.hs 53;" f screenPolygon src/Dodge/Base/Window.hs 17;" f screenPolygonBord src/Dodge/Base/Window.hs 27;" f @@ -5693,7 +5692,7 @@ setOldPos src/Dodge/Update.hs 466;" f setOutLinks src/Dodge/RoomLink.hs 48;" f setOutLinksByType src/Dodge/RoomLink.hs 57;" f setOutLinksPD src/Dodge/RoomLink.hs 77;" f -setRBCreatureTargeting src/Dodge/Creature/State.hs 403;" f +setRBCreatureTargeting src/Dodge/Creature/State.hs 394;" f setSelWhileDragging src/Dodge/Update/Input/InGame.hs 334;" f setSelectionListRestriction src/Dodge/Update/Input/ScreenLayer.hs 87;" f setShaderSource src/Shader/Compile.hs 290;" f @@ -5761,8 +5760,8 @@ shiftRoomBy src/Dodge/Room/Link.hs 37;" f shiftRoomShiftBy src/Dodge/Room/Link.hs 81;" f shiftRoomShiftToLink src/Dodge/Room/Link.hs 70;" f shiftedGrid src/Grid.hs 25;" f -shineTargetLaser src/Dodge/Creature/State.hs 305;" f -shineTorch src/Dodge/Creature/State.hs 346;" f +shineTargetLaser src/Dodge/Creature/State.hs 296;" f +shineTorch src/Dodge/Creature/State.hs 337;" f shootBullet src/Dodge/HeldUse.hs 936;" f shootFirstMiss src/Dodge/Creature/Volition.hs 33;" f shootLaser src/Dodge/HeldUse.hs 845;" f @@ -6141,8 +6140,8 @@ tryPutItemInInvAt src/Dodge/Inventory/Add.hs 32;" f trySeedFromClipboard src/Dodge/Menu.hs 91;" f tryShellBounce src/Dodge/Projectile/Update.hs 103;" f trySpinByCID src/Dodge/Projectile/Update.hs 178;" f -trySynthBullet src/Dodge/Creature/State.hs 201;" f -tryUseParent src/Dodge/Creature/State.hs 194;" f +trySynthBullet src/Dodge/Creature/State.hs 192;" f +tryUseParent src/Dodge/Creature/State.hs 185;" f turnTo src/Dodge/Movement/Turn.hs 8;" f turret src/Dodge/Placement/Instance/Turret.hs 35;" f turretItemOffset src/Dodge/Item/HeldOffset.hs 19;" f @@ -6182,10 +6181,10 @@ updateAimPos src/Dodge/Update.hs 305;" f updateAllNodes src/TreeHelp.hs 85;" f updateArc src/Dodge/Tesla.hs 44;" f updateArc src/Dodge/Tesla/Arc.hs 100;" f -updateAttachedItems src/Dodge/Creature/State.hs 260;" f +updateAttachedItems src/Dodge/Creature/State.hs 251;" f updateBackspaceRegex src/Dodge/Update/Input/InGame.hs 453;" f -updateBarrel src/Dodge/Barreloid.hs 44;" f -updateBarreloid src/Dodge/Barreloid.hs 14;" f +updateBarrel src/Dodge/Barreloid.hs 36;" f +updateBarreloid src/Dodge/Barreloid.hs 13;" f updateBaseWheelEvent src/Dodge/Update/Scroll.hs 29;" f updateBounds src/Dodge/Update/Camera.hs 250;" f updateBulVel src/Dodge/Bullet.hs 55;" f @@ -6208,7 +6207,7 @@ updateDistortions src/Dodge/Update.hs 532;" f updateEnergyBall src/Dodge/EnergyBall.hs 37;" f updateEnergyBalls src/Dodge/Update.hs 597;" f updateEnterRegex src/Dodge/Update/Input/InGame.hs 480;" f -updateExpBarrel src/Dodge/Barreloid.hs 20;" f +updateExpBarrel src/Dodge/Barreloid.hs 18;" f updateFBOTO src/Framebuffer/Update.hs 97;" f updateFBOTO3 src/Framebuffer/Update.hs 131;" f updateFlame src/Dodge/Flame.hs 19;" f @@ -6217,7 +6216,7 @@ updateFloatingCamera src/Dodge/Update/Camera.hs 34;" f updateFunctionKey src/Dodge/Update/Input/InGame.hs 364;" f updateFunctionKeys src/Dodge/Update/Input/InGame.hs 357;" f updateGusts src/Dodge/Update.hs 714;" f -updateHeldRootItem src/Dodge/Creature/State.hs 254;" f +updateHeldRootItem src/Dodge/Creature/State.hs 245;" f updateHumanoid src/Dodge/Humanoid.hs 13;" f updateIMl src/Dodge/Update.hs 501;" f updateIMl' src/Dodge/Update.hs 506;" f @@ -6225,8 +6224,8 @@ updateInGameCamera src/Dodge/Update/Camera.hs 78;" f updateInitialPressInGame src/Dodge/Update/Input/InGame.hs 400;" f updateInt2Map src/Dodge/Zoning/Base.hs 92;" f updateInventoryPositioning src/Dodge/DisplayInventory.hs 86;" f -updateItemTargeting src/Dodge/Creature/State.hs 372;" f -updateItemWithOrientation src/Dodge/Creature/State.hs 280;" f +updateItemTargeting src/Dodge/Creature/State.hs 363;" f +updateItemWithOrientation src/Dodge/Creature/State.hs 271;" f updateKeyInGame src/Dodge/Update/Input/InGame.hs 394;" f updateKeysInTerminal src/Dodge/Update/Input/InGame.hs 382;" f updateLampoid src/Dodge/Lampoid.hs 12;" f