30 lines
762 B
Haskell
30 lines
762 B
Haskell
module Dodge.Wall.Delete (
|
|
deleteWallIDs,
|
|
deleteWallID,
|
|
) where
|
|
|
|
import Data.Foldable
|
|
import Control.Lens
|
|
import qualified Data.IntSet as IS
|
|
import Dodge.Data.World
|
|
import Dodge.Wall.Zone
|
|
import qualified IntMapHelp as IM
|
|
|
|
deleteWallID :: Int -> World -> World
|
|
deleteWallID i w =
|
|
w & cWorld . lWorld . walls %~ IM.delete i
|
|
& deleteWallFromZones wl
|
|
where
|
|
--wl = _walls (_cWorld w) IM.! i
|
|
wl = w ^?! cWorld . lWorld . walls . ix i
|
|
|
|
deleteWall :: Wall -> World -> World
|
|
deleteWall wl =
|
|
(cWorld . lWorld . walls %~ IM.delete i)
|
|
. deleteWallFromZones wl
|
|
where
|
|
i = _wlID wl
|
|
|
|
deleteWallIDs :: IS.IntSet -> World -> World
|
|
deleteWallIDs is w = foldl' (flip deleteWall) w $ IM.restrictKeys (w ^. cWorld . lWorld . walls) is
|