This commit is contained in:
2025-06-20 19:40:07 +01:00
parent 86b10d02c8
commit d7354f7bc9
4 changed files with 52 additions and 56 deletions
+23 -26
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+27 -28
View File
@@ -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