Cleanup
This commit is contained in:
@@ -1,35 +1,41 @@
|
||||
module Dodge.Update.WallDamage (updateWallDamages,updateEdgesWall) where
|
||||
module Dodge.Update.WallDamage (updateWallDamages, updateEdgesWall) where
|
||||
|
||||
import Dodge.WorldEvent.ThingsHit
|
||||
import Dodge.Path
|
||||
import Dodge.Zoning.Base
|
||||
import Geometry.Data
|
||||
import Control.Lens
|
||||
import Data.Maybe
|
||||
import Dodge.Data.World
|
||||
import Dodge.Wall.Damage
|
||||
import qualified IntMapHelp as IM
|
||||
import Data.Foldable
|
||||
import Data.Maybe
|
||||
import qualified Data.Set as S
|
||||
import Dodge.Data.World
|
||||
import Dodge.Path
|
||||
import Dodge.Wall.Damage
|
||||
import Dodge.WorldEvent.ThingsHit
|
||||
import Dodge.Zoning.Base
|
||||
import qualified IntMapHelp as IM
|
||||
|
||||
updateWallDamages :: World -> World
|
||||
updateWallDamages w =
|
||||
let (is,w')
|
||||
= IM.foldlWithKey' f (mempty,w) (w ^. cWorld . lWorld . wallDamages)
|
||||
in updateEdgesWall (zonesExtract (w ^. incEdgeZoning & each . each %~ S.fromList) is) w'
|
||||
updateWallDamages w =
|
||||
let (is, w') =
|
||||
IM.foldlWithKey' f (mempty, w) (w ^. cWorld . lWorld . wallDamages)
|
||||
in updateEdgesWall is
|
||||
w'
|
||||
& cWorld . lWorld . wallDamages .~ IM.empty
|
||||
where
|
||||
f isw k dams = fromMaybe isw $ do
|
||||
wl <- isw ^? _2 . cWorld . lWorld . walls . ix k
|
||||
return $ foldl' (flip (`damageWall` wl)) isw dams
|
||||
|
||||
updateEdgesWall :: S.Set (Int,Int) -> World -> World
|
||||
updateEdgesWall = flip $ foldl' updateEdgeWallObs
|
||||
updateEdgesWall :: S.Set Int2 -> World -> World
|
||||
updateEdgesWall is w = updateEdgesWall'
|
||||
(zonesExtract (w ^. incEdgeZoning & each . each %~ S.fromList) is) w
|
||||
|
||||
updateEdgeWallObs :: World -> (Int,Int) -> World
|
||||
updateEdgeWallObs w (i,j) = fromMaybe w $ do
|
||||
updateEdgesWall' :: S.Set (Int, Int) -> World -> World
|
||||
updateEdgesWall' = flip $ foldl' updateEdgeWallObs
|
||||
|
||||
updateEdgeWallObs :: World -> (Int, Int) -> World
|
||||
updateEdgeWallObs w (i, j) = fromMaybe w $ do
|
||||
s <- getNodePos i w
|
||||
e <- getNodePos j w
|
||||
let wlflags = foldMap (^. _2 . wlPathFlag) $ wlsHitUnsorted s e w
|
||||
return $ w & cWorld . incGraph %~ updateEdge (f wlflags) (i,j)
|
||||
return $ w & cWorld . incGraph %~ updateEdge (f wlflags) (i, j)
|
||||
where
|
||||
f x _ = S.map WallObstacle x
|
||||
|
||||
Reference in New Issue
Block a user