Refactor damages in circles

This commit is contained in:
2025-06-20 21:52:42 +01:00
parent edcd947c90
commit b2d64ce698
6 changed files with 56 additions and 56 deletions
+13
View File
@@ -1,12 +1,15 @@
{-# LANGUAGE LambdaCase #-}
module Dodge.Damage (
damageInCircle,
damageCrWl,
damageDirection,
damageCrWlID,
maxDamageType,
) where
import Dodge.WorldEvent.ThingsHit
import Geometry.Data
import Dodge.Data.Damage.Type
import Geometry.Vector
import ListHelp
@@ -53,3 +56,13 @@ collectDamageTypes = foldl' (flip f) M.empty
maxDamageType :: [Damage] -> Maybe (DamageType, Int)
maxDamageType = safeMinimumOn (negate . snd) . M.assocs . collectDamageTypes
damageInCircle :: (Point2 -> [Damage]) -> Point2 -> Float -> World -> World
damageInCircle f p r w = w
& cWorld . lWorld . wallDamages %~ dowldams
& cWorld . lWorld . creatures %~ docrdams
where
dowldams wds = foldl' g wds (wlsHitRadial p r w)
docrdams crs = foldl' h crs (crsHitRadial p r w)
g wds (x,wl) = wds & at (_wlID wl) . non mempty <>~ f x
h crs (x,cr) = crs & ix (_crID cr) . crDamage <>~ f x