Files
loop/src/Dodge/Wall/Delete.hs
T

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