Correct non-pushing of partially destroyed doors

This commit is contained in:
2022-06-23 15:20:50 +01:00
parent 56b9b2dd9e
commit 85406d06c1
6 changed files with 23 additions and 4 deletions
+8
View File
@@ -60,8 +60,16 @@ destroyDoor dr w = w
& deleteWallIDs wlids
& doors %~ IM.delete (_drID dr)
& flip (foldr (wlDustAt awl)) (map (pos +.+) ps)
& stopPushing (_drPushes dr)
where
wlids = _drWallIDs dr
awl = _walls w IM.! IS.findMin wlids
pos = fst . _wlLine $ _walls w IM.! IS.findMin wlids
ps = replicateM 25 (randInCirc 20) & evalState $ _randGen w
stopPushing :: Maybe Int -> World -> World
stopPushing mdrid w = fromMaybe w $ do
drid <- mdrid
dr <- w ^? doors . ix drid
return $ w & doors . ix drid . drMech .~ const id
& stopPushing (_drPushes dr)