This commit is contained in:
2022-06-11 13:26:50 +01:00
parent f41fbbbb8d
commit db8c30dac8
5 changed files with 18 additions and 53 deletions
-26
View File
@@ -8,11 +8,7 @@ module Dodge.Room.Link
, moveRoomBy
, shiftLinkBy
, doRoomShift
, sortOutLinksOn
, filterSortOutLinksOn
, randomiseAllLinks
, shuffleLinks
, filterLinks
, chooseOneInLink
, restrictRMInLinksPD
) where
@@ -27,7 +23,6 @@ import Data.Tile
import Dodge.RoomLink
import Control.Lens
import Data.List
import qualified Data.Set as S
chooseOneInLink :: RandomGen g => Room -> State g Room
@@ -43,32 +38,11 @@ restrictToFstInLink = rmLinks %~ f
| otherwise = rl : f xs
f [] = []
sortOutLinksOn :: Ord b => ((Point2,Float) -> b) -> Room -> Room
sortOutLinksOn f = overLnkType OutLink $ sortOn (f . lnkPosDir)
filterSortOutLinksOn :: Ord b => ((Point2,Float) -> Bool) -> ((Point2,Float) -> b) -> Room -> Room
filterSortOutLinksOn test f = overLnkType OutLink dosort
where
dosort [] = []
dosort xs = let (ys,zs) = partition (test . lnkPosDir) xs
in sortOn (f . lnkPosDir) ys ++ zs
{- Shuffle the order of all links of a room randomly.
- Note this does not change their types. -}
randomiseAllLinks :: RandomGen g => Room -> State g Room
randomiseAllLinks r = do
newLinks <- shuffle $ _rmLinks r
return $ r {_rmLinks = newLinks }
{- Shuffle the order of all links of a room randomly.
- Note this does not change their types. -}
shuffleLinks :: RandomGen g => Room -> State g Room
shuffleLinks = rmLinks %%~ shuffle
filterLinks :: RandomGen g => ((Point2,Float) -> Bool) -> Room -> State g Room
filterLinks cond r = do
newLinks <- shuffle $ filter (cond . lnkPosDir) $ _rmLinks r
return $ r {_rmLinks = newLinks}
doRoomShift :: Room -> Room
doRoomShift rm = shiftRoomBy (_rmShift rm) rm & rmShift .~ _rmShift rm