Work on chasm rooms
This commit is contained in:
@@ -21,8 +21,11 @@ module Dodge.RoomLink (
|
||||
setLinkType,
|
||||
getLinksOfType,
|
||||
swapInOutLinks,
|
||||
isCornerLink,
|
||||
isMidEdgeLink,
|
||||
) where
|
||||
|
||||
import Dodge.Base.CardinalPoint
|
||||
import Control.Lens
|
||||
import Data.List (partition)
|
||||
import qualified Data.Set as S
|
||||
@@ -51,6 +54,22 @@ setOutLinks = setLinkType OutLink
|
||||
setInLinks :: (RoomLink -> Bool) -> [RoomLink] -> [RoomLink]
|
||||
setInLinks = setLinkType InLink
|
||||
|
||||
isMidEdgeLink :: Room -> CardinalPoint -> RoomLink -> Bool
|
||||
isMidEdgeLink r x rl
|
||||
| x == North || x == South = g West (f $ r ^?! rmType . numLinkEW)
|
||||
| otherwise = g South (f $ r ^?! rmType . numLinkNS)
|
||||
where
|
||||
f y | even y = [y `div` 2]
|
||||
| otherwise = [y `div` 2, 1 + (y `div` 2)]
|
||||
g a = any (\y -> FromEdge a y `S.member` (rl ^. rlType))
|
||||
|
||||
isCornerLink :: CardinalPointBetween -> RoomLink -> Bool
|
||||
isCornerLink x rl = (OnEdge a `S.member` xs && FromEdge b 0 `S.member` xs)
|
||||
|| (OnEdge b `S.member` xs && FromEdge a 0 `S.member` xs)
|
||||
where
|
||||
xs = rl ^. rlType
|
||||
(a,b) = cardinalBetweenAdj x
|
||||
|
||||
setInLinksByType :: RoomLinkType -> [RoomLink] -> [RoomLink]
|
||||
setInLinksByType lt = setInLinks (\rl -> lt `S.member` _rlType rl)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user