Files
loop/src/Dodge/Room/Door.hs
T

49 lines
1.5 KiB
Haskell

{- Rooms that connect other rooms, blocking sight. -}
module Dodge.Room.Door where
import Dodge.Default.Door
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]
, _rmBound = [rectNSWE 21 19 0 40]
}
where
lnks =
[ outLink (V2 20 35) 0
, inLink (V2 20 5) pi
]
triggerDoorRoom :: Int -> Room
triggerDoorRoom i =
defaultRoom
{ _rmPolys = [rectNSWE 40 0 0 40]
, _rmLinks = [outLink (V2 20 35) 0, 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 = return $ fromMaybe (error "tried to put a door using an empty placement list") $ do
pmnt <- gw ^? genPmnt . ix i
return $ putDoubleDoor defaultDoorWall (V2 0 20) (V2 40 20)
(defaultDoor & drTrigger .~ cond pmnt)
cond pmnt = WdTrig $ fromJust (_plMID pmnt)