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
+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