Make damage application belong to hit object

This commit is contained in:
2022-03-25 08:33:54 +00:00
parent 3aea0db385
commit 9adc7c81f4
9 changed files with 30 additions and 65 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ explosiveBarrel = defaultInanimate
}
updateBarrel :: Creature -> World -> World
updateBarrel cr
| _crHP cr > 0 = creatures . ix (_crID cr) %~ doDamage
| _crHP cr > 0 = creatures . ix (_crID cr) %~ (snd . doDamage)
| otherwise = creatures . at (_crID cr) .~ Nothing
-- should generate the sparks externally using new random generators
+1 -1
View File
@@ -62,7 +62,7 @@ updateLamp h i cr w
& creatures . at cid .~ Nothing
| otherwise = w
& lightSources . ix i . lsParam . lsPos .~ addZ h cpos
& creatures . ix cid %~ doDamage
& creatures . ix cid %~ (snd . doDamage)
where
cpos = _crPos cr
cid = _crID cr
+12 -10
View File
@@ -47,14 +47,16 @@ stateUpdate :: (Creature -> World -> (World -> World, Creature))
-> Creature -> World -> World
stateUpdate = stateUpdateDamage doDamage
stateUpdateDamage :: (Creature -> Creature)
stateUpdateDamage :: (Creature -> (World -> World,Creature))
-> (Creature -> World -> (World -> World, Creature))
-- -> CRUpdate
-> Creature -> World -> World
stateUpdateDamage damageupdate u cr w = case u (updateMovement cr) w of
(f, upcr) -> mvcrhammerup . invSideEff upcr . movementSideEff cr . deathEff . f $ w
& creatures . at (_crID cr) .~ (stepReloading . damageupdate <$> crOrCorpse upcr)
stateUpdateDamage damageupdate u cr w =
mvcrhammerup . invSideEff upcr . movementSideEff cr . deathEff . f . g $ w
& creatures . at (_crID cr) .~ (stepReloading <$> crOrCorpse upcr')
where
(f,upcr) = u (updateMovement cr) w
(g,upcr') = damageupdate upcr
mvcrhammerup = creatures . ix (_crID cr) . crHammerPosition %~ moveHammerUp
crOrCorpse cr'
| cr' ^. crHP > 0 = Just cr'
@@ -80,13 +82,13 @@ setOldPos cr = cr
& crOldPos .~ _crPos cr
& crOldDir .~ _crDir cr
clearDamage :: Creature -> Creature
clearDamage = crState . crDamage .~ []
clearDamage :: Creature -> (World-> World,Creature)
clearDamage cr = (id,cr&crState . crDamage .~ [])
doDamage :: Creature -> Creature
doDamage cr = set (crState . crDamage) []
. over (crState . crPastDamage) (advancePastDamages dams)
$ snd $ _crApplyDamage cr dams cr
doDamage :: Creature -> (World -> World, Creature)
doDamage cr = set (_2 . crState . crDamage) []
. over (_2 . crState . crPastDamage) (advancePastDamages dams)
$ _crApplyDamage cr dams cr
where
dams = _crDamage $ _crState cr