46 lines
1.5 KiB
Haskell
46 lines
1.5 KiB
Haskell
--{-# LANGUAGE TupleSections #-}
|
|
module Dodge.Room.Containing where
|
|
import Dodge.Data
|
|
import Dodge.Tree
|
|
import Dodge.LevelGen.Data
|
|
import RandomHelp
|
|
import Dodge.Room.Procedural
|
|
import Dodge.Room.Tanks
|
|
import Dodge.Room.Link
|
|
import Dodge.Room.Ngon
|
|
import Dodge.Cleat
|
|
import LensHelp
|
|
import Geometry
|
|
--import Dodge.Item.Equipment
|
|
|
|
import Data.List
|
|
|
|
roomsContaining :: RandomGen g => [Creature] -> [Item] -> State g (MetaTree Room String)
|
|
roomsContaining crs its = do
|
|
endroom <- join $ takeOne
|
|
[ randomFourCornerRoomCrsIts crs its
|
|
, tanksRoom crs its
|
|
]
|
|
rToOnward ("roomsContaining-creatures:" ++ intercalate "," (map _crName crs)
|
|
++ "-items:" ++ intercalate "," (map (show . _iyBase . _itType) its))
|
|
$ pure $ cleatOnward endroom
|
|
roomsContaining' :: RandomGen g => [Creature] -> [Item] -> State g (Tree Room)
|
|
roomsContaining' crs its = do
|
|
endroom <- join $ takeOne
|
|
[ randomFourCornerRoomCrsIts crs its
|
|
, tanksRoom crs its
|
|
]
|
|
return (pure $ cleatOnward endroom)
|
|
|
|
pedestalRoom :: RandomGen g => Item -> State g Room
|
|
pedestalRoom it = do
|
|
let flit = PutFlIt it
|
|
x <- state $ randomR (150,250)
|
|
ngon <- state $ randomR (5,9)
|
|
r <- takeOne
|
|
[ shuffleLinks =<< (centerVaultRoom x x 50 <&> rmPmnts .:~ sps0 flit)
|
|
, shuffleLinks $ roomRectAutoLinks (2*x) (2*x) & rmPmnts .:~ sPS (V2 x x) 0 flit
|
|
, shuffleLinks $ roomNgon ngon x & rmPmnts .:~ sps0 flit
|
|
]
|
|
r <&> rmName .++~ "ped-"
|