module Dodge.Room.RunPast ( lockedStart, ) where import Color import qualified Data.Set as S import Dodge.Cleat import Dodge.Data.GenWorld import Dodge.Item.Random import Dodge.LevelGen.PlacementHelper import Dodge.LightSource import Dodge.Placement.Instance import Dodge.PlacementSpot import Dodge.Room.Corridor import Dodge.Room.Door import Dodge.Room.Link import Dodge.Room.Procedural import Dodge.Tree import Geometry.Data import Geometry.Polygon import LensHelp import RandomHelp roomCritLS :: RandomGen g => State g LightSource roomCritLS = do col <- takeOne [0.5, 0.6] h <- takeOne [30, 35] rad <- takeOne [300] return $ lsColPosRad col (V3 0 0 h) rad smallRoom :: Room smallRoom = corridorWallN & rmRandPSs .~ [psRandRanges (15, 25) (30, 45) (pi, 2 * pi)] lockedStart :: RandomGen g => Int -> State g (Tree Room) lockedStart i = do h <- state $ randomR (200, 400 :: Float) thels <- roomCritLS theweapon <- randBlockBreakWeapon cenroom <- shuffleLinks $ roomRectAutoLinks 40 h & rmPmnts .~ [] theedge <- takeOne $ map OnEdge [West, East] let linkcor = smallRoom & rmPmnts .~ [spanLS thels (V2 0 65) (V2 40 65)] n = length $ filter (elem theedge . _rlType) (_rmLinks cenroom) doorrooms = map (treePost . (triggerDoorRoom i :)) $ [linkcor & rmPmnts .:~ plRRpt 0 randC1] : [linkcor, corridor, corridor, cleatOnward door] : replicate (n -2) [linkcor] return $ Node cenroom $ map (over root $ rmConnectsTo .~ S.member theedge) doorrooms ++ [ return smallRoom { _rmOutPmnt = [OutPlacement (putLitButOnPosExtTrig red useUnusedLnk) i] , _rmPmnts = [plRRpt 0 (PutFlIt theweapon)] , _rmBound = [rectNSWE 70 30 0 40] } ]