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