49 lines
1.5 KiB
Haskell
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)
|