19 lines
542 B
Haskell
19 lines
542 B
Haskell
module Dodge.Update.WallDamage (updateWallDamages) where
|
|
|
|
import Control.Lens
|
|
import Data.Maybe
|
|
import Dodge.Data.World
|
|
import Dodge.Wall.Damage
|
|
import qualified IntMapHelp as IM
|
|
import Data.Foldable
|
|
|
|
updateWallDamages :: World -> World
|
|
updateWallDamages w =
|
|
w
|
|
& cWorld . lWorld . wallDamages .~ IM.empty
|
|
& flip (IM.foldlWithKey' f) (w ^. cWorld . lWorld . wallDamages)
|
|
where
|
|
f w' k dams = fromMaybe w' $ do
|
|
wl <- w' ^? cWorld . lWorld . walls . ix k
|
|
return $ foldl' (flip (`damageWall` wl)) w' dams
|