Redo maxDamageType
This commit is contained in:
@@ -3,6 +3,7 @@ module Dodge.Creature.State (
|
||||
doDamage,
|
||||
) where
|
||||
|
||||
import Dodge.Data.Damage.Type
|
||||
import Dodge.Item.BackgroundEffect
|
||||
import Dodge.Item.MaxAmmo
|
||||
import Control.Applicative
|
||||
@@ -108,10 +109,9 @@ checkDeath cr w
|
||||
-- could look at the amount of damage here (given by maxDamage) too
|
||||
corpseOrGib :: Creature -> World -> World
|
||||
corpseOrGib cr = case cr ^? crState . csDamage . to maxDamageType . _Just . _1 of
|
||||
Just Flaming{} -> plNew (cWorld . lWorld . corpses) cpID (thecorpse & cpSPic %~ scorchSPic)
|
||||
Just Electrical{} -> plNew (cWorld . lWorld . corpses) cpID thecorpse
|
||||
Just Poison{} -> plNew (cWorld . lWorld . corpses) cpID (thecorpse & cpSPic %~ poisonSPic)
|
||||
_ | _crPastDamage cr > 200 -> addCrGibs cr
|
||||
Just CookingDamage -> plNew (cWorld . lWorld . corpses) cpID (thecorpse & cpSPic %~ scorchSPic)
|
||||
Just PoisonDamage -> plNew (cWorld . lWorld . corpses) cpID (thecorpse & cpSPic %~ poisonSPic)
|
||||
Just PhysicalDamage | _crPastDamage cr > 200 -> addCrGibs cr
|
||||
_ -> plNew (cWorld . lWorld . corpses) cpID thecorpse
|
||||
where
|
||||
thecorpse = makeCorpse cr
|
||||
|
||||
+25
-8
@@ -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
|
||||
|
||||
@@ -33,3 +33,6 @@ data Damage
|
||||
|
||||
makeLenses ''Damage
|
||||
deriveJSON defaultOptions ''Damage
|
||||
--deriveJSON defaultOptions ''DamageType
|
||||
--instance ToJSONKey DamageType
|
||||
--instance FromJSONKey DamageType
|
||||
|
||||
Reference in New Issue
Block a user