Make block damages slightly more logical
This commit is contained in:
+12
-24
@@ -6,35 +6,23 @@ module Dodge.Wall.Damage
|
||||
, damageWall
|
||||
) where
|
||||
import Dodge.Data
|
||||
import Dodge.Block
|
||||
import LensHelp
|
||||
import Dodge.Wall.DamageEffect
|
||||
|
||||
damageWall :: Damage -> Wall -> World -> World
|
||||
damageWall dt wl = case _wlStructure wl of
|
||||
MachinePart mcid -> defaultWallDamage dt wl . (machines . ix mcid . mcDamage .:~ dt)
|
||||
BlockPart blid -> defaultWallDamage dt wl . (blocks . ix blid %~ damageBlockWith dt)
|
||||
-- CreaturePart crid f -> f dt wl crid
|
||||
_ -> defaultWallDamage dt wl
|
||||
damageWall dt wl w = case _wlStructure wl of
|
||||
MachinePart mcid -> fst . defaultWallDamage dt wl $ w
|
||||
& machines . ix mcid . mcDamage .:~ dt
|
||||
BlockPart blid -> let (w',x) = defaultWallDamage dt wl w
|
||||
in w' & blocks . ix blid . blHP -~ x & maybeDestroyBlock blid
|
||||
_ -> fst $ defaultWallDamage dt wl w
|
||||
|
||||
damageBlockWith :: Damage -> Block -> Block
|
||||
damageBlockWith dm = case _dmType dm of
|
||||
PIERCING -> blHP -~ dam
|
||||
BLUNT -> blHP -~ dam
|
||||
CUTTING -> blHP -~ dam
|
||||
EXPLOSIVE -> blHP -~ dam
|
||||
CONCUSSIVE -> blHP -~ dam
|
||||
SHATTERING -> blHP -~ dam
|
||||
CRUSHING -> blHP -~ (dam `div` 4)
|
||||
LASERING -> id
|
||||
SPARKING -> id
|
||||
FLAMING -> id
|
||||
ELECTRICAL -> id
|
||||
TORQUEDAM -> id
|
||||
PUSHDAM -> id
|
||||
POISONDAM -> id
|
||||
ENTERREMENT -> id
|
||||
where
|
||||
dam = _dmAmount dm
|
||||
-- block destruction is convoluted...
|
||||
maybeDestroyBlock :: Int -> World -> World
|
||||
maybeDestroyBlock blid w = case w ^? blocks . ix blid of
|
||||
Just bl | _blHP bl < 1 -> destroyBlock bl w
|
||||
_ -> w
|
||||
|
||||
damageBlocksBy :: Int -> Wall -> World -> World
|
||||
damageBlocksBy x wl = case wl ^? wlStructure . wsBlock of
|
||||
|
||||
Reference in New Issue
Block a user