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
+4 -20
View File
@@ -7,14 +7,12 @@ module Dodge.EnergyBall (
makeMovingEB,
) where
import qualified Data.IntMap.Strict as IM
import Data.List (foldl')
import Dodge.Damage
import Data.Maybe
import Dodge.Base.Collide
import Dodge.Data.World
import Dodge.SoundLogic
import Dodge.Spark
import Dodge.WorldEvent.ThingsHit
import Geometry
import LensHelp
import Picture
@@ -38,7 +36,7 @@ updateEnergyBall :: World -> EnergyBall -> (World, Maybe EnergyBall)
updateEnergyBall w eb
| _ebTimer eb <= 0 = (w, Nothing)
| otherwise =
( ebEffect eb . ebFlicker eb $ damageCircle (_ebPos eb) (_ebEff eb) w
( ebEffect eb . ebFlicker eb $ ebDamage (_ebPos eb) (_ebEff eb) w
, Just $ eb & ebTimer -~ 1 & ebPos .~ bp & ebVel .~ drag * bv
)
where
@@ -101,18 +99,10 @@ ebColor eb = case eb ^. ebEff of
ExplosiveBall -> white
FlashBall -> white
damageCircle :: Point2 -> EnergyBallType -> World -> World
damageCircle sp dt w =
w
& cWorld . lWorld . wallDamages %~ addwalldamages
& cWorld . lWorld . creatures %~ addcreaturedamages
ebDamage :: Point2 -> EnergyBallType -> World -> World
ebDamage sp dt w = damageInCircle (return . (const $ ebtToDamage sp dt)) sp r w
where
addwalldamages wlds = foldl' (damageWlCircle dam) wlds wlstodam
addcreaturedamages crs = foldl' (damageCrCircle dam) crs crstodam
wlstodam = wlsHitRadial sp r w
crstodam = crsHitRadial sp r w
r = fromMaybe 5 $ dt ^? fbSize
dam = ebtToDamage sp dt
ebtToDamage :: Point2 -> EnergyBallType -> Damage
ebtToDamage p = \case
@@ -121,9 +111,3 @@ ebtToDamage p = \case
ElectricalBall{} -> Electrical 10
ExplosiveBall -> Explosive 10 p
FlashBall -> Flashing 10 p
damageWlCircle :: Damage -> IM.IntMap [Damage] -> (Point2, Wall) -> IM.IntMap [Damage]
damageWlCircle dam wls (_, wl) = wls & at (_wlID wl) . non mempty .:~ dam
damageCrCircle :: Damage -> IM.IntMap Creature -> (Point2, Creature) -> IM.IntMap Creature
damageCrCircle dam crs (_, cr) = crs & ix (_crID cr) . crDamage .:~ dam