From 151c0377635d1c26916c5b0b250d84e05e62948e Mon Sep 17 00:00:00 2001 From: justin Date: Wed, 22 Oct 2025 22:27:09 +0100 Subject: [PATCH] Fix path updating when doors move --- src/Dodge/Default/Wall.hs | 6 +----- src/Dodge/Update.hs | 8 ++++---- src/Dodge/Zoning/Base.hs | 1 - 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Dodge/Default/Wall.hs b/src/Dodge/Default/Wall.hs index bcf497794..18fb7c255 100644 --- a/src/Dodge/Default/Wall.hs +++ b/src/Dodge/Default/Wall.hs @@ -37,11 +37,7 @@ defaultWall = } defaultDoorWall :: Wall -defaultDoorWall = - defaultWall - { _wlPathable = True - , _wlMaterial = Metal - } +defaultDoorWall = defaultWall { _wlMaterial = Metal } {- Indestructible see-through wall. -} defaultCrystalWall :: Wall diff --git a/src/Dodge/Update.hs b/src/Dodge/Update.hs index f67c9566f..29442a886 100644 --- a/src/Dodge/Update.hs +++ b/src/Dodge/Update.hs @@ -319,13 +319,13 @@ updateEdgesWall = flip $ foldl' updateEdgeWallObs updateEdgeWallObs :: World -> (Int,Int) -> World updateEdgeWallObs w (i,j) = fromMaybe w $ do s <- getNodePos i w - e <- getNodePos i w + e <- getNodePos j w let wls = snd <$> wlsHitUnsorted s e w return $ w & cWorld . incGraph %~ updateEdge (f wls) (i,j) where - f wls = at DoorObstacle ?~ () --- | all _wlWalkable wls = (at BlockObstacle .~ Nothing) . (at DoorObstacle .~ Nothing) --- | otherwise = at DoorObstacle ?~ () + f wls + | all _wlPathable wls = (at BlockObstacle .~ Nothing) . (at DoorObstacle .~ Nothing) + | otherwise = at DoorObstacle ?~ () updateDoors :: World -> World updateDoors w = let (is,w') = foldrM doDrWdWd' w (w ^. cWorld . lWorld . doors) diff --git a/src/Dodge/Zoning/Base.hs b/src/Dodge/Zoning/Base.hs index de92e4aad..8da441880 100644 --- a/src/Dodge/Zoning/Base.hs +++ b/src/Dodge/Zoning/Base.hs @@ -49,7 +49,6 @@ zoneOfPoint = fmap . divTo zoneOfSeg :: Float -> Point2 -> Point2 -> [Int2] {-# INLINE zoneOfSeg #-} zoneOfSeg s sp ep = map (zoneOfPoint s) (sp : xIntercepts s sp ep ++ yIntercepts s sp ep) ---zoneOfSeg s sp ep = map (zoneOfPoint s) (sp : xIntercepts s sp ep ) zoneOfSegSet :: Float -> Point2 -> Point2 -> S.Set Int2 {-# INLINE zoneOfSegSet #-}