Refactor damages in circles
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user