Simplify shockwave damages
This commit is contained in:
@@ -1,11 +1,8 @@
|
||||
module Dodge.Shockwave.Update (updateShockwave) where
|
||||
|
||||
import Data.Foldable
|
||||
import Dodge.Base.Collide
|
||||
import Dodge.Damage
|
||||
import Dodge.Creature.Radius
|
||||
import Dodge.Data.World
|
||||
import Dodge.Wall.Damage
|
||||
import Dodge.Zoning.Wall
|
||||
import Geometry.Vector
|
||||
import qualified IntMapHelp as IM
|
||||
import LensHelp
|
||||
@@ -20,24 +17,25 @@ moveShockwave w sw
|
||||
| _swTimer sw <= 0 = (w, Nothing)
|
||||
| otherwise = (doDams w, Just $ sw & swTimer -~ 1)
|
||||
where
|
||||
is = _swInvulnerableCrs sw
|
||||
-- is = _swInvulnerableCrs sw
|
||||
r = _swRad sw
|
||||
p = _swPos sw
|
||||
dam = _swDam sw
|
||||
t = _swTimer sw
|
||||
tFraction = fromIntegral t / fromIntegral (_swMaxTime sw)
|
||||
rad = r - (3 / 4) * r * tFraction
|
||||
doDams w' =
|
||||
over (cWorld . lWorld . creatures) (IM.map damCr) $
|
||||
foldl'
|
||||
(flip $ damageWall (Explosive 1000 p))
|
||||
w'
|
||||
hitBlocks
|
||||
hitBlocks = map snd . overlapCircWalls p rad $ wlsNearCirc p rad w
|
||||
-- this is not expansive enough
|
||||
damCr cr
|
||||
| _crID cr `elem` is || dist (_crPos cr) p >= rad + crRad (cr ^. crType) = cr
|
||||
| otherwise = cr & crDamage .:~ Explosive dam p
|
||||
doDams = damageInCircle (Explosive dam) p rad
|
||||
-- doDams w' =
|
||||
-- over (cWorld . lWorld . creatures) (IM.map damCr) $
|
||||
-- foldl'
|
||||
-- (flip $ damageWall (Explosive 1000 p))
|
||||
-- w'
|
||||
-- hitBlocks
|
||||
-- hitBlocks = map snd . overlapCircWalls p rad $ wlsNearCirc p rad w
|
||||
-- -- this is not expansive enough
|
||||
-- damCr cr
|
||||
-- | _crID cr `elem` is || dist (_crPos cr) p >= rad + crRad (cr ^. crType) = cr
|
||||
-- | otherwise = cr & crDamage .:~ Explosive dam p
|
||||
|
||||
--where
|
||||
-- cpos = _crPos cr
|
||||
|
||||
Reference in New Issue
Block a user