Files
loop/src/Dodge/Room/Door.hs
T
2025-10-24 13:30:46 +01:00

47 lines
1.4 KiB
Haskell

{- Rooms that connect other rooms, blocking sight. -}
module Dodge.Room.Door where
import Dodge.Default.Wall
import Data.Maybe
import Dodge.Data.GenWorld
import Dodge.Default.Room
import Dodge.Placement.Instance
import Dodge.RoomLink
import Geometry
import Control.Lens
door :: Room
door =
defaultRoom
{ _rmPolys = [rectNSWE 40 0 0 40]
, _rmLinks = lnks
, _rmPath = doublePairSet (V2 20 35, V2 20 5)
, -- door extends into side walls (for shadows as rendered 12/03)
_rmPmnts = [putAutoDoor (V2 0 20) (V2 40 20)]
, _rmName = "autoDoor"
, _rmBound = [rectNSWE 21 19 0 40]
}
where
lnks =
[ uncurry outLink (V2 20 35, 0)
, uncurry inLink (V2 20 5, pi)
]
triggerDoorRoom :: Int -> Room
triggerDoorRoom i =
defaultRoom
{ _rmPolys = [rectNSWE 40 0 0 40]
, _rmLinks = [uncurry outLink (V2 20 35, 0), uncurry inLink (V2 20 5, pi)]
, _rmPath = doublePairSet (V2 20 35, V2 20 5)
, _rmInPmnt = [(0,f)]
, _rmName = "triggerDoorRoom"
-- door extends into side walls (for shadows as rendered 12/03/21)
-- note no bounds
}
where
f gw = fromMaybe (error "tried to put a door using an empty placement list") $ do
pmnt <- gw ^? genPmnt . ix i
return $ putDoubleDoor
switchWallObs defaultDoorWall (cond pmnt) (V2 0 20) (V2 40 20) 2
cond pmnt = WdTrig $ fromJust (_plMID pmnt)