Redo maxDamageType

This commit is contained in:
2025-06-08 20:56:56 +01:00
parent 70c78824f3
commit 1b769ad504
4 changed files with 81 additions and 73 deletions
+25 -8
View File
@@ -7,12 +7,15 @@ module Dodge.Damage (
maxDamageType,
) where
import Dodge.Data.Damage.Type
import Geometry.Vector
import ListHelp
import Dodge.Data.CrWlID
import Dodge.Data.World
import qualified IntMapHelp as IM
import LensHelp
import qualified Data.Map.Strict as M
import FoldableHelp
damageCrWlID :: Damage -> CrWlID -> World -> World
damageCrWlID dam = \case
@@ -28,12 +31,26 @@ damageCrWl dt (Right wl) = cWorld . lWorld . wallDamages %~ IM.insertWith (++) (
damageDirection :: [Damage] -> Maybe Float
damageDirection ds = safeArgV =<< safeHead (ds ^.. each . dmVector)
--collectDamageTypes :: [Damage] -> M.Map DamageType Int
--collectDamageTypes = foldl' (flip f) M.empty
-- where
-- f dm = M.insertWith (+) (_dmType dm) (_dmAmount dm)
--
maxDamageType :: [Damage] -> Maybe (Damage, Int)
maxDamageType _ = Nothing
dmType :: Damage -> DamageType
dmType = \case
Piercing {} -> PhysicalDamage
Blunt {} -> PhysicalDamage
Sparking {} -> CookingDamage
Crushing {} -> PhysicalDamage
Shattering {} -> PhysicalDamage
Flaming {} -> CookingDamage
Lasering {} -> CookingDamage
Flashing {} -> CookingDamage
Electrical {} -> CookingDamage
Explosive {} -> PhysicalDamage
Poison {} -> PoisonDamage
Enterrement {} -> PhysicalDamage
--maxDamageType = safeMinimumOn (negate . snd) . M.assocs . collectDamageTypes
collectDamageTypes :: [Damage] -> M.Map DamageType Int
collectDamageTypes = foldl' (flip f) M.empty
where
f dm = at (dmType dm) . non 0 +~ _dmAmount dm
--f dm = M.insertWith (+) (dmType dm) (_dmAmount dm)
maxDamageType :: [Damage] -> Maybe (DamageType, Int)
maxDamageType = safeMinimumOn (negate . snd) . M.assocs . collectDamageTypes