--{-# 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.UseAll import LensHelp import Geometry --import Dodge.Item.Equipment import Data.List roomsContaining :: RandomGen g => [Creature] -> [Item] -> State g (LabTree Room) roomsContaining crs its = do endroom <- join $ takeOne [ randomFourCornerRoomCrsIts crs its , tanksRoom crs its ] return (toOnward ("roomsContaining-creatures:" ++ intercalate "," (map _crName crs) ++ "-items:" ++ intercalate "," (map (show . _iyBase . _itType) its)) , pure $ useAll 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-"